搜题
问题   更新时间2023/4/3 12:59:00

2.已知文法
AaAd|aAb|ε
分别构造LR(0)分析表和SLR(1)分析,并判断该文法是否是LR(0)文法,是否SLR(1)文法。

解:增加一个非终结符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
王老师:19139051760(拨打)