【问题标题】:Constructing AST in ANTLR version4在 ANTLR 版本 4 中构建 AST
【发布时间】:2023-04-09 19:36:01
【问题描述】:

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

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

谢谢。

【问题讨论】:

    标签: java compiler-construction antlr4 abstract-syntax-tree stringtemplate-4


    【解决方案1】:

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

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

    对于注解策略,扩展ParseTreeProperty 以创建上下文节点类型特定的属性类。使用方法见该类中的注释。

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

    【讨论】:

    • 非常感谢您的回复。对于二元运算等简单结构,我可以通过遍历解析树来输出 IR。我无法很好地处理继承(从派生类/函数覆盖中调用基类函数)。你在网上见过这样的项目吗?一个例子会有很大帮助。非常感谢。
    • 我知道没有这样的项目。也许最好发布一个带有说明性细节的新问题,以了解如何分析和解决适合输出的解析树结构。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多