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

时间:2017-10-27 12:09:22

标签: compilation antlr antlr4 antlr3 antlr2

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

enter image description here

这里的任何人都可以向我解释如何这样做,或者只是指出可以帮助我说服老师的写作材料。

1 个答案:

答案 0 :(得分:1)

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

特定于您的问题,ANTLR提供Lexer(词法分析),Parser(句法分析)和树步行(语义分析)支持,所有这些都具有适当形式的错误监听器和恢复机制。示例符号表位于github repo

多个树状漫游通常用于语义分析。最后一步可以用来输出代码的一些中间表示(IR)。

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

教授。 Parr的书Language Implementation PatternsTDAR会有所帮助。