野牛转移/减少冲突

时间:2013-07-25 16:53:41

标签: parsing bison

在下面的简单语法中,关于状态4的冲突, 在不改变规则的情况下,“转移”能成为采取的行动吗? (我认为默认转变是野牛的首选动作)

%token one two three

%%

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

%%

2 个答案:

答案 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的建议并修复语法。