野牛 - 运营商优先权

时间:2012-11-25 18:05:05

标签: bison operator-precedence

我对Bison中的运算符优先级和关联性有疑问。

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

但如果我使用bison %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这样的作品时,我没有收到任何警告。

2 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:1)

我更喜欢添加语法规则(产品)来考虑运算符优先级。请参阅我的回答here