我正在创建我的第一个AST。我想删除' ='从它。
我有类似的事情:
BLOCK
|
|-----------|
STATEMENTS RETURN
|
ASSIGNMENT
|
|
|-----|-----|
field = value
An extract from my Grammar file:
parse
: block EOF -> block
;
block
: (statement)* (Return Identifier ';')?
-> ^(BLOCK ^(STATEMENTS statement*) ^(RETURN Identifier?))
;
statement
: assignment ';' -> assignment
;
assignment
: expression
-> ^(ASSIGNMENT expression)
;
expression
: NAME '=' Identifier
;
那么,我怎样才能删除' ='在树中打印的节点?
答案 0 :(得分:2)
使用内联运算符!
来丢弃树中的节点:
expression
: NAME '='! Identifier
;
或使用重写运算符:
expression
: NAME '=' Identifier -> NAME Identifier
;
解释这些运算符的相关问答:How to output the AST built using ANTLR?
请注意,语法中没有ASSIGNMENT
标记。如果要注入此类令牌,请将其放入tokens{ ... }
块并将其插入重写规则中:
grammar T;
options {
// ...
}
tokens {
ASSIGNMENT;
}
statement
: assignment ';' -> assignment
;
expression
: NAME '=' Identifier -> ^(ASSIGNMENT NAME Identifier)
;