当原始规则中出现某些条件时,我发现自己面临如何正确格式化重写规则的挑战。
重写这个的适当方法是什么:
unaryExpression: op=('!' | '-') t=term
-> ^(UNARY_EXPR $op $t)
Antlr 似乎不喜欢我在括号中用标签标记任何东西,“op=”失败。另外,我试过:
unaryExpression: ('!' | '-') t=term
-> ^(UNARY_EXPR ('!' | '-') $t)
Antlr 不喜欢 or '|' 并引发语法错误。
用标记名称替换字符类确实解决了这个问题,但是它给我的语法带来了其他问题的泥潭。
- - 编辑 - -
增加了第二个问题。请帮我用树语法格式化这个规则:
multExpression
: unaryExpression (MULT_OP unaryExpression)*
;
非常简单:我的期望是将每个匹配的标记包含在父(想象的)标记MULT
中,这样我最终会得到类似的东西:
MULT
o
|
o---o---o---o---o
| | | | |
'3' '*' '6' '%' 2