相关疑难解决方法(0)

改变语法以消除移位减少if-then-else中的冲突

如何针对给定语法删除bison的shift-reduce冲突?

 selection-stmt -> if ( expression ) statement |
                      if ( expression ) statement else statement
Run Code Online (Sandbox Code Playgroud)

提供修改后的语法的解决方案将受到高度赞赏.

bison shift-reduce-conflict

18
推荐指数
2
解决办法
2万
查看次数

解决与野牛悬挂的其他问题

我的语法有两个令牌声明:

%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具有更高的优先级?

bison

3
推荐指数
1
解决办法
3779
查看次数

标签 统计

bison ×2

shift-reduce-conflict ×1