繁体   English   中英

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

[英]bison precedence is useless? it doesn't work

我已经宣布了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规则没有终端,因此不会应用优先级。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM