Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 野牛优先权没用?它没有';行不通_C_Bison_Operator Precedence - Fatal编程技术网

C 野牛优先权没用?它没有';行不通

C 野牛优先权没用?它没有';行不通,c,bison,operator-precedence,C,Bison,Operator Precedence,我已经为野牛宣布了这样的优先权: %left '+' '-' %left '*' '/' 算术递归规则: exp: exp binary_op exp { .. } | literal_exp { .. } | ID { .. } binary_op: '+' { .. } | '-' { .. }

我已经为野牛宣布了这样的优先权:

    %left '+' '-'
    %left '*' '/'
算术递归规则:

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

binary_op: '+'               { .. }
           | '-'             { .. }
           | '*'             { .. }
           | '/'             { .. }
我有一个算术表达式:
10*3+5


我的程序计算出总数是80!我仍然不知道为什么优先级不起作用。

如果您这样定义表达式,它应该起作用:

exp:       exp '+' exp       { .. }
           exp '-' exp       { .. }
           exp '*' exp       { .. }
           exp '/' exp       { .. }
           | literal_exp     { .. }
           | ID              { .. }
只有当运算符在规则中作为终端出现时,优先级才起作用

请参阅以下文档:

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

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