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