对于以Action开头的规则,YACC中的Shift-Reduce冲突

问题描述 投票:0回答:1
%token A B
%%
start:  {printf("Starting…\n");} A A
 | A B;

我的书说,当令牌为A时,存在移位减少冲突,因为yacc将代码转换为此。

%token A B
%%
start: empty {printf("Starting…\n");} A A
 | A B;
empty: ; 

我没有得到。在这里开始换挡的第二条规则,空规则减少。开始的第一个规则也发生了变化,因此第一个输入期望A,而第二个规则期望B。那怎么会有冲突?据我所知,一条规则必须减少,另一条规则应该转移,而不是两条规则应该为相同的冲突输入相同的令牌。但是,一个规则既在此处移动并减小(第一个规则),而第二个规则仅在移动时,它们在执行这些操作后也会期望不同的执行次数。

%令牌A B %%开头:{printf(“ Starting…\ n”);} A A | A B;我的书说,当令牌为A时,存在移位减少冲突,因为yacc会将代码转换为此。 %token A B %%开始:空{...

parsing yacc lex shift-reduce-conflict shift-reduce
1个回答
0
投票

冲突是,在移动A之前,它不知道是否要减少空规则(运行操作)。因此,您将获得移位/减少冲突。哪个应该

© www.soinside.com 2019 - 2024. All rights reserved.