0

在下面的简单语法中,在状态 4 的冲突中,'shift' 是否可以在不改变规则的情况下成为采取的行动?(我认为默认情况下 shift 是野牛的首选动作)

%token one two three

%%

start : a;
a : X Y Z;
X : one;
Z : two | three;
Y : two | ;

%%
4

2 回答 2

3

shift 是 bison 的首选操作,您可以在状态输出中看到它将two在状态 4 中转换。它仍然会报告 shift-reduce 冲突,但如果您愿意,可以将其作为警告。(请参阅%expect。)您最好修正语法:

start : a;
a : X Z | X Y Z;
X : one;
Y : two;
Z : two | three;
于 2013-07-25T17:50:42.230 回答
1

Shift 是默认设置,但这会导致生成的解析器为输入提供错误,one two因此这可能不是您想要的。相反,请遵循 rici 的建议并修正语法。

于 2013-07-25T18:16:20.503 回答