使用 ANTLR 生成中间代码和目标代码

Intermediate and object code generation with ANTLR

作为我们编译器相关编程作业的一部分 class。我已经向我的老师建议使用 ANTLR 而不是 flex bison,在这里他要求我确保它做我们想要的所有事情,即词法、句法和语义分析(前三个下图中的步骤),我很确定使用 ANTLR 构建这样的分析器非常容易。还有编译器的中间和目标代码生成阶段(下图中的其余阶段),这让我很困惑。我期望这样的工具必须为用户提供进行此类生成的便利,但我什至在作者编写的参考书中也没有找到任何解释如何做到这一点的内容。

任何人都可以向我解释如何这样做,或者只是指出可以帮助我说服我的老师的文章 material。

简短的回答是 ANTLR 非常适合编译器实现,并且至少在功能上等同于 YACC/Bison 用于此目的。

针对您的问题,ANTLR 提供 Lexer(词法分析)、Parser(句法分析)和 tree-walker(语义分析)支持,所有这些都具有适当形式的错误侦听器和恢复机制。示例符号 table 在 github repo.

多树遍历通常用于语义分析。最终遍历可用于输出代码的一些中间表示 (IR)。

查看 LLVM project 提供的 IR 语言、优化器和代码生成器,了解其余步骤中涉及的内容。

教授。帕尔的书 Language Implementation Patterns and TDAR 会有所帮助。