野牛的优先权是没用的?它不起作用

时间:2013-12-20 20:14:33

标签: c bison operator-precedence

我已为bison声明了这样的优先级:

    %left '+' '-'
    %left '*' '/'

算术的递归规则:

exp:       exp binary_op exp { .. }
           | literal_exp     { .. }
           | ID              { .. }

binary_op: '+'               { .. }
           | '-'             { .. }
           | '*'             { .. }
           | '/'             { .. }

我有一个算术表达式:10 * 3 + 5

我的程序计算总和,它是80!我仍然不知道为什么优先权不起作用。

1 个答案:

答案 0 :(得分:8)

如果您定义如下表达式,它应该有效:

exp:       exp '+' exp       { .. }
           exp '-' exp       { .. }
           exp '*' exp       { .. }
           exp '/' exp       { .. }
           | literal_exp     { .. }
           | ID              { .. }

仅当运算符作为规则中的终端出现时,优先级才有效。

请参阅How precedence works上的文档:

  

每个规则都从最后提到的终端符号中获得优先权   在组件中

您的exp规则没有终端,因此不会应用优先级。