我正在开发一个编译器,并且已经使用ANTLR4实现了lexer,解析器和语义分析器(使用监听器和访问者)。对于代码生成,我计划使用StringTemplate(ST)生成LLVM IR。 为此,我想首先构建一个AST,然后生成代码。
我的问题是我需要构建AST吗?或者我可以使用Parse Tree吗? 如果我需要使用AST,我无法找到任何使用访问者或听众手动构建AST的示例。即使是一个小的语法示例也会非常有用。
谢谢。
答案 0 :(得分:2)
不,没有必要构建AST。在最简单的情况下,您可以直接或使用ST遍历解析树并输出IR。
如果输出需要转换为IR,则两种基本方法是(1)分析和注释描述必要更改的解析树;或者(2)遍历解析树,构建一个单独的AST,然后行走并转换AST。
对于注释策略,请扩展ParseTreeProperty以创建特定于上下文节点类型的属性类。请参阅该课程中的评论以了解如何使用。
不鼓励使用AST策略 - 它是Antlr3中使用的主要策略 - 但在Antlr4中基本上不受支持。至于为什么Antlr4赞成注释策略,请参阅最后几个paragraphs of this answer。