作为编译器相关类的编程任务的一部分。我已经建议我的老师使用 ANTLR 而不是flex bison,在这里他要求我确保它能完成我们想要的所有内容,即词法,句法和语义分析(前三个步骤)如下图所示,我非常确定使用 ANTLR 构建此类分析仪非常容易。还有编译器的中间和目标代码生成阶段(下图中的其余阶段),这真让我感到困惑。我曾期望这样的工具必须为用户提供这样的代数,但即使在作者撰写的参考书中,也没有找到解释如何做到这一点的任何内容。
这里的任何人都可以向我解释如何这样做,或者只是指出可以帮助我说服老师的写作材料。
答案 0 :(得分:1)
简短的回答是,ANTLR非常适合编译器实现,并且至少是YACC / Bison的功能等同物。
特定于您的问题,ANTLR提供Lexer(词法分析),Parser(句法分析)和树步行(语义分析)支持,所有这些都具有适当形式的错误监听器和恢复机制。示例符号表位于github repo。
中多个树状漫游通常用于语义分析。最后一步可以用来输出代码的一些中间表示(IR)。
查看LLVM project提供的IR语言,优化器和代码生成器,以了解其余步骤中涉及的内容。
教授。 Parr的书Language Implementation Patterns和TDAR会有所帮助。