作业参考答案.docx

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

作业参考答案.docx

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

作业参考答案.docx

作业参考答案

第7章LR分析

1.已知文法A—aAdaAb|£

判断该文法是否是SLR(l)文法,若是构造相应分析表,并对输入串ab#给

出分析过程。

答案:

文法:

A~*aAdaAb£

拓广文法为G',增加产生式9一A

若产生式排序为:

0S'—A

1AfaAd

2AfaAb

3A-*e

由产生式知:

First(S')={e,a}

First(A)={£,a}

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

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

在10中:

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

在10、12中:

Follow(A)n{a}={d,b,#}A{a}=4>

所以在10.12中的移进-归约冲突可以由Follow集解决,所以G是SLR(l)文法。

构造的SLR(l)分析表如下:

题目1的SLR(l)分析表

状态(State)

Action

Goto

a

d

b

A

0

S2

r3

r3

r3

1

1

acc

S2

r3

r3

r3

3

3

S4

S5

1

rl

rl

rl

r2

r2

对输入串ab#的分析过程

状态栈(statestack)

文法符号栈

剩余输入串

(inputleft)

动作(action)

D

ab#

移进

b2

b#

归约Af£

p23

fiaA

b#

移逬

P235

#aAb

归纟勺A—aAb

°1

#A

成功

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

LR(O),SLR

(1),LALR

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

(3)S~>aAdeBdaBr'jeAr

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(O)项目集族及识别活前缀的DFA如下图所示:

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

下面判断是否为SLR(l)文法:

Follow(A)={d,r}

Follow(B)={d,r}

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

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

但若合并同心项目集16和113,则归约-归约冲突又会重现,因此该文法不是LALR(l)文法。

3)LR

(1)分析表

Action

Goto

State

aedr

SA

U

B

0

S2S3

1

1

acc

2

S6

4

5

3

S13

8

7

4

S9

5

S10

6

R5R6

7

Sil

8

S12

9

R1

10

R3

11

R2

12

R4

13

R6R5

11•设文法G[S]为:

S->AS|e

A->aAb

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

扩展文法G'为:

(0)S'->S

(1)S->AS

(2)S->e

(3)A~>aA

(4)A->b

G‘的LR⑴项目集族及识别活前缀的DFA如下图所示:

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

(2)构造它的LR⑴分析表;

Action

Goto

State

ab

n

s

A

0

S3S4

R2

1

2

1

acc

2

S3S4

R2

5

2

3

S3S4

6

4

R4R4

R4

5

R1

6

R3R3

R3

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

符号输入缓冲

动作

序号状态栈

栈区

 

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->e

10

0225

#AAS

Rl,归约S->AS

11

025

#AS

Rl,归约S->AS

12

01

ns

acc成功

15.已知文法为:

S->a|A|(T)

T->T,SS

⑴构造它的LR(O),LALR(l),LR⑴分析表;

扩展文法L为:

(0)

S'->s

(1)

S->a

(2)

S->A

(3)

S->(T)

(4)

T->T,S

(5)

T->S

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

 

R5

7

R3R3R3R3R3

R3

8

S2S3S4

9

9

R4R4R4R4R4

R4

2)LR

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

 

图中笃”为文法符号。

说明:

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

LR

(1)分析表:

Action

Goto

State

aA(),U

ST

0

S2S3S4

1

1

acc

2

R1

3

R2

4

S7S8S9

65

5

S10Sil

6

R5R5

7

R1R1

8

R2R2

9

S7S8S9

6

12

10

R3

11

S7S8S9

13

12

S14Sil

13

R4R4

14

R3R3

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

LALR(l)分析表:

Action

Goto

State

aA(),#

ST

0

S2S3S4

1

1

acc

2

R1R1

R1

3

R2R2

R2

4

S2S3S4

65

5

S10Sil

6

R5R5

10

R3R3

R3

11

S2S3S4

13

13

R4R4

⑵给出对输入符号串(a#和(ay#的分析过程;

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

用LR(O)分析表

序号

状态

符号

输入缓冲

动作

1

0

(a#

S4,移进

2

04

#(

a#

S2,移进

3

042

#(a

U

Rl,归约S->a

4

046

#(S

U

R5,归约T->S

5

045

ft(T

ft

出错

 

用LR⑴分析表

序号

状态栈

符号

输入缓冲

动作

1

0

n

(a#

S4,移进

2

04

#(

a#

S7,移进

3

047

ti

错误

 

用LALR(l)分析表

序号

状态栈

符号

输入缓冲

动作

1

0

#

(a#

S4,移进

2

04

#(

an

S2,移进

3

042

#(a

R1,归约S->a

4046#(sn错误

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

用LR(0)分析表

符号输入缓冲

序号状态栈动作

栈区

1

0

n

(a,a#

S4,移进

2

04

#(

a,a#

S2,移进

3

042

#(a

a#

Rl,归约S->a

4

046

#(S

a#

R5,归约T->S

5

045

#(T

att

S&移进

6

0458

#(T,

a#

S2,移进

7

04582

#(T,a

Rl,归约S->a

8

04589

#(T,S

R4,归约T->T,S

9

045

#(T

出错

用LR

(1)分析表

 

序号

状态栈

符号

输入缓冲

动作

1

0

n

(a,a#

S4,移进

2

04

#(

a,a#

S7,移进

3

047

#(a

a#

Rl,归约S->a

4

046

#(s

R5,归约T->S

5

045

#(T

a#

Sil,移进

6

045(11)

#(T,

a#

S7,移进

7

045(11)7

#(T,a

#

出错

符号

输入缓冲

序号

状态栈

用LALR(l)分析表

动作

1

0

(a,a#

S4,移进

2

04

#(

a,a#

S2,移进

3

042

#(a

a#

Rl,归约S->a

4

046

#(S

a#

R5,归约T->S

5

045

#(T

a#

Sil,移进

6

045(11)

#(T,

a#

S2,移进

7

045(11)2

#(T,a

n

Rl,归约S->a

8

045(11)(13)

#(T,S

n

出错

⑶说明

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

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

(1)的效率最高,LALR(l)次之,LR(O)最差。

补充题:

GES1文法如下,求其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)方法:

由上图中可以看到18中存在归约-归约冲突,19中存在移进-归约冲突,

所以该文法不是LR(O)文法

2)再判断是否为SLR(l)文法:

Follow(S)={#}

Follow(A)={a,b}

Follow(B)={a}

Follow(C)={b,ft}

Follow(D)={b}

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

文法。

3)判断是否为LR

(1)文法:

得到再由C-*.Cba,#得到b。

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

(1)文法。

LR⑴分析表:

Action

Goto

State

abtt

SABC

D

0

S3

12

1

acc

2

S4

3

R6

4

S8

67

5

5

S10

9

6

R4

7

SU

8

R7R6

9

S12R1

10

S14

11

R5

12

S13

13

R2R2

14

R3R3

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

当前位置:首页 > 小学教育 > 语文

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

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