首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >解析ANTLRv3树不会生成完整的树

解析ANTLRv3树不会生成完整的树
EN

Stack Overflow用户
提问于 2013-05-15 18:38:58
回答 1查看 49关注 0票数 0

我使用的是ANTLRv3。我已经定义了一个语法。现在我想显示解析树(就像在ANTLRWorks解析树或堆栈中一样)。我尝试过http://www.antlr.org/wiki/display/ANTLR3/Interfacing+AST+with+Java (遍历子句),但它省略了语法中的子句,这些子句在解析字符串时不会出现。

例如:我有一个SQL语法。我从文档中解析SELECT title,description。在ANTLRWorks中,我可以看到(在解析树中) root_statement->select_statement->select_expression->select_list->displayed_column,displayed_colulmn,这就是我想要的。

但是当我从root_statement (通过getChildren)获得AST树时,我没有得到select_statement,select_expression。子项仅用于"SELECT title,description from document“中的字符串。

我怎样才能像在ANTLv4中一样通过树呢?(root_statement.select_statemet.select_expression)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-15 21:05:57

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

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

代码语言:javascript
复制
myParserRule
    :   x y* -> ^(MyParserRule x y*)
    |   z+   -> ^(MyParserRule z+)
    ;

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16562851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档