对于野牛我有很多%左(+,*等)和几%右((+,+ =等)。这些都是令牌。现在我有了规则。其
| rval
| AttrData rval
问题是,AttrData rval返回一个rval,因此AttrData 1 + 1可以是(AttrData 1)+1或AttrData(1 + 1)。我想要做的是将左规则应用于AttrData但不起作用,因为它不是一个令牌。我尝试了%prec,我也得到了一个错误。
我可以通过编写| AttrData '(' rval ')'
来修复它但我不想这样做,我宁愿让用户写AttrData (1+1)
,因为大部分时间他们实际上是指(AttrData 1)+1。< / p>
如何赋予规则优先权?
我唯一相似的东西就是其他,我通过强制支撑而没有混淆来解决(如果cond {if cond} else)
答案 0 :(得分:1)
您可以设置明确的优先级,可能会帮助您
IF ELSE示例
%nonassoc LOWER_THAN_ELSE
%nonassoc ELSE
%%
stmt : IF expr stmt %prec LOWER_THAN_ELSE ;
| IF expr stmt ELSE stmt;