作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果您正在构建一个编译器,那么在 AST 级别进行哪种优化是最好的?
最佳答案
大多数情况下,您无法在 AST 级别进行有趣的优化,因为您需要有关数据如何从程序的一个部分流向另一部分的信息。虽然数据流隐含在 AST 的含义中,但仅通过检查 AST 并不能轻易确定,这就是为什么人们构建编译器和优化器构建其他程序表示(包括符号表、控制流图、到达定义、数据流)和 SSA 表格等)。
拥有一种语言的解析器是分析/操作该语言的简单部分。
你需要所有其他东西才能做好工作。
如果您确实拥有所有其他表示形式,则可以考虑在 AST 级别进行优化。大多数构建编译器的人都不会打扰;它们转换为数据流表示并对其进行简单优化。但是,如果您想通过更改重现源代码,则需要 AST。您还需要一个 pretty-print 来使您能够重新生成源代码。如果你走到这一步,你最终会得到一个源到源
程序转换系统。
DMS Software Reengineering Toolkit是一个转换 AST 的系统,使用所有这些其他表示来启用转换所需的分析。
关于compiler-construction - 你最喜欢的抽象语法树优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1825298/
只是想知道 session 是否可用于在我的 Django 应用程序上创建两个产品的快速比较 View 。我正在列出待售商品,并希望用户能够“喜欢”多个商品,然后有一个新 View 来比较所选产品。有
我是一名优秀的程序员,十分优秀!