作业参考答案.docx

上传人:b****1 文档编号:13670960 上传时间:2023-06-16 格式:DOCX 页数:16 大小:236.51KB
下载 相关 举报
作业参考答案.docx_第1页
第1页 / 共16页
作业参考答案.docx_第2页
第2页 / 共16页
作业参考答案.docx_第3页
第3页 / 共16页
作业参考答案.docx_第4页
第4页 / 共16页
作业参考答案.docx_第5页
第5页 / 共16页
作业参考答案.docx_第6页
第6页 / 共16页
作业参考答案.docx_第7页
第7页 / 共16页
作业参考答案.docx_第8页
第8页 / 共16页
作业参考答案.docx_第9页
第9页 / 共16页
作业参考答案.docx_第10页
第10页 / 共16页
作业参考答案.docx_第11页
第11页 / 共16页
作业参考答案.docx_第12页
第12页 / 共16页
作业参考答案.docx_第13页
第13页 / 共16页
作业参考答案.docx_第14页
第14页 / 共16页
作业参考答案.docx_第15页
第15页 / 共16页
作业参考答案.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

作业参考答案.docx

《作业参考答案.docx》由会员分享,可在线阅读,更多相关《作业参考答案.docx(16页珍藏版)》请在冰点文库上搜索。

作业参考答案.docx

作业参考答案

第7章LR分析

1.已知文法A→aAd|aAb|ε

判断该文法是否是SLR

(1)文法,若是构造相应分析表,并对输入串ab#给出分析过程。

答案:

文法:

A→aAd|aAb|ε

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

若产生式排序为:

0S'→A

1A→aAd

2A→aAb

3A→ε

由产生式知:

First(S')={ε,a}

First(A)={ε,a}

Follow(A)={d,b,#}

G′的LR(0)项目集规范族及识别活前缀的DFA如下图所示:

在I0中:

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

在I0、I2中:

Follow(A)∩{a}={d,b,#}∩{a}=φ

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

(1)文法。

构造的SLR

(1)分析表如下:

题目1的SLR

(1)分析表

对输入串ab#的分析过程

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

(1),LALR

(1)或LR

(1)的哪一种,并构造相应的分析表,若不是请说明理由.

(3)S->aAd|eBd|aBr|eAr

A->a

B->a

答案:

1)列出扩展文法G'的产生式列表:

(0)S'->S

(1)S->aAd

(2)S->eBd

(3)S->aBr

(4)S->eAr

(5)A->a

(6)B->a

2)G'的LR(0)项目集族及识别活前缀的DFA如下图所示:

 

 

从上图中看出项目集I6中存在归约-归约冲突,所以该文法不是LR(0)文法。

下面判断是否为SLR

(1)文法:

Follow(S)={#}

Follow(A)={d,r}

Follow(B)={d,r}

对于I6,Follow(A)∩Follow(B)={d,r}不为φ,所以项目集I6中的归约-归约冲突不能消除,该文法不是SLR

(1)文法。

下面判断是否为LR

(1)文法,在上面的项目集规范族中加入搜索符:

 

从上图可以看出原来存的的归约-归约冲突已经消除,所以该文法为LR

(1)文法。

但若合并同心项目集I6和I13,则归约-归约冲突又会重现,因此该文法不是LALR

(1)文法。

3)LR

(1)分析表

 

Action

Goto

State

aedr#

SAB

0

S2S3

1

1

acc

 

2

S6

45

3

S13

87

4

S9

 

5

S10

 

6

R5R6

 

7

S11

 

8

S12

 

9

R1

 

10

R3

 

11

R2

 

12

R4

 

13

R6R5

 

11.设文法G[S]为:

S->AS|ε

A->aA|b

(1)证明G[S]是LR[1]文法;

扩展文法G’为:

(1)S’->S

(2)S->AS

(3)S->ε

(4)A->aA

(5)A->b

G'的LR

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

 

从上图中可以看出,每个项目集中均无移进-归约冲突和归约-归约冲突,所以该文法为LR

(1)文法。

(2)构造它的LR

(1)分析表;

 

Action

Goto

State

ab#

SA

0

S3S4R2

12

1

acc

 

2

S3S4R2

52

3

S3S4

6

4

R4R4R4

 

5

R1

 

6

R3R3R3

 

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

序号

状态栈

符号栈

输入缓冲区

动作

1

0

#

abab#

S3,移进

2

03

#a

bab#

S4,移进

3

034

#ab

ab#

R4,归约A->b

4

036

#aA

ab#

R3,归约A->aA

5

02

#A

ab#

S3,移进

6

023

#Aa

b#

S4,移进

7

0234

#Aab

#

R4,归约A->b

8

0236

#AaA

#

R3,归约A->aA

9

022

#AA

#

R2,归约S->ε

10

0225

#AAS

#

R1,归约S->AS

11

025

#AS

#

R1,归约S->AS

12

01

#S

#

acc成功

15.已知文法为:

S->a|∧|(T)

T->T,S|S

(1)构造它的LR(0),LALR

(1),LR

(1)分析表;

扩展文法G’为:

(1)S’->S

(2)S->a

(3)S->∧

(4)S->(T)

(5)T->T,S

(6)T->S

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

 

LR(0)分析表:

 

Action

Goto

State

a∧(),#

ST

0

S2S3S4

1

1

acc

 

2

R1R1R1R1R1R1

 

3

R2R2R2R2R2R2

 

4

S2S3S4

65

5

S7S8

 

6

R5R5R5R5R5R5

 

7

R3R3R3R3R3R3

 

8

S2S3S4

9

9

R4R4R4R4R4R4

 

2)LR

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

 

图中“,”为文法符号。

说明:

对于I4中的项目T->.T,S和T->.S,先由项目S->(.T),#推出扩展项目的搜索符为“)”,再由T->.T,S,)扩展出新的搜索符“,”,合并后的搜索符为“)/,”。

LR

(1)分析表:

 

Action

Goto

State

a∧(),#

ST

0

S2S3S4

1

1

acc

 

2

R1

 

3

R2

 

4

S7S8S9

65

5

S10S11

 

6

R5R5

 

7

R1R1

 

8

R2R2

 

9

S7S8S9

612

10

R3

11

S7S8S9

13

12

S14S11

 

13

R4R4

 

14

R3R3

 

LALR

(1)分析表需将上面DFA中的同心项目(同底色)的项目集合并后考虑,将状态数大的合并入状态数小的项目集中,在此不再另画图。

LALR

(1)分析表:

 

Action

Goto

State

a∧(),#

ST

0

S2S3S4

1

1

acc

 

2

R1R1R1

 

3

R2R2R2

 

4

S2S3S4

65

5

S10S11

 

6

R5R5

 

10

R3R3R3

11

S2S3S4

13

13

R4R4

 

(2)给出对输入符号串(a#和(a,a#的分析过程;

1)对输入符号串(a#的分析过程

用LR(0)分析表

序号

状态栈

符号栈

输入缓冲区

动作

1

0

#

(a#

S4,移进

2

04

#(

a#

S2,移进

3

042

#(a

#

R1,归约S->a

4

046

#(S

#

R5,归约T->S

5

045

#(T

#

出错

用LR

(1)分析表

序号

状态栈

符号栈

输入缓冲区

动作

1

0

#

(a#

S4,移进

2

04

#(

a#

S7,移进

3

047

#(a

#

错误

用LALR

(1)分析表

序号

状态栈

符号栈

输入缓冲区

动作

1

0

#

(a#

S4,移进

2

04

#(

a#

S2,移进

3

042

#(a

#

R1,归约S->a

4

046

#(S

#

错误

2)对输入符号串(a,a#的分析过程

用LR(0)分析表

序号

状态栈

符号栈

输入缓冲区

动作

1

0

#

(a,a#

S4,移进

2

04

#(

a,a#

S2,移进

3

042

#(a

a#

R1,归约S->a

4

046

#(S

a#

R5,归约T->S

5

045

#(T

a#

S8,移进

6

0458

#(T,

a#

S2,移进

7

04582

#(T,a

#

R1,归约S->a

8

04589

#(T,S

#

R4,归约T->T,S

9

045

#(T

#

出错

用LR

(1)分析表

序号

状态栈

符号栈

输入缓冲区

动作

1

0

#

(a,a#

S4,移进

2

04

#(

a,a#

S7,移进

3

047

#(a

a#

R1,归约S->a

4

046

#(S

a#

R5,归约T->S

5

045

#(T

a#

S11,移进

6

045(11)

#(T,

a#

S7,移进

7

045(11)7

#(T,a

#

出错

用LALR

(1)分析表

序号

状态栈

符号栈

输入缓冲区

动作

1

0

#

(a,a#

S4,移进

2

04

#(

a,a#

S2,移进

3

042

#(a

a#

R1,归约S->a

4

046

#(S

a#

R5,归约T->S

5

045

#(T

a#

S11,移进

6

045(11)

#(T,

a#

S2,移进

7

045(11)2

#(T,a

#

R1,归约S->a

8

045(11)(13)

#(T,S

#

出错

(3)说明

(1)中三种分析表发现错误的时刻和输入串的出错位置有何区别。

(2),由此二例说明,对于错误分析,LR

(1)的效率最高,LALR

(1)次之,LR(0)最差。

补充题:

G[S]文法如下,求其LR分析表

1.S→AaDC

2.C→Cba

3.C→ba

4.D→A

5.D→Ba

6.A→b

7.B→b

答:

扩展文法G’为:

0.S’→S

1.S→AaDC

2.C→Cba

3.C→ba

4.D→A

5.D→Ba

6.A→b

7.B→b

答:

1)首先判断是否为LR(0)方法:

 

由上图中可以看到I8中存在归约-归约冲突,I9中存在移进-归约冲突,所以该文法不是LR(0)文法

2)再判断是否为SLR

(1)文法:

Follow(S)={#}

Follow(A)={a,b}

Follow(B)={a}

Follow(C)={b,#}

Follow(D)={b}

2对于I8,Follow(A)∩Follow(B)={a},不为空,因此该文法不是SLR

(1)文法。

3)判断是否为LR

(1)文法:

 

说明:

上图中I8中C→.Cba,#/b中的搜索符#/b分二步得到,先由S->,#得到#,再由C→.Cba,#得到b。

由上图可看出原先I8,I9存在的冲突已消除,所以为LR

(1)文法。

LR

(1)分析表:

 

Action

Goto

State

ab#

SABCD

0

S3

12

1

acc

 

2

S4

 

3

R6

 

4

S8

675

5

S10

9

6

R4

 

7

S11

 

8

R7R6

 

9

S12R1

 

10

S14

 

11

R5

 

12

S13

 

13

R2R2

 

14

R3R3

 

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

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2