我正在使用ANTLRv3。我已经定义了一个语法。 现在我想显示Parse Tree(就像在ANTLRWorks Parse Tree或STACK中)。 我已经尝试http://www.antlr.org/wiki/display/ANTLR3/Interfacing+AST+with+Java(在孩子们的陪伴下走路),但是它忽略了语法中没有出现的条款 解析字符串。
EG。我有一个SQL语法。 我正在解析SELECT标题,来自文档的描述。 在ANTLRWorks中,我可以看到(在解析树中) root_statement-> select_statement-> select_expression-> select_list-> [displayed_column,displayed_colulmn]这就是我想要的。
但是当我从root_statement(通过getChildren)获取AST树时,我没有得到select_statement,select_expression。子项仅用于“SELECT title,document from document”中的字符串。
如何以与ANTLv4相同的方式获取树状结构? (root_statement.select_statemet.select_expression)
答案 0 :(得分:0)
ANTLR 3使用语法中的特殊语法(运算符^
,!
和->
)定义自定义形状来构建AST。 ANTLR 4构建解析树,自动遵循语法本身的形状。
要使ANTLR 3的行为与ANTLR 4类似,您需要为语法中的每个解析器规则创建重写规则,其中根节点具有规则本身的名称。例如:
myParserRule
: x y* -> ^(MyParserRule x y*)
| z+ -> ^(MyParserRule z+)
;
至于另一个方向,没有一种“简单”的方法可以让ANTLR 4像ANTLR 3一样。