编译原理第5章

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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)文法。

相关文档
最新文档