在下面的简单语法中,关于状态4的冲突, 在不改变规则的情况下,“转移”能成为采取的行动吗? (我认为默认转变是野牛的首选动作)
%token one two three
%%
start : a;
a : X Y Z;
X : one;
Z : two | three;
Y : two | ;
%%
答案 0 :(得分:3)
shift是野牛的首选动作,你可以在状态输出中看到它将在状态4中移动two
。它仍然会报告一个shift-reduce冲突,但你可以把它作为警告,如果你喜欢。 (见%expect
。)你可能最好修复语法:
start : a;
a : X Z | X Y Z;
X : one;
Y : two;
Z : two | three;
答案 1 :(得分:1)
Shift是默认值,但这会导致生成的解析器为输入one two
提供错误,因此可能不是您想要的。相反,请遵循rici的建议并修复语法。