编译原理复习题有答案版.docx

上传人:b****5 文档编号:6995761 上传时间:2023-01-15 格式:DOCX 页数:9 大小:18.69KB
下载 相关 举报
编译原理复习题有答案版.docx_第1页
第1页 / 共9页
编译原理复习题有答案版.docx_第2页
第2页 / 共9页
编译原理复习题有答案版.docx_第3页
第3页 / 共9页
编译原理复习题有答案版.docx_第4页
第4页 / 共9页
编译原理复习题有答案版.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

编译原理复习题有答案版.docx

《编译原理复习题有答案版.docx》由会员分享,可在线阅读,更多相关《编译原理复习题有答案版.docx(9页珍藏版)》请在冰豆网上搜索。

编译原理复习题有答案版.docx

编译原理复习题有答案版

1、给出下面语言的相应文法。

L1={anbnci|n>1,i>0}

答案:

STAB|B

Ata|aA

BtbBc|bc

2•给出下面语言的相应文法

L1={anbncmdm|m,n>1,n为奇数,m为偶数}。

答案:

文法G(S):

StAC

AtaaAbb/ab

CtccCcc/cc

3、构造一个DFA它接受!

={a,b}上所有包含ab的字符串。

(要求:

先将正规式转化为NFA再将NFA确定化,最小化)

(1)相应的正规式为(a|b)*ab(a|b)*

(2)①与此正规式对应的NFA为

答案;在自己写的纸上

4、对下面的文法G:

EtTE'E't+E|&TtFT'T'tT|&

Ftpf'F't*F'|&Pt(E)|a|b|A

(1)证明这个文法是LL

(1)的。

考虑下列产生式:

E'->E|&

T'->T|&

F'->*F'|£

P->(E)|Aa|b

FIRST(+E)AFIRST(&)={+}A{&}=©

