【发布时间】:2013-07-25 16:53:41
【问题描述】:
在下面的简单语法中,关于状态 4 的冲突, 在不改变规则的情况下,“转变”可以成为采取的行动吗? (我认为默认情况下 shift 是野牛的首选动作)
%token one two three
%%
start : a;
a : X Y Z;
X : one;
Z : two | three;
Y : two | ;
%%
【问题讨论】:
在下面的简单语法中,关于状态 4 的冲突, 在不改变规则的情况下,“转变”可以成为采取的行动吗? (我认为默认情况下 shift 是野牛的首选动作)
%token one two three
%%
start : a;
a : X Y Z;
X : one;
Z : two | three;
Y : two | ;
%%
【问题讨论】:
shift 是 bison 的首选操作,您可以在状态输出中看到它将在状态 4 中转换 two。它仍会报告 shift-reduce 冲突,但如果您愿意,可以将其视为警告。 (见%expect。)你最好修正一下语法:
start : a;
a : X Z | X Y Z;
X : one;
Y : two;
Z : two | three;
【讨论】:
Shift 是默认设置,但这会导致生成的解析器为输入 one two 提供错误,因此这可能不是您想要的。相反,请遵循 rici 的建议并修正语法。
【讨论】: