【发布时间】:2010-02-27 03:15:47
【问题描述】:
当原始规则中出现某些情况时,我发现自己面临如何正确格式化重写规则的挑战。
重写这个的适当方法是什么:
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
【问题讨论】:
标签: antlr antlr3 tree-grammar