如何针对给定语法删除bison的shift-reduce冲突?
selection-stmt -> if ( expression ) statement |
if ( expression ) statement else statement
Run Code Online (Sandbox Code Playgroud)
提供修改后的语法的解决方案将受到高度赞赏.
我的语法有两个令牌声明:
%token RP
%token ELSE
Run Code Online (Sandbox Code Playgroud)
而这两条规则:
Statement : IF LP Exp RP Statement;
Statement : IF LP Exp RP Statement ELSE Statement;
Run Code Online (Sandbox Code Playgroud)
根据我的理解,规则的优先级取决于其最后一个非终结符的优先级.因此,第一个规则具有RP优先级,第二个规则具有ELSE高于的优先级RP.以下是野牛的输出:
state 73
11 Statement: IF LP Exp RP Statement .
12 | IF LP Exp RP Statement . ELSE Statement
ELSE shift, and go to state 76
ELSE [reduce using rule 11 (Statement)]
$default reduce using rule 11 (Statement)
Run Code Online (Sandbox Code Playgroud)
这种冲突不应该通过转移解决,因为ELSE具有更高的优先级?