蒋立源编译原理第三版第四章习题与答案docx.docx

上传人:b****5 文档编号:27596925 上传时间:2023-07-03 格式:DOCX 页数:48 大小:102.43KB
下载 相关 举报
蒋立源编译原理第三版第四章习题与答案docx.docx_第1页
第1页 / 共48页
蒋立源编译原理第三版第四章习题与答案docx.docx_第2页
第2页 / 共48页
蒋立源编译原理第三版第四章习题与答案docx.docx_第3页
第3页 / 共48页
蒋立源编译原理第三版第四章习题与答案docx.docx_第4页
第4页 / 共48页
蒋立源编译原理第三版第四章习题与答案docx.docx_第5页
第5页 / 共48页
点击查看更多>>
下载资源
资源描述

蒋立源编译原理第三版第四章习题与答案docx.docx

《蒋立源编译原理第三版第四章习题与答案docx.docx》由会员分享,可在线阅读,更多相关《蒋立源编译原理第三版第四章习题与答案docx.docx(48页珍藏版)》请在冰豆网上搜索。

蒋立源编译原理第三版第四章习题与答案docx.docx

蒋立源编译原理第三版第四章习题与答案docx

 

第五章

 

习题

5-1

设有文法

G[S]:

S

→A/

A

→aA∣AS∣/

(1)找出部分符号序偶间的简单优先关系。

(2)验证G[S]不是简单优先文法。

 

5-2对于算符文法G[S]:

 

S→EE→E-T∣TT→T*F∣FF→-P∣PP→(E)∣i

(1)找出部分终结符号序偶间的算符优先关系。

(2)验证G[S]不是算符优先文法。

 

5-3设有文法

G′

[E]:

E→E

E

→E+T|T

1

T→TT→T*F|F

F→(E)|i

1

1

1

1

1

其相应的简单优先矩阵如题图

5-3

所示,试给出对符号串(

i+i)进行简单优先分析的

过程。

 

题图5-3文法G′[E]的简单优先矩阵

 

5-4设有文法G[E]:

E→E+T|T

T→T*F|F

F→(E)|i

其相应的算符优先矩阵如题图5-4所示。

试给出对符号串(i+i)进行算符优先分析的

过程。

 

i

*

+

#

i

 

*

+

#

题图5-4

文法G[E]的算符优先矩阵

 

5-5对于下列的文法,试分别构造识别其全部可归前缀的DFA和LR(0)分析表,并

判断哪些是LR(0)文法。

(1)S→aSb∣aSc∣ab

(2)S→aSSb∣aSSS∣c

(3)S→AA→Ab∣a

 

5-6下列文法是否是SLR

(1)文法?

若是,构造相应的SLR

(1)分析表,若不是,则

 

阐明其理由。

(1)S→Sab∣bRR→S∣a

(2)S→aSAB∣BAA→aA∣BB→b

(3)S→aA∣bBA→cAd∣εB→cBdd∣ε

 

5-7对如下的文法分别构造LR(0)及SLR

(1)分析表,并比较两者的异同。

S→cAd∣bA→ASc∣a

 

5-8对于文法G[S]:

S→AA→BA∣εB→aB∣b

(1)构造LR

(1)分析表;

(2)给出用LR

(1)分析表对输入符号串abab的分析过程。

 

5-9对于如下的文法,构造LR

(1)项目集族,并判断它们是否为LR

(1)文法。

 

(1)S→AA→AB∣εB→aB∣b

(2)S→aSa∣a

 

第4章习题答案2

5-1解:

(1)由文法的产生式和如答案图5-1(a)所示的句型A//a/的语法树,可得G中

的部分优先关系如答案图5-1(b)所示。

 

(2)由答案图5-1(b)可知,在符号A和/之间,即存在等于关系,又存在低于关系,故文法G[S]不是简单优先文法。

 

5-2解:

 

(1)由文法G[S]的产生式可直接看出:

 

(○=)

此外,再考察句型-P--(E)和i*(T*F)的语法树(见答案图5-2(a)及(b))。

由答案图5-2(a)可得:

 

-○>-,-○<-,-○<(

由答案图5-2(b)可得:

 

i○>*,*○<(,(○<*,*○>)

(2)由答案图5-2(a)可知,在终结符号-和-之间,存在两种算符优先关系:

 

-○>-,-○<-

故文法G[S]不是算符优先文法。

 

5-3解:

对符号串(i+i)进行简单优先分析的过程如答案表5-3所示。

 

因为分析成功,所以符号串(i+i)是文法G′[E]的合法句子。

 

答案表5-3

符号串(i+i)

的简单优先分析过程

当前

余留

所用

步骤

分析栈

关系

符号

输入串

句柄

产生式

0

#

低于

i+i)#

1

#(

低于

i

+i)#

2

#(i

优于

+

i)#

i

F→i

3

#(F

优于

+

i)#

F

T→F

4

#(T

优于

+

i)#

T

T1→T

5

#(T1

优于

+

i)#

T1

E1→T1

6

#(E

1

等于

+

i)#

7

#(E1

+

低于

i

)#

8

#(E

1

+i

优于

#

i

F→i

9

#(E

1

+F

优于

#

F

T→F

10

#(E1

+T

优于

#

T

T1→T

11

#(E

1

+T

优于

#

E+T

E→E+T

1

1

1

1

1

1

12

#(E1

优于

#

E1

E→E1

13

#(E

等于

#

14

#(E)

优于

#

(E)

F→(E)

15

#F

优于

#

F

T→F

16

#T

优于

#

T

T1→T

17

#T1

优于

#

T1

E1→T1

18

#E

优于

#

E

E→E

1

1

1

19

#E

#

分析

优于

成功

 

5-4解:

对符号串(i+i)

 

因为分析成功,所以符号串

 

进行算符优先分析的过程如答案表

(i+i)是文法G[E]的合法句子。

 

5-4

 

所示。

 

句子(i+i)及其分析过程中所得句型的语法树如答案图5-4所示。

 

答案表5-4

符号串(i+i)

的算符优先分析过程

当前栈顶

优先

当前输

余留

最左

步骤

分析栈

终结符号

关系

入符号

输入串

素短语

0

#

#

i+i)#

1

#<(

i

+i)#

2

#<(<i

i

+

i)#

i

○○

3

#<(F

+

i)#

4

#<(<F+

+

i

)#

○○

5

#○<(○<F+○<i

i

○>

#

i

6

#<(<F+F

+

#

F+F

○○

7

#○<(E

○=

#

8

#<(=E)

#

(E)

○○

9

#F

#

#

分析

成功

 

5-5

解:

(1)

在文法G[S]中引入一个新的开始符号

S′,且将S′→S作为第0个产生式添

加到文法G中,从而得到G的拓广文法G′[S′]:

′→S→aSc

→aSb→ab

识别文法G[S]全部可归前缀的DFA如答案图5-5-

(1)所示。

 

因为文法G[S]的每个LR(0)项目集中都不含冲突项目,所以文法G[S]是LR(0)文法,故可构造出不含冲突动作的LR(0)分析表如答案表5-5-

(1)所示。

 

答案表5-5-

(1)

文法G[S]的LR(0)分析表

ACTION

GOTO

状态

a

b

c

#

S

0

s2

1

1

acc

2

s2

s4

3

3

s5

s6

4

r3

r3

r3

r3

5

r1

r1

r1

r1

6

r2

r2

r2

r2

 

(2)在文法G[S]中引入一个新的开始符号S′,且将S′→S作为第0个产生式添

加到文法G中,从而得到G的拓广文法G′[S′]:

′→S→aSSS

→aSSb→c

识别文法G[S]全部可归前缀的DFA如答案图5-5-

(2)所示。

 

因为文法G[S]的每个LR(0)项目集中都不含冲突项目,所以文法G[S]是LR(0)文法,故可构造出不含冲突动作的LR(0)分析表如答案表5-5-

(2)所示。

 

答案表5-5-

(2)

文法G[S]的LR(0)

分析表

状态

ACTION

GOTO

a

b

c

#

S

0

s2

s3

1

 

1

acc

2

s2

s3

4

3

r3

r3

r3

r3

4

s2

s3

5

5

s2

s3