FIRST(+E)AFOLLOW(E')={+}A{#,)}=©FIRST(T)AFIRST(&)={(,a,b,A}A{£}=©

FIRST(T)AFOLLOW(T')={(,a,b,A}A{+,),#}=©

FIRST(*F')AFIRST(&)={*}A{£}=©FIRST(*F')AFOLLOW(F')={*}A{(,a,b,A,+,),#}=©

FIRST((E))AFIRST(a)AFIRST(b)AFIRST(A)=©所以,该文法式LL

(1)文法.

计算这个文法的每个非终结符的FIRST和FOLLOW(8分)

答案:

FIRST(E)={(,a,bf}

FIRST(E')={+,£}

FIRST(T)={(,a,bf}

FIRST(T')={(,a,bf,&}

FIRST(F)={(,a,bf}

FIRST(F')={*,£}

FIRST(P)={(,a,bf}

FOLLOW(E)={#,)}

FOLLOW(E')={#,)}

FOLLOW(T)={+,),#}

FOLLOW(T')={+,),#}

FOLLOW(F)={(,a,bA+,),#}

FOLLOW(F')={(,a,bf,+,),#}

FOLLOW(P)={*,(,a,bf,+,),#}

(3)构造它的预测分析表。

(6分)

答案;在手机上

写出表达式a+b*(c-d)对应的逆波兰式和三元式序列。

答案:

逆波兰式:

(abcd-*+)

三元式序列:

OP

ARG1

ARG2

(1)-

c

d

(2)*

b

(1)

(3)+

a

(2)

给出下面语言的相应文法

L1={anbnambm|n,m>0}给出下面语言的相应文法

答案:

StAB|A|B|刀

AtaAb|ab

BtaBb|ab

L2={anbnci|n>1,i>0}

给出下面语言的相应文法

答案:

StAB|B

Ata|aA

BtbBc|bc

17、对下面的文法G:

S—■SaT|aT|aT

T■aT|:

:

a

(1)消除该文法的左递归和提取左公因子;

(2)构造各非终结符的FIRST和FOLLOWS合;

(3)构造该文法的LL

(1)分析表,并判断该文法是否是LL

(1)的

18、文法G(S)及其LR分析表如下,请给出串baba#的分析过程<:

(1)StDbB⑵Dtd(3)Dt&

⑷Bta(5)BtBba⑹Bt&

LR分析表

ACTION

GOTO

b

D

a

#

S

b

D

0

r3

s3

1

2

1

acc

2

s4

3

r2

4

r6

S5

r6

6

5

r4

r4

6

s7

r1

7

S8

8

r5

r5

答案:

步骤状态符号输入串

00#baba#

102#Dbaba#

2024#Dbaba#

30245#Dbaba#

40246#DbBba#

502467#DbBba#

6024678#DbBba#

70246#DbB#

801#S#acc

七、证明题

1、证明下面文法是LL⑴的但不是SLR⑴的。

S—AaAb|BbBa

Af£

B—£

首先该文法无左递归存在,没有公共左因子。

其次:

对于S—AaAb|BbBaFIRST(AaAb)={a}FIRST(BbBa)={b}

FIRST(AaAb)GFIRST(BbBa)=O

所以该文法是LL

(1)文法。

⑵证明该文法不是SLR的。

文法的LR(0)项目集规范族为:

I0={S.SS—.AaAbS—.BbBaA—.B—.}

I1={S'—S.}

I2={S—A.aAb}

I3={SfB.bBa}

I4={SfAa.AbAf.}

I5={SfBb.BaBf.}

I6={SfAaA.b}

I7={SfBbB.a}

I8={SfAaAb.}

I9={SfBbBa.}

考察I0:

FOLLOW(A)={a,b}FOLLOW(B)={a,b}FOLLOW(ADFOLLOW(B)={a,b}

产生规约-规约冲突。

所以该文法不是SLR

(1)文法。

2、证明下面文法是SLR

(1)但不是LR(0)的。

SfA

AfAb|bBa

BfaAc|a|aAb

解:

文法G[S]:

0:

SfA

1:

AfAb

2:

AfbBa

3:

BfaAc

4:

Bfa

5:

BfaAb

状态5存在“归约—移进”冲突,状态9存在“归约—归约”冲突,因此该文法不是LR(0)文法

状态5:

FOLLOW(B>{a},因此,FOLLOW(B){b}=O

状态9:

FOLLOW(B>{a},FOLLOW(符{#,b,c},因此FOLLOW(B)FOLLOW(符①

状态5和状态9的冲突均可用SLR

(1)方法解决,构造SLR

(1)分析表

状态

ACTION

GOTO

a

b

c

#

A

B

0

S2

1

1

S3

ACCEPT

2

S5

4

3

R1

R1

R1

4

S6

5

R4

S2

7

6

R2

R2

R2

7

S9

S8

8

R3

9

R5

R1

R1

R1

I111I该SLR

(1)分析表无

重定义,因此该文法是SLR

(1)文法,不是LR(0)文法。

八、语义分析题

1、将语句

if((A<0)(B>0))thenwhile(C>0)doC:

=C-D

翻译成四元式

答案:

100(j<,A,0,104)

101(j,-,-,102)

102(j>,B,0,104)

103(j,-,-,109)

104(j>,C,0,106)

105(j,-,-,109)

106(-,C,D,T1)

107(:

=,T1,-,C)

108(j,-,-,104)

109

e>cdoc:

=c+1

2、写出下面语句经语法制导翻译后所生成的四元式代码序列。

ifx

elsex:

=x+5

答案:

假设初始为100,则四元式代码序列为

100

if

x

goto

101

goto

107

102

if

e>c

goto

103

goto

109

104

M:

=C+1

105

C:

=M

106

goto

102

107

N:

=X+5

108

X:

=N

109

7、设有文法:

E—E+T|T

T—T*F|F

F-(E)|i

102

104

(1)证明E+T*F是它的一个句型。

(3分)

答案:

e^>eIt^eI

(2)给出E+T*F的所有短语,直接短语和句柄。

(4分)

短语:

E+T*F,T*F,

直接短语:

T*F句柄:

T*F

(3)给出句子1+1*1的最右推导。

(4分)

没有答案

10、11、构造下面正规式相应的DFA

1(0|1)*101

答案:

II0I1

{X}①{A,B,C}

{A,B,C}{B,C}{B,C,D}

{B,C}{B,C}{B,C,D}

{B,C,D}{B,C,E}{B,C,D}

{B,C,E}{B,C}{B,C,D,y}

{B,C,D,y}{B,C,E}{B,C,D}

14、对下面的文法G:

Exprf-Expr

Exprf(Expr)|VarExprTail

ExprTailf-Expr|£

VarfidVarTail

VarTailf(Expr)|£

(1)构造LL

(1)分析表。

(12分)

(2)给出对句子id—id((id))的分析过程。

(8分)

答案:

(1)FIRST(Expr)={_,(,id}FIRST(ExprTail)={_,£}FIRST(Var)={id}

FIRST(VarTail)={(,£}FOLLOW(Expr)={#,)}FOLLOW(ExprTail)={#,)}

FOLLOW(Var)={_,#,)}FOLLOW(VarTail)={_,#,)}

(2)给出对句子id—id((id))的分析过程。

步骤符号栈输入串所用产生式

0#Exprid__id((id))#

1#ExprTailVarid__id((id))#ExprfVarExprTail2#ExprTail

VarTailidid__id((id))#VarfidVarTail

3#ExprTailVarTail__id((id))#

4#ExprTail__id((id))

#VarTailf£

5#Expr___id((id))

ExprTailf_Expr

6#Expr_id((id))

8#Exprid((id))#

9#ExprTailVarid((id))

10#ExprTailVarTailidid((id))

11#ExprTailVarTail((id))

12#ExprTail)Expr(((id))

13#ExprTail)Expr(id))

14#ExprTail))Expr((id))

15#ExprTail))Exprid))

16#ExprTail))ExprTailVar

#ExprfVarExprTail

#VarfidVarTail

#VarTailf(Expr)

#Exprf(Expr)

))#ExpfVarExprTai

17#ExprTail))ExprTailVarTailidid))

#VarfidVarTail

18#ExprTail))ExprTailVarTail))#

19#ExprTail))ExprTail))

#VarTailf£

20#ExprTail))))#ExprTailf£

21#ExprTail))#

22#ExprTail#ExprTailf£

 

23##

分析成功

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

当前位置:首页 > 成人教育 > 成考

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

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