%token A B
%%
start: {printf("Starting…\n");} A A
| A B;
我的书说,当令牌是 A 时,会发生移位减少冲突,因为 yacc 会转换为代码。
%token A B
%%
start: empty A A
| A B;
empty: {printf("Starting…\n");} ;
我没有得到这个。这里开始的第二条规则转移,空规则减少。start 的第一个规则也发生了变化,所以第一个输入需要 A,而第二个规则需要 B。这怎么冲突?据我所知,一个规则必须减少,另一个应该改变,而不是两个规则应该期望相同的标记作为这种冲突的输入。但是,这里有一条规则既移动又减少(第一条规则),而第二条规则只移动,它们也期望在这些操作之后有不同的令牌。