
答案
解:增加一个非终结符S/后,产生原文法的增广文法有:
S/A
AaAd|aAb|ε
下面构造它的LR(0)项目集规范族为:
a b d # A
I0:
S/•A
A•aAd
A•aAb
A• I2:
Aa•Ad
Aa•Ab
A•aAd
A•aAb
A• I1:
S/A•
I1:
S/A• acc
I2:
Aa•Ad
Aa•Ab
A•aAd
A•aAb
A• I2 I3:
AaA•d
AaA•b
I3:
AaA•d
AaA•b I4:
AaAb• I5:
AaAd•
I4:
AaAb•
I5:
AaAd•
从上表可看出,状态I0和I2存在移进-归约冲突,该文法不是LR(0)文法。
对于I0来说有
FOLLOW(A)∩{a}={b,d,#}∩{a}=Φ
所以在I0状态下面临输入符号为a时移进,为b,d,#时归约,为其他时报错。
对于I2来说有也有与I0完全相同的结论。
这就是说,以上的移进-归约冲突是可以解决的,因此该文法是SLR(1)文法。其他SLR(1)分析表为:
下面构造它的SLR(1)项目集规范族为:
文法的SLR(1)分析表
状态 ACTION GOTO
a b d # A
0 S2 r1 r2 r3 1
1 acc
2 S2 r1 r2 r3 3
3 S4 S5
4 r2 r2 r2 r2
5 r1 r1 r1 r1