1

构建AST我正在开发一个编译器和已经实施的词法,语法分析器和语义分析(使用听众和观众)使用ANTLR4。对于代码生成,我计划使用StringTemplate(ST)生成LLVM IR。 要做到这一点,我想先构建一个AST,然后生成代码。在ANTLR版本4

我的问题在这里,我需要构建AST?或者我可以使用Parse Tree? 如果我需要使用AST,我无法找到使用访问者或侦听器手动构建AST的任何示例。即使是一个小文法的例子也会很有帮助。

谢谢。

回答

2

没有,没有根本的需要构建一个AST。在最简单的情况下,您可以直接或使用ST来遍历分析树并输出IR。

当需要如IR输出变换时,两种基本方法是:(1)分析和注释解析树描述必要的改变;或者(2)走分析树,构建一个单独的AST,然后走路并转换AST。

对于注解策略,延伸ParseTreeProperty创建上下文节点类型特定的属性类。请参阅该课程中的评论以了解如何使用。

AST的策略并没有气馁 - 这是在Antlr3使用的主要策略 - 但在本质上Antlr4不支持。至于为什么Antlr4倾向于注释策略,请参见最后几个paragraphs of this answer

+0

非常感谢您的回复。我可以通过步行分析树来输出IR,以获得二元操作等简单结构。我无法处理好继承(基类函数调用派生类/函数覆盖)。你有没有看到任何这样的项目在线?一个例子会有很大的帮助。非常感谢你。 – NewGirl

+0

我知道没有这样的项目。也许最好发表一个新的问题和说明细节,以便如何分析和解析适合输出的分析树结构。 – GRosenberg