2012-11-25 71 views
2

我有一个关于运算符优先级和相关性的问题。野牛 - 运算符优先级

在每一个例子中,我看到的作品都是这样expr 'op' expr,例如:http://dinosaur.compilertools.net/bison/bison_8.html

但是,如果我会用野牛%left及其他关联工具,以及我会用语法类似:

expr|  expr binop expr 
     |  expr relop expr 
     |  expr logical_op expr 

binop: '+' 
     | '-' 
     | '*' 
     | '/' 
     ; 
relop: EE 
     | NE 
     | LE 
     | '<' 
     | GE 
     | '>' 
     ; 
logical_op: AND 
      | OR 
      ; 

将结合性和优先级规则中使用?

还是我需要为每个操作员编写明确的expr 'op' expr

我在问,因为当我尝试使用像我发布的那样的语法时,我会收到有关冲突的警告。

但是,当我手写我写产品如expr '+' expr我没有得到任何警告。

回答

5

要使优先规则生效,终端本身必须出现在模糊的生产中。因此,您不能将终端分组到非终端,并保留使用优先规则的能力。

+0

谢谢您确认我的怀疑。 – Andna

1

我更喜欢添加语法规则(生产)来说明操作符优先级。看到我的回答here

+0

有趣的是,我知道这种使算子优先级被语法反映的技术,但我想使用与野牛一起出现的工具。无论如何感谢提醒我其他可能性 – Andna