使用ANTLR4生成的访问者生成AST

时间:2015-07-17 09:55:01

标签: antlr antlr4

我正在将ANTLR3语法转换为ANTLR4语法,这意味着我必须删除所有树重写规则,因为它们现在必须在代码中实现,并且通过使用自定义ParseTree访问Visitor可以生成AST。

旧语法具有重写规则,可防止出现歧义并自动生成所需树。我在网上找不到任何有用的资源,显示如何通过访客/听众范例来完成。

  1. Visitor需要一个类型,用作所有visit*函数的返回类型。如果我需要生成AST,我应该使用什么返回类型? ANTLR3使用了CommonTree个对象。
  2. 进入visit*节点时,我可以创建树的节点,但应该如何跟踪其父节点?
  3. 是否有关于如何将树重写规则转换为生成AST节点的方法的示例?如果没有,是否可以为下面的规则提供一个例子?
  4. 这里是(3)的规则:

    ctor_initializer: '::'? identifier '(' expr? ')' -> ^(CTOR_INITIALIZER^(INITIALIZER_ID '::'? identifier) ^(CTOR_EXPR expr?) );
    

1 个答案:

答案 0 :(得分:1)

惯用法,Antlr4创建并支持使用解析树。没有直接支持创建和修改AST。

优先使用解析树而不是AST的一些激励因素是summarized here

Antlr4不排除构建AST - 可以以任何所需的方式定义结构。一些示例是herehere