我已经宣布了以下优先事项bison
:
%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规则没有终端,因此没有优先级。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句