7

6

r1

r1

r1

r1

7

r2

r2

r2

r2

 

(3)在文法G[S]中引入一个新的开始符号S′,且将

加到文法G中,从而得到G的拓广文法G′[S′]:

′→S→Ab

→A→a

识别文法G[S]全部可归前缀的DFA如答案图5-5-(3)

 

S′→S作为第所示。

 

0个产生式添

 

因为在LR(0)项目集I2中含有移进-归约冲突项目,所以文法G[S]不是LR(0)文法,

故构造出的

LR(0)分析表中含有冲突动作。

文法G[S]的LR(0)分析表如答案表

5-5-(3)

所示。

 

答案表5-5-(3)

文法G[S]的LR(0)分析表

状态

ACTION

GOTO

a

b

#

S

A

0

s3

1

2

1

acc

2

r1

s4,r1

r1

3

r3

r3

r3

4

r2

r2

r2

 

5-6解:

(1)在文法G[S]中引入一个新的开始符号S′,且将S′→S作为第0个产生式添

 

加到文法

 

G中,从而得到

′→S

→Sab

 

G的拓广文法G′[S′]:

→S

→a

2.S

→bR

识别文法G[S]全部可归前缀的DFA如答案图5-6-

(1)所示。

 

由答案图5-6-

(1)可知,在项目集I1和I4中都存在“移进-归约”冲突。

在项目集

I4={R→S·,S→S·ab}中,由于FOLLOR(R)={a},FOLLOR(R)∩{a}={a}≠?

,所以其项目集的“移进-归约”冲突不可能通过SLR

(1)规则得到解决,从而该文法不是SLR

(1)文法。

 

(2)在文法

 

G[S]中引入一个新的开始符号

 

S′,且将

 

S′→S作为第

 

0个产生式添

加到文法

G中,从而得到

G的拓广文法

G′[S′]:

 

识别文法

′→S

→aSAB

→BA

G[S]全部可归前缀的

→aA

→B

→b

DFA如答案图

 

5-6-

(2)

 

所示。

 

答案图5-6-

(2)识别G[S]全部可归前缀的DFA

 

因为文法G[S]的每个LR(0)项目集中都不含冲突项目,所以文法G[S]是LR(0)文法,

故也是SLR

(1)文法。

