【问题标题】:Bison - operator precedenceBison - 运算符优先级
【发布时间】:2012-11-25 18:05:04
【问题描述】:

我对 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 这样的作品时,我没有收到任何警告。

【问题讨论】:

    标签: bison operator-precedence


    【解决方案1】:

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

    【讨论】:

    • 感谢您证实我的怀疑。
    【解决方案2】:

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

    【讨论】:

    • 有趣,我知道这种使运算符优先级通过语法反映的技术,但我想使用bison附带的工具。无论如何,谢谢你提醒我其他可能性
    猜你喜欢
    • 2011-07-07
    • 2011-06-21
    • 2013-02-24
    • 2012-08-10
    • 2020-03-05
    • 2012-12-13
    • 2017-06-02
    相关资源
    最近更新 更多