为编译器设计中间表示

Mag*_*nus 6 compiler-construction language-design

我一直在看编译器设计.我在大学完成了一个学期的课程并且已经阅读了Grune等人的" 现代编译器设计 ",该书似乎提倡使用带注释的抽象语法树作为中间代码,这就是我们在课程中使用的内容.

我的问题是这种方法的好处是什么,而不是产生某种堆栈机器语言或低级伪代码,特别是关于拥有可以针对许多机器的编译器.

简单地定位已经存在的低级表示(如LLVM)并将其用作中间表示是一个好主意吗?

SK-*_*gic 5

如果你的语言足够复杂,你最终会得到一系列略有不同的中间表征.并不重要,哪种表示将是您的最终目标 - llvm,C,本机代码,CLR,JVM等等.它不应该影响编译器的设计和体系结构.

而且,根据我的个人经验,您拥有的中间步骤越多,其间的转换尽可能微不足道,编译器的体系结构就越好.

  • @Yttrill,我看不出任何缺点:将所有源位置信息一直保存到程序集中是微不足道的.无论如何你必须这样做,否则你将无法发出调试信息.这里没有什么可以发明的. (3认同)