|
|
1
5
我很难理解这个问题,但我想你会发现了解一些有关 术语重写系统 这似乎是你的建议。无论机制是树重写(始终有效)还是正则表达式(在某些语言中某些时间有效,而其他语言则始终有效),都是次要的。 通过术语重写来优化对象代码是绝对可能的。你可能也会从学习一些关于 窥视孔优化 戴维森和弗雷泽的一篇论文是关于 retargetable peephole optimizer . 还有 excellent later work 贝尼特斯和戴维森。 |
|
|
2
8
实际上你应该做的是建立一个 Abstract Syntax Tree (AST) . 它是以树的形式表示的源代码,这非常容易使用,尤其是进行转换和优化。 用树表示的代码应该类似于:
然后您可以尝试进行一些转换:总和是所有项的总和:
然后您可以扫描树,您可以有以下规则:
然后你将得到你想要的:
任何一本关于编译器写作的好书都会在ASTS上讨论很多。函数式编程语言特别适合这项任务,因为通常很容易表示树,并进行模式匹配来解析和转换树。 通常,对于这个任务, 应避免使用正则表达式 . 正则表达式定义了数学家所说的 常规语言 .任何 常规语言 可以是 解析 通过一组正则表达式。但是,我认为您的语言不是常规语言,因此不能由regexps正确解析。 人们试着,试着,试着用正则表达式解析HTML等语言。这在这里已经被广泛讨论过了,所以您不能用正则表达式解析HTML。总是会有一个例外情况,在这种情况下,您的正则表达式会失败,您必须对它进行调整。 对于您的语言来说可能是一样的:如果它不是规则的,您应该避免很多麻烦,并且不要试图使用正则表达式解析它(尤其是“转换”它)。 |
|
|
giantjenga · 优化整数向量到二进制向量的转换 1 年前 |
|
|
Daniel Lobo · 使用约束进行优化 1 年前 |
|
Sergio · python中大量数字的乘法 1 年前 |
|
|
Sergey Dev · 临时表与表变量 1 年前 |
|
|
John · 减少C中的内存消耗++ 1 年前 |