我正在将ANTLR3语法转换为ANTLR4语法,这意味着我必须删除所有树重写规则,因为它们现在必须在代码中实现,并且通过使用自定义ParseTree
访问Visitor
可以生成AST。
旧语法具有重写规则,可防止出现歧义并自动生成所需树。我在网上找不到任何有用的资源,显示如何通过访客/听众范例来完成。
Visitor
需要一个类型,用作所有visit*
函数的返回类型。如果我需要生成AST,我应该使用什么返回类型? ANTLR3使用了CommonTree
个对象。visit*
节点时,我可以创建树的节点,但应该如何跟踪其父节点?这里是(3)的规则:
ctor_initializer: '::'? identifier '(' expr? ')' -> ^(CTOR_INITIALIZER^(INITIALIZER_ID '::'? identifier) ^(CTOR_EXPR expr?) );