1

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

在此处输入图像描述

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

4

1 回答 1

1

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

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

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

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

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

于 2017-10-27T18:10:33.360 回答