插入符号前缀而不是antlr中的后缀

时间:2012-07-06 16:02:54

标签: antlr antlr3

我知道插入符号在antlr中的意思是什么(即make root)但是插入符号是什么时候我在阅读的语法中就是这样的语法(这个语法是全新的,由新的团队学习antlr完成)......

selectClause
    : SELECT resultList -> ^(SELECT_CLAUSE resultList) 
    ;


fromClause
    : FROM tableList -> ^(FROM_CLAUSE tableList) 
    ;

另外,我知道=>意味着什么 - > ?什么 - >暗示?

感谢, 迪安

1 个答案:

答案 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。


相关: