编译原理第5章
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
5.1 考虑以下的文法:
S→S;T|T
T→a
(1)为这个文法构造LR(0)的项目集规范族。
(2)这个文法是不是LR(0)文法?如果是,则构造LR(0)分析表。(3)对输入串“a;a”进行分析。
解:(1)由题目给出的文法构造其拓广文法
G[S’]:
0:S’→S
1:S→S;T
2:S→T
3:T→a
由拓广文法构造LR(0)项目集规范族
(2)由上可知,该文法的项目集规范族说不存在“移进-归约冲突”和“归约-归约冲突”的项目集,因此该文法是LR(0)文法。所构造的LR(0)分析表如下:
(3)对输入串a;a进行分析如下:
5.2 证明下面文法是SLR(1)文法,但不是LR(0)文法。S→A
A→Ab|bBa
B→aAc|a|aAb
解:由题目给出的文法构造器拓广文法G[S]:
0:S→A
1:A→Ab
2:A→bBa
3:B→aAc
4:B→a
5:B→aAb
由拓广文法构造LR(0)项目集规范族:
由LR(0)项目集规范族可知:
在状态5处存在“移进-归约冲突”,状态9存在“归约-归约冲突”,因此该文法不是LR(0)文法。
而:状态5的FOLLOW集为:
FOLLOW(B)={a},
因此,FOLLOW(B)∩{b}=Φ
状态9的FOLLOW集为:
FOLLOW(B)={a},FOLLOW(A)={#,b,c},
因此FOLLOW(B)∩FOLLOW(A)=Φ
利用SLR解决方法的基本思想解决状态5和状态9的冲突,故构造的SLR(1)分析表如下:
由SLR(1)分析表可知,该文法的项目集规范族中状态5和状态9存在的冲突运用SLR(1)方法得到解决,因此该文法是SLR(1)文法,不是LR(0)文法。
5.3 证明下面文法是LR(1)文法,但不是SLR(1)文法。
S→AaAb|BbBa
A→ε
B→ε
解:由题目给出的文法构造其拓广文法G[S’]:
0:S’→S
1:S→AaAb
2:S→BbBa
3:A→ε
4:B→ε
由上面构造的拓广文法G[S’]构造LR(0)项目集规范族:
由LR(0)项目集规范族可知,状态0存在“归约-归约冲突”,并且FOLLOW(A) ={a,b},FOLLOW(B)={a,b},而FOLLOW(A)∩FOLLOW(B)={a,b}≠Φ,故该文法不是SLR(1)文法。