Antlr3 解析ANTLRv3树不会生成完整树

Antlr3 解析ANTLRv3树不会生成完整树,antlr3,Antlr3,我正在使用ANTLRv3。我已经定义了语法。 现在我想显示解析树(就像在ANTLRWorks解析树或堆栈中一样)。 我试过(穿过孩子们),但它在语法中没有出现 在分析字符串时 我有SQL语法。 我正在解析从文档中选择标题和描述。 在ANTLRWorks中,我可以看到(在解析树中) 根语句->选择语句->选择表达式->选择列表->[显示的列,显示的列]这就是我想要的 但是,当我从root_语句(通过getChildren)获取AST树时,我不会得到select_语句,而是select_表达式。子项

我正在使用ANTLRv3。我已经定义了语法。 现在我想显示解析树(就像在ANTLRWorks解析树或堆栈中一样)。 我试过(穿过孩子们),但它在语法中没有出现 在分析字符串时

我有SQL语法。 我正在解析从文档中选择标题和描述。 在ANTLRWorks中,我可以看到(在解析树中) 根语句->选择语句->选择表达式->选择列表->[显示的列,显示的列]这就是我想要的

但是,当我从root_语句(通过getChildren)获取AST树时,我不会得到select_语句,而是select_表达式。子项仅用于“从文档中选择标题、说明”中的字符串


我怎样才能像在ANTLv4中那样通过树?(root_语句。select_statemet。select_表达式)

ANTLR 3使用语法中特殊语法定义的自定义形状(运算符
^
->
)构建AST。Antlr4构建自动遵循语法本身形状的解析树

要使ANTLR 3的行为类似于ANTLR 4,您需要为语法中的每个解析器规则创建重写规则,其中根节点具有规则本身的名称。例如:

myParserRule
    :   x y* -> ^(MyParserRule x y*)
    |   z+   -> ^(MyParserRule z+)
    ;

至于另一个方向,没有一种“简单”的方法可以让ANTLR 4像ANTLR 3一样工作。

这正是我想要的。谢谢这些链接将帮助其他人: