1

我正在开发一个编译器,并且已经使用 ANTLR4 实现了词法分析器、解析器和语义分析器(使用侦听器和访问者)。对于代码生成,我计划使用 StringTemplate(ST) 生成 LLVM IR。为此,我正在考虑首先构建一个 AST,然后生成代码。

我的问题是我需要构建 AST 吗?或者我可以使用解析树吗?如果我需要使用 AST,我找不到任何使用访问者或侦听器手动构建 AST 的示例。即使是一个小的语法示例也会很有帮助。

谢谢你。

4

1 回答 1

2

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

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

对于注释策略,扩展ParseTreeProperty以创建上下文节点类型特定的属性类。有关如何使用,请参阅该类中的注释。

AST 策略并不气馁——它是 Antlr3 中使用的主要策略——但在 Antlr4 中基本上不受支持。至于为什么 Antlr4 偏爱注解策略,请看这个答案的最后几段。

于 2015-10-19T06:39:36.590 回答