3

我对 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我没有收到任何警告一样。

4

2 回答 2

8

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

于 2012-11-26T15:05:08.317 回答
1

我更喜欢添加语法规则(产生式)来说明运算符的优先级。在这里查看我的答案。

于 2012-11-26T23:52:57.603 回答