因为FOLLOW(S)={a,b,#},FOLLOW(A)={a,b,#},FOLLOW(B)={a,b,#},

 

G[S]的SLR

(1)分析表如答案表5-6-

(2)所示。

 

所以文法

 

答案表5-6-

(2)文法G[S]的SLR

(1)分析表

状态ACTIONGOTO

 

a

b

#

S

A

B

0

s2

s4

1

3

1

acc

2

s2

s4

5

3

3

s7

s4

6

8

4

r5

r5

r5

5

s7

s4

9

8

6

r2

r2

r2

7

s7

s4

11

8

8

r4

r4

r4

9

s4

10

10

r1

r1

r1

11

r3

r3

r3

 

(3)在文法G[S]中引入一个新的开始符号S′,且将S′→S作为第0个产生式添

加到文法G中,从而得到G的拓广文法G′[S′]:

′→S→ε

→aA→cBdd

→bB→ε

3.A→cAd

识别文法G[S]全部可归前缀的DFA如答案图5-6-(3)所示。

 

由答案图5-6-(3)可知,在项目集I2,I3,I5和I9中都存在“移进-归约”冲突。

因为在项目集I2和I5中,由于FOLLOR(A)={d,#},FOLLOR(A)∩{c}=?

,所以其项目

集的“移进-归约”冲突能通过SLR

(1)规则得到解决;

又因为在项目集I3和I9中,由于FOLLOR(B)={d,#},FOLLOR(B)∩{c}=?

,所以其项

目集的“移进-归约”冲突也能通过SLR

(1)规则得到解决;所以文法G[S]是SLR

(1)文

 

法。

因为FOLLOR(S)={#},FOLLOR(A)={d,#},FOLLOR(B)={d,#},所以文法G[S]的SLR

(1)

分析表如答案表5-6-(3)所示。

 

答案表5-6-(3)

文法

状态

ACTION

a

b

c

d

0

s2

s3

1

2

s5

r4

3

s9

r6

4

5

s5

r4

6

s7

7

r3

8

9

s9

r6

10

s11

11

s12

12

r5

 

G[S]的SLR

(1)分析表

GOTO

#

S

A

B

1

acc

r4

4

r6

8

r1

r4

6

 

r3

r2

r6

10

 

r5

 

5-7解:

在文法G[S]中引入一个新的开始符号S′,且将S′→S作为第0个

产生式添加到文法G中,从而得到G的拓广文法G′[S′]:

′→S→ASc

→cAd→a

→b

识别文法G[S]全部可归前缀的DFA如答案图5-7所示。

 

因为文法G[S]的每个LR(0)项目集中都不含冲突项目,所以文法G[S]是LR(0)文法。

文法G[S]的LR(0)分析表如答案表5-7-(a)所示。

 

答案表5-7-(a)

文法G[S]的LR(0)分析表

ACTION

GOTO

状态

a

b

c

d

#

S

A

0

s3

s2

1

1

acc

2

s4

5

3

r2

r2

r2

r2

r2

4

r4

r4

r4

r4

r4

5

s3

s2

s6

7

6

r1

r1

r1

r1

r1

7

s8

8

r3

r3

r3

r3

r3

 

因为FOLLOR(S)={#,c},FOLLOR(A)={b,c,d},所以文法G[S]的SLR

(1)分析表如答

案表5-7-(b)所示。

 

答案表5-7-(b)

文法G[S]的SLR

(1)分析表

ACTION

GOTO

状态

a

b

c

d

#

S

A

0

s3

s2

1

1

acc

2

s4

5

3

r2

r2

4

r4

r

4

r4

5

s3

s2

s6

7

6

r1

r1

 

7

s8

8

r3

r3

r3

 

两个表的相同之处为:

(1)两个表的GOTO表部分完全相同。

(2)在两个表的ACTION表中,不含归约项目的项目集对应的行的元素完全相同,即第0,2,5,7行完全相同。

两个表的不同之处为:

在两个表的ACTION表中,含有归约项目的项目集对应的行的元素不同,即第

3,4,6,8行的元素不同。

以第3行为例,答案表5-7-(a)中的所有元素都为r2;而在答案表5-7-(b)中,因为FOLLOR(S)={#,c},故仅在“#”和“c”列对应的元素为r2。

 

5-8

(1)

 

加到文法

 

文法

 

解:

在文法G[S]中引入一个新的开始符号S′,且将

G中,从而得到G的拓广文法G′[S′]:

′→S→ε

→A→aB

→BA→b

G[S]的LR

(1)项目集及DFA如答案图5-8所示。

 

S′→S作为第

 

0个产生式添

 

文法G[S]的LR

(1)分析表如答案表5-8-

(1)所示。

 

答案表5-8-

(1)

文法G[S]的LR

(1)分析表

状态

ACTION

GOTO

a

b

#

S

A

B

0

s4

s5

r3

1

2

3

1

acc

 

2

r1

3

s4

s5

r3

6

3

4

s4

s5

7

5

r5

r5

r5

6

r2

7

r4

r4

r4

 

(2)用LR

(1)分析表对输入符号串abab的分析过程如答案表5-8-

(2)所示。

因为

分析成功,所以符号串abab是文法G[S]的合法句子。

 

答案表5-8-

(2)

符号串abab的LR分析过程

步骤

状态栈

符号栈

余留输入串

分析动作

下一状态

1

I

0

#

abab#

s4

4

2

II

4

#a

bab#

s

5

5

0

3

I

0I

4I

5

#ab

ab#

r5

GOTO[I4,B]=7

4

I

0I

4I

7

#aB

ab#

r4

GOTO[I0,B]=3

5

I

0I

3

#B

ab#

s4

4

6

I

I

I

4

#Ba

b#

s

5

5

0

3

7

II

II

5

#Bab

#

r

5

GOTO[I,B]=7

0

3

4

4

8

I

0I

3I

4I7

#BaB

#

r4

GOTO[I

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

当前位置:首页 > 外语学习 > 其它语言学习

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

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