第六七章 作业与习题参考答案Word文档格式.docx

上传人:b****6 文档编号:19315777 上传时间:2023-01-05 格式:DOCX 页数:24 大小:81.99KB
下载 相关 举报
第六七章 作业与习题参考答案Word文档格式.docx_第1页
第1页 / 共24页
第六七章 作业与习题参考答案Word文档格式.docx_第2页
第2页 / 共24页
第六七章 作业与习题参考答案Word文档格式.docx_第3页
第3页 / 共24页
第六七章 作业与习题参考答案Word文档格式.docx_第4页
第4页 / 共24页
第六七章 作业与习题参考答案Word文档格式.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

第六七章 作业与习题参考答案Word文档格式.docx

《第六七章 作业与习题参考答案Word文档格式.docx》由会员分享,可在线阅读,更多相关《第六七章 作业与习题参考答案Word文档格式.docx(24页珍藏版)》请在冰豆网上搜索。

第六七章 作业与习题参考答案Word文档格式.docx

0235

01

#

#a

#aA

#aAb

#A

ab#....

b#....

#....

S2

r3(A→ε)

S5

r2(A→aAb)

acc

3

1

分析成功,说明输入串ab是题目1文法的句子

第2题若有定义二进制数的文法如下:

  S→L.L|L

  L→LB|B

  B→0|1

  

(1)试为该文法构造LR分析表,并说明属哪类LR分析表。

  

(2)给出输入串101.110的分析过程。

 解:

  拓广文法为G′,增加产生式S′→S

  0 S'

→S

  1 S→L.L

  2 S→L

  3 L→LB

  4 L→B

  5 B→0

  6 B→1

)={0,1}

  First(S)={0,1}

  First(L)={0,1}

  First(B)={0,1}

  Follow(S)={#}

  Follow(L)={.,0,1,#}

  Follow(B)={.,0,1,#}

在I2中:

B→.0和B→.1为移进项目,S→L.为归约项目,存在移进-归约冲突,因此所给文法不是LR(0)文法。

在I2、I8中:

Follow(s)∩{0,1}={#}∩{0,1}=

所以在I2、I8中的移进-归约冲突可以由Follow集解决,所以G是SLR

(1)文法。

题目2的SLR

(1)分析表

·

  0   1  #

S L B

6

7

8

         acc

S6  S4  S5  r2

r4  r4  r4  r4

r5  r5  r5  r5

r6  r6  r6  r6

r3  r3  r3  r3

   S4  S5  r1

1 2 3

   7

  8 3

   7

题目2对输入串101.110#的分析过程

文法符号栈

05

03

024

027

02

025

026

0265

0263

0268

02685

02687

0268

02684

#1

#B

#L

#L0

#LB

#L1

#L.

#L.1

#L.B

#L.L

#L.L1

#L.LB

#L.L0

#S

101.110#....

01.110#....

1.110#....

.110#....

110#....

10#....

0#....

Shift

Reduceby:

B→1

S→LB

B→0

S→B

S→L.L

分析成功,说明输入串101.110是题目2文法的句子。

3.考虑文法:

SAS|bASA|a

(1)列出该文法所有的LR(0)项目。

(2)按

(1)列出的项目构造识别这个文法活前缀的NFA,把这个NFA确定化为DFA,说明这个DFA的所有状态全体构成这个文法的LR(0)规范族。

(3)此文法是SLR

(1)的吗?

,若是,构造他的SLR分析表

(4)这个文法是LALR或LR

(1)的吗?

解:

(1)构造增广文法,S’S

文法的LR(0)项目有:

1.S’.S2.S’S.3.S.AS4.SA.S

5.SAS.6.S.b7.Sb.8.A.SA

9.AS.A10.ASA.11.A.a12.Aa.

(2)所产生的NFA略。

由规则构造所需的DFA:

SSA

ba

aA

aa

b

bS

bA

a

bA

ASS

则LR(0)项目集规范族为:

C={I0,I1,I2,I3,I4,I5,I6,I7}

(3)可以看到I1,I6,I7存在着移进-归约的冲突。

冲突是不能用SLR

(1)的方法来解决。

比如I6:

对于状态SAS.和S.b

Follow(S)={#,a,b}与{b}相交不为空。

所以以上文法不是SLR

(1)文法。

(4)为验证该文法是否为LALR或LR

(1)的,构造LR

(1)项目集。

对于I5,产生了移进-归约矛盾,所以这个文法不是LR

(1)文法。

于是也不是LALR文法。

第6题

  文法:

  S→UTa|Tb

  T→S|Sc|d

  U→US|e

  拓广文法为G'

,增加产生式S'

→S

→S

  1 S→UTa

  2 S→Tb

  3 T→S

  4 T→Sc

  5 T→d

  6 U→US

  7 U→e

)={d,e}

  First(S)={d,e}

  First(U)={e}

  First(T)={d,e}

  Follow(S)={a,b,c,d,e,#}

  Follow(U)={d,e}

  Follow(T)={a,b}

在I1中:

S'

→S.为接受项目,T→S.为归约项目,T→S.c为移进项目,存在接受-归约和移进-归约冲突,因此所给文法不是LR(0)文法。

Follow(S'

)∩Follow(T)={#}∩{a,b}=

Follow(T)∩{c}={a,b}∩{c}=

在I8中:

Follow(U)∩Follow(T)∩{c}={d,e}∩{a,b}∩{c}=

所以在I1中的接受-归约和移进-归约冲突与I8中的移进-归约和归约-归约冲突可以由Follow集解决,所以G是SLR

(1)文法。

题目3的SLR

(1)分析表

a  b  c  d  e   #

S U T

9

10

      S5  S4

r3  r3  S6        Acc

S9..................

      r7  r7

r5  r5........................

r4  r4.........................

S10  S9.........................

r3  r3.  S6  r6  r6......

r2  r2.  r2  r2  r2  r2

r1  r1.  r1  r1  r1  r1

8 2 7

 

  

 

第8题

SA#  A→BaBb|DbDa  B→ε  D→ε

 证明该文法是LR

(1)但不是SLR

(1)。

  解:

若产生式排序为:

→A#  1 A→BaBb  2 A→DbDa  3 B→ε  4 D→ε

)={a,b}

  First(A)={a,b}

  First(B)={ε}

  First(D)={ε}

)={#}

  Follow(A)={#}

  Follow(B)={a,b}

  Follow(D)={a,b}

  G′的LR

(1)项目集族及识别活前缀的DFA如下图所示:

B→.,a和T→.,b为归约项目,但它们的搜索符不同,若当前输入符为a时用产生式B→ε归约,为b时用产生式D→ε归约,所以该文法是LR

(1)文法。

若不看搜索符,在I0中项目B→.和T→.为归约-归约冲突,而

Follow(B)∩Follow(D)={a,b}∩{a,b}≠

,冲突不能用Follow集解决,所以该文法不是SLR

(1)文法。

构造的LR

(1)分析表如下:

题目4的LR

(1)分析表

State

a . b . #

A  B  D

r3  r4......

      Acc

S4............

r3

r4............

S8

S9............

       r1

       r2

1  2  3

     7

10.判断下列各题所示文法是否为LR类文法,若是请说明是LR(0)、SLR

(1)、LALR

(1)或LR

(1)的哪一种,并构造相应分析表

(1)SABAaBa|εBbAb|ε

(3)SaAd|eBd|aBr|eArAaBa

(5)AaB|εBAb|a

(6)S(SR|aR.SR|)

(1)解:

对于该文法构造LR(0)项目规范族:

I0:

S’.SI1:

S’S.I3:

Aa.BaI5:

Bb.AbI6:

AaB.a

S.ABI2:

SA.BB.bAbA.aBaI7:

AaBa.

A.aBaB.bAbB.A.I8:

BbA.b

A->

.B.I4:

SAB.I9:

BbAb.

可见存在着移进-归约冲突,这个文法不是LR(0)文法。

考虑用SLR

(1)来解决问题:

构造SLR

(1)分析表,发现该文法是SLR

(1)文法。

状态

ACTION

GOTO

a

b

S

B

s3

r5

r1

S3

S7

r2

S9

r4

(3)解:

先构造该文法的LR(0)项目集规范族:

Se.BdI5:

SaB.rI9:

SaAd.

S.AdI2:

Sa.AdB.aI6:

Aa.I10:

SaBr.

S.eBdSa.BrSe.ArBa.I11:

SeBd.

S.aBrA.aA.aI7:

SeB.dI12:

SeAr.

S.eArB.aI4:

SaA.dI8:

SeA.r

该文法存在着归约-归约冲突,所以不是LR(0)文法。

对于状态I6:

Aa.

Ba.

Follow(A)={dr}Follow(B)={dr}

两个集合相交不为空,所以该文法也不是SLR

(1)文法。

构造该文法的LR

(1)文法可得该文法是LR

(1)的。

S’S,#I2:

Sa.Ad,#I4:

SaA.d,#I10:

SaAd.,#

S.aAd,#Sa.Br,#I5:

SaB.r,#I11:

SaBr.,#

S.eBd,#A.a,dI6:

Aa.,dI12:

SeBd.,#

S.aBr,#B.a,rBb.,rI13:

SeAr.,#

S.eAr,#I3:

Se.Bd,#I7:

SeB.d,#

I1:

S’S.,#Se.Ar,#I8:

SeA.r,#

B.a,dI9:

Ba.,d

A.a,rAa.,r

构造LR

(1)分析表(略)。

(5)解:

构造LR(0)的分析表:

S.AI3:

S->

aB.I6:

B->

AB.

A.aBI4:

A.b

A.I5:

a.

A.A->

a.B

I2:

a.BB->

.Ab

.AbB->

.a

.aA->

.aB

.aBA->

可以看到存在着移进-归约的冲突,不是LR(0)文法。

在I0中Follow(A)与{b}相交不为空。

所以也不为SLR

(1)文法。

构造该文法的LR

(1)项目集规范族:

.A,#I4:

A.b,#I9:

a.,b

.aB,#I5:

a.,#A->

a.B,b

.,#A->

a.B,bB->

.Ab,b

A.,#B->

.Ab,bB->

.a,b

a.B,#B->

.a,bA->

.aB,b

.Ab,#,B->

.aB,bA->

.,b

.a,#A->

.aB,bI10:

B->

AB.,b

.aB,bI6:

Ab.,#

.,bI7:

aB.,b

I3:

aB.,#I8:

A.b,b

其中存在冲突,所以文法也不是LR

(1)文法。

(6)解:

将文法拓广后得:

(0)S’S

(1)S(SR

(2)Sa

(3)R.SR

(4)R)

构造LR(0)的项目集规范族:

一个文法是LR(0)文法一定也是SLR

(1)文法,也是LR

(1)文法。

但反之则不一定成立。

I0~~I9无冲突项目,所以此文法是LR(0)文法。

构造其LR

(1)的DFA(构造过程中,在建立好初态集后,立即产生所有新状态的核集合,然后再逐步扩充):

核集合

项目集(核集合+闭包增加项目)

I0

S′→•S,#

S•S,#

S•(SR,#

S•a,#

I1

SS•,#

I2

S(•SR,#

S(•SR,#

S•(SR,./)

S•a,./)

I3

I4

S(S•R,#

R•.SR,#

R•),#

I5

S(•SR,./)

S•(SR,./)--I5

S•a,./)--I6

I6

Sa•,./)

I7

S(SR•,#

I8

R.•SR,#

I9

R)•,#

I10

S(S•R,./)

R•.SR,./)

R•),./)

I11

R.S•R,#

R•.SR,#--I8

R•),#--I9

I12

S(SR•,./)

I13

R.•SR,./)

I14

R)•,./)

I15

R.SR•,#

I16

R.S•R,./)

R•.SR,./)--I13

R•),./)--I14

I17

R.SR•,./)

无移进-规约冲突和规约-规约冲突,此文法是LR

(1)文法。

对同心集合并,得LALR

(1)项目集规范族:

I2,5

S(•SR,./)/#

I3,6

S•a,./)/#

I4,10

S(S•R,./)/#

I7,12

S(SR•,./)/#

I8,13

R.•SR,./)/#

I9,14

R)•,./)/#

I11,16

R.S•R,./)/#

I15,17

R.SR•,./)/#

同心集合并后无冲突,其项目集的个数与LR(0)相同,此文法是LALR

(1)文法。

11.设文法G[S]为:

SAS|εAaA|b

(1)证明G[S]是LR

(1)文法

(2)构造出它的LR

(1)分析表

(3)给出输入符号串abab#的分析过程

一个文法不是SLR

(1)时,不能证明它是LR

(1)的

将文法改写为拓广文法:

(0)S’→S

(1)SAS

(2)Sε(3)AaA(4)Ab

构造其LR

(1)项目集规范族:

S•AS,#

S•,#

A•aA,a/b/#

A•b,a/b/#

SA•S,#

S•AS,#--I2

A•aA,a/b/#--I3

A•b,a/b/#--I4

Aa•A,a/b/#

Ab•,a/b/#

SAS•,#

AaA•,a/b/#

LR

(1)分析表:

S4

对abab#的分析过程:

步骤

状态栈

符号栈

输入串

abab#

03

bab#

034

#ab

ab#

036

02

023

#Aa

b#

0234

#Aab

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1