gno*_*ule 6 compiler-construction optimization abstract-syntax-tree
,我将 IR 定义为 3 地址代码类型表示(我意识到人们也可以将其表示为 AST 表示)。
我的理解是,在为命令式语言编写最佳实践编译器时,代码优化发生在 AST(可能最好使用访问者模式)和从 AST 生成的 IR 上。
(a) 对吗?
(b) 在生成 IR 之前最好在 AST 上处理哪种类型的优化步骤?(参考一篇文章/在线列表也欢迎,只要它涉及命令式语言)
我正在开发的编译器用于 Decaf(有些人可能知道),它具有相当深的 CFG 直至(单个)类继承;我将添加不属于它的功能,例如类型强制。它将完全手工编码(不使用任何工具)。这不是家庭作业;写它是为了好玩。
(一)是的。
(b) 常量折叠是一个例子;CSE 是另一个;事实上几乎所有事情都与表达式求值有关。IR 相优化更多的是关于流量分析的结果。