java扩展令牌选择操作符
我在ANTLR3中有一个表达式
num_addition
: num_multi ((plus^|minus^) num_multi)*
;
我想把标记“加”和“减”改成一个不同的标记,所以我试着制定这个重写规则
num_addition
: num_multi (plus num_multi)* -> ^(num_multi ^(plus_special num_multi)*)
| num_multi (minus num_multi)* -> ^(num_multi ^(minus_special num_multi)*)
;
如果我这样做,ANTLRWORKS中的生成似乎需要更长的时间,但它生成了正确的语法和标记。如果我将此样式应用于其他规则,例如“multi”和“divide”以及“equalequal”等,那么当我按下Generate时,AntlWorks最终将无法执行任何操作
根据ANTLRWORKS,没有错误,但当I pres生成时,什么也没有发生
我是否错误地改写了我想要实现的目标
# 1 楼答案
您不能将任何产品或终端注入到您的AST中,这些产品或终端在您为其创建AST的解析器规则中不匹配。在本例中,您可以插入
plus
或minus
,因为它们由解析器规则匹配,但是您不能插入plus_special
或minus_special
,因为它们不由解析器规则num_addition
匹配不过,您可以注入虚构的标记
试着这样做: