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

Dea*_*ler 5 antlr antlr3

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

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


fromClause
    : FROM tableList -> ^(FROM_CLAUSE tableList) 
    ;
Run Code Online (Sandbox Code Playgroud)

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

谢谢,迪恩

Bar*_*ers 6

^是用作内联树操作者,指示特定令牌应该成为树的根.

例如,规则:

p : A B^ C;
Run Code Online (Sandbox Code Playgroud)

创建以下AST:

  B
 / \
A   C
Run Code Online (Sandbox Code Playgroud)

还有另一种方法来创建一个使用重写规则的AST .甲重写规则之后(或在右侧)解析器规则的可选放置.您使用"箭头" 开始重写规则->,然后是您希望在AST中的规则/标记.

采取以前的规则:

p : A B C;
Run Code Online (Sandbox Code Playgroud)

并且您想要反转令牌,但保持ASST"平坦"(没有根节点).这可以使用以下重写规则来完成:

p : A B C -> C B A;
Run Code Online (Sandbox Code Playgroud)

如果要创建类似的AST p : A B^ C;,则启动重写规则,^( ... )括号内的第一个标记/规则将成为根节点.所以规则:

p : A B C -> ^(B A C);
Run Code Online (Sandbox Code Playgroud)

产生相同的AST p : A B^ C;.


有关: