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的规则没有终端,因此不应用优先级