野牛:给予规则左优先权?

时间:2011-02-17 17:31:24

标签: yacc bison

对于野牛我有很多%左(+,*等)和几%右((+,+ =等)。这些都是令牌。现在我有了规则。其

| 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)

1 个答案:

答案 0 :(得分:1)

您可以设置明确的优先级,可能会帮助您

IF ELSE示例

%nonassoc LOWER_THAN_ELSE

%nonassoc ELSE

%%
stmt   :    IF expr stmt %prec LOWER_THAN_ELSE ;
       |    IF expr stmt ELSE stmt;