我们如何解决这场Yacc冲突

时间:2012-12-03 08:13:48

标签: conflict yacc reduce

%token A B C D E F G H
%%
x : y H y | z H z
;

y : G | t |  y B G | y B t
;

z : w | z D w
;

w : C | t | E z F
;

t : A
;

由于t,存在减少/减少冲突。我们怎么解决呢?

1 个答案:

答案 0 :(得分:0)

默认情况下,y:t和w:t之间的冲突得到解决,有利于y:t。如果您想要另一种方式,请重新排序相应的规则。或者您可以像这样展开其中一个: -

%token A B C D E F G H
%%
x : y H y | z H z
;

w : C | A | E z F
;

z : w | z D w
;

y : G |  A B G | A B A | y B G | y B A
;

请注意,我已经摆脱了t规则,并通过扩展它删除了y:A规则: -

步骤1:消除t:A规则

%token A B C D E F G H
%%
x : y H y | z H z
;

y : G | A |  y B G | y B A
;

z : w | z D w
;

w : C | A | E z F
;

第2步:

%token A B C D E F G H
%%
x : y H y | z H z
;

y : G | A |  A B G | A B A | y B G | y B A
;

z : w | z D w
;

w : C | A | E z F
;