这是语法规则:
ProcessExpression : EventExpression "->" ProcessExpression
| ProcessName ;
请告诉我怎样才能告诉bison第一条规则的优先级高于第二条规则?
我试过了:
%nonassoc PROC
%right "->"
ProcessExpression : EventExpression "->" ProcessExpression
| ProcessName % prec PROC;
但没有任何结果。 谢谢。
答案 0 :(得分:1)
为了解决减少/减少冲突,bison按照它们在源文件中的顺序给出规则优先级,因此首先,第一个规则具有更高的优先级。但这显然不是你想要的,或者你不会问这个问题。
使用%nonassoc /%right为标记提供优先级以解决shift / reduce冲突。在这种情况下,重要的是令牌的优先级转移到要减少的规则的优先级。只涉及一个规则(尽管其他规则可能在当前状态下部分解析),因此在这种情况下讨论一个优先级高于或低于另一个规则的规则是没有意义的。
那你要做的是什么?究竟出了什么问题? EventExpression 和 ProcessName 有些类似,所以它们有冲突吗?您没有提供有关这些规则的信息......
答案 1 :(得分:0)
我认为,只有在有左递归时才可以应用你所写的内容。所以尝试这样的事情。
%nonassoc PROC
%left EVENT
ProcessExpression : EventExpression "->" ProcessExpression %prec EVENT
| ProcessName % prec PROC;
谢谢, 戈库尔。