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

Compilation 使用ANTLR生成中间代码和目标代码,compilation,antlr,antlr4,antlr3,antlr2,Compilation,Antlr,Antlr4,Antlr3,Antlr2,作为编译器相关课程编程作业的一部分。我已经向我的老师建议使用ANTLR而不是flex bison,在这里,他要求我确保它能做我们想要的一切,即词法、句法和语义分析(下图中的前三个步骤),我确信使用ANTLR构建这样的分析器非常容易。还有编译器的中间和目标代码生成阶段(下图中的其余阶段),这让我很困惑。我曾期望这样的工具能够为用户提供进行这类生成的便利,但即使在作者编写的参考书中,我也没有找到任何解释如何做到这一点的内容 这里有没有人能给我解释一下怎么做,或者只是给我指一下能帮助我说服老师的写作

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


这里有没有人能给我解释一下怎么做,或者只是给我指一下能帮助我说服老师的写作材料。

简单的回答是,ANTLR非常适合编译器实现,至少在功能上相当于YACC/Bison

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

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

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


这是一个非常广泛的问题。基本上,您想知道如何使用ANTLR作为主要组件构建编译器?非常雄心勃勃。我用ANTLR构建了一个Z80汇编程序,但不想用它来构建编译器。@TomServo我刚刚编辑了我的问题,以便它在某种程度上更加具体。你是说开发人员在遍历树时必须自己生成中间代码,而这不是由解析器生成器工具完成的吗?是的,对于ANTLR、YACC/Bison和所有其他类似的解析器都是如此。开发人员负责结合符号表对解析树(或其他树的AST)进行语义分析。对于IR的实际渲染,请使用ANTLR的配套库。您能给我指一下使用
StringTemplate
生成中间代码和目标代码的开始指南吗