我正在开发一个编译器,并且已经使用ANTLR4实现了词法分析器、解析器和语义分析器(使用侦听器和访问者)。对于代码生成,我计划使用StringTemplate(ST)生成LLVM IR。为此,我考虑先构造一个AST,然后生成代码。
我的问题是我需要构造AST吗??或者我可以使用解析树吗?如果我需要使用AST,我找不到任何使用访问者或侦听器手动构造AST的示例。即使是一个很小的语法例子也会很有帮助。
谢谢。
不,根本不需要构造AST。在最简单的情况下,您可以直接或使用st遍历解析树并输出IR。
如果需要将转换作为IR输出,则有两种基本方法:(1)分析和注释描述必要更改的解析树;或者(2)遍历解析树,构造一个单独的AST,然后遍历并转换AST。
对于注释策略,扩展ParseTreeProperty以创建特定于上下文节点类型的属性类。关于如何使用
,请参阅该类中的注释。不鼓励使用AST策略——它是Antlr3中使用的主要策略——但Antlr4基本上不支持AST策略。至于为什么Antlr4偏爱注释策略,请参阅本回答的最后几段。