0

以下是语法规则:

ProcessExpression :  EventExpression "->" ProcessExpression

                    | ProcessName ;

请你告诉我如何告诉野牛第一条规则的优先级高于第二条?

我努力了:

%nonassoc PROC

%right "->"

ProcessExpression :  EventExpression "->" ProcessExpression

                    | ProcessName % prec PROC;

但没有任何结果。谢谢你。

4

2 回答 2

1

为了解决 reduce/reduce 冲突,bison 按照它们在源文件中的顺序为规则提供优先级,因此首先,第一个规则具有更高的优先级。但这显然不是你想要的,或者你不会问这个问题。

使用 %nonassoc/%right 为令牌提供优先级以解决移位/减少冲突。在这种情况下,重要的是令牌的优先级转移到要减少的规则的优先级。只涉及一个规则(尽管在当前状态下可能存在其他规则部分解析),因此在这种情况下谈论一个规则的优先级高于或低于另一个规则是没有意义的。

那你想做什么?到底出了什么问题?EventExpression和ProcessName是否有些相似,所以它们有冲突?您没有提供有关这些规则是什么的信息...

于 2010-03-14T07:48:35.310 回答
0

我认为,只有当存在左递归时,您才能应用您所写的内容。所以尝试这样的事情。

%nonassoc PROC
%left EVENT

ProcessExpression :  EventExpression "->" ProcessExpression %prec EVENT

                    | ProcessName % prec PROC;

谢谢,戈库尔。

于 2010-03-09T12:16:00.500 回答