我知道插入符号在antlr中的意思是什么(即make root)但是插入符号是什么时候我在阅读的语法中就是这样的语法(这个语法是全新的,由新的团队学习antlr完成)......
selectClause
: SELECT resultList -> ^(SELECT_CLAUSE resultList)
;
fromClause
: FROM tableList -> ^(FROM_CLAUSE tableList)
;
另外,我知道=>意味着什么 - > ?什么 - >暗示?
感谢, 迪安
答案 0 :(得分:6)
^
用作内联树运算符,表示某个标记应该成为树的根。
例如,规则:
p : A B^ C;
创建以下AST:
B
/ \
A C
还有另一种创建AST的方法,即使用重写规则。 重写规则放置在解析器规则的替代之后(或右侧)。您使用“箭头”->
启动重写规则,然后是您希望在AST中的规则/令牌。
采用以前的规则:
p : A B C;
并且您想要反转令牌,但保持ASST“平坦”(没有根节点)。这可以使用以下重写规则完成:
p : A B C -> C B A;
如果你想创建一个类似于p : A B^ C;
的AST,你可以用^( ... )
启动重写规则,其中括号内的第一个标记/规则将成为根节点。所以规则:
p : A B C -> ^(B A C);
生成与p : A B^ C;
相同的AST。