广工编译原理复习例题有客观题的答案.docx

上传人:b****5 文档编号:11777015 上传时间:2023-04-01 格式:DOCX 页数:19 大小:94.53KB
下载 相关 举报
广工编译原理复习例题有客观题的答案.docx_第1页
第1页 / 共19页
广工编译原理复习例题有客观题的答案.docx_第2页
第2页 / 共19页
广工编译原理复习例题有客观题的答案.docx_第3页
第3页 / 共19页
广工编译原理复习例题有客观题的答案.docx_第4页
第4页 / 共19页
广工编译原理复习例题有客观题的答案.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

广工编译原理复习例题有客观题的答案.docx

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

广工编译原理复习例题有客观题的答案.docx

广工编译原理复习例题有客观题的答案

编译原理复习例题

一选择题

1.编译的各阶段工作都涉及B。

[A]词法分析[B]表格管理[C]语法分析[D]语义分析

2.D型文法也称为正规文法。

 [A]0[B]1[C]2[D]3

3.D文法不是LL

(1)的。

 [A]递归[B]右递归[C]2型[D]含有公共左因子的

4.文法E→E+E|E*E|i的句子i*i+i*i有C棵不同的语法树。

 [A]1[B]3[C]5[D]7

5.文法S→aaS|abc定义的语言是C。

[A]{a2kbc|k>0}[B]{akbc|k>0}

[C]{a2k-1bc|k>0}[D]{akakbc|k>0}

6.若B为非终结符,则A→.B为D。

[A]移进项目[B]归约项目[C]接受项目[D]待约项目

7.同心集合并可能会产生新的D冲突。

[A]二义[B]移进/移进[C]移进/归约[D]归约/归约

8.代码优化时所依据的是C。

[A]语法规则[B]词法规则

[C]等价变换规则[D]语义规则

9.表达式a-(-b)*c的逆波兰表示(@为单目减)为B。

[A]a-b@c*[B]ab@c*-[C]ab@-[D]ab@c-*

10.过程的DISPLAY表是用于存取过程的B。

b

0

1

-

a

a

2

+

+

b

a

b

[A]非局部变量[B]嵌套层次[C]返回地址[D]入口地址

11.已知右图所示自动机M,请问下列哪个字符串不是M所能识别的。

D

[A]bbaa[B]abba[C]abab[D]aabb

 

12.若状态k含有项目“A→α.”,且仅当输入符号a∈FOLLOW(A)时,才用规则“A→α”归约的语法分析方法是D。

[A]LALR分析法[B]LR(0)分析法

[C]LR

(1)分析法[D]SLR

(1)分析法

13.有一语法制导翻译如下所示:

(第8章)

S->bAb{print“1”}

A->(B{print“2”}

A->a{print“3”}

B->Aa){print“4”}

若输入序列为b(((aa)a)a)b,则采用自下而上的分析方法,则输出是B。

[A]32224441[B]34242421

[C]12424243[D]34442212

14.局部优化是对D进行的优化。

[A]表达式 [B]部分代码 

[C]循环体  [D]基本块

15.削减运算强度是对D的一种优化。

[A]表达式 [B]过程  [C]基本块   [D]循环

二填空题

1.词法分析阶段的任务式从左到右扫描  源程序,从而逐个识别单词 。

2.对于文法G[E]:

E→T|E+TT→F|T*FF→P^F|PP→(E)|i,句型T+T*F+i的句柄是 T 。

3.最右推导的逆过程称为最左规约,也称为规范规约。

4.符号表的信息栏中登记了每个名字的有关属性,如符号名、符号的类型、符号的存储类别和符号的作用域及可视性等。

5.一个确定有穷自动机由五部分组成:

有穷状态集、有穷字母表、转换函数、初态和终态集。

6.最常用的两类语法分析方法是 自顶向下 和  自底向上 分析法。

7.单词的三种描述工具:

正规文法、正规式和有穷自动机互相之间具有等价性。

8.在PL/0的目标代码解释执行时,寄存器B总是指向当前执行过程活动记录的 起始地址 ,而寄存器T总是指向  栈顶 。

9.LR(0)分析法的名字中”L”表示自左向右扫描输入符号串,”R”表示最右推导的逆过程,“0”表示向前看的输入符号的个数。

10.两种常用的动态存储分配办法是栈式动态分配和堆式动态分配。

三判断题(认为正确的填“T”,错的填“F”)

【T】1.同心集的合并有可能产生“归约/归约”冲突。

【T】2.一个文法所有句子的集合构成该文法定义的语言。

【F】3.非终结符可以有综合属性,但不能有继承属性。

【T】4.逆波兰表示法表示表达式时无需使用括号。

【F】5.一个确定有穷自动机有且只有一个终态。

【F】6.若过程p第k次被调用,则p的DISPLAY表中就有k+1个元素。

四解答题

1.给定文法G和句型(T+F)*i+T,

G:

E→E+T|TT→T*F|FF→(E)|i

(1)画出句型的语法树;

(2)写出句型的全部短语、简单短语和句柄。

解:

(略)

2.设有文法G:

S→S+S|S*S|i|(S)。

(1)对于输入串i+i*i给出一个最左推导;

(2)该文法是否是二义性文法?

请证明你的结论。

解:

(1)i+i*i的最左推导:

S=>S+S=>i+S=>i+S*S=>i+i*S=>i+i*i

(2)该文法是二义性的。

因为对于句子i+i*i可以画出两棵语法树(语法树略)。

3.给出语言{ambmcn|m≥1,n≥0}的上下文无关文法(2型)。

解:

G:

S→AB|A

A→aAb|ab

B→cB|c

4.给出语言{akbmcn|k,m,n≥1}的正规文法(3型)。

解:

G:

A→aA|aB

B→bB|bC

C→cC|c

5.将文法G改写成等价的正规文法(3型)。

G:

S→dAB

A→aA|a

B→bB|b

解:

G:

S→dA

A→aA|aB

B→bB|b

 

6.设有字母表{a,b}上的正规式R=(ab|a)*。

(1)构造R的相应有限自动机;

解:

0

1

2

3

b

a

a

ε

ε

-

+

(2)构造R的相应确定有限自动机;

解:

(1)所得的非确定有限自动机确定化

Ia

Ib

-+013

123

+123

123

13

+13

123

0

1

2

a

a

b

a

-+

+

+

(3)构造R的相应最小确定有限自动机;

解:

(2)得到的DFA化简,合并状态0和2为状态2:

1

2

a

a

b

-+

+

(4)构造与R等价的正规文法

解:

令状态1和2分别对应非终结符B和A

G:

A→aB|a|ε

B→aB|bA|a|b|ε

可化简为:

G:

A→aB|ε

B→aB|bA|ε

7.已知正规文法G[S]:

S→aS|bA|a

A→aS

(1)构造与之等价的自动机NFAM

(2)将NFAM确定化为DFAM’

I

Ia

Ib

-0

S

SZ

A

+1

SZ

SZ

A

2

A

S

 

8.有穷自动机M接受字母表={0,1}上所有满足下述条件的串:

串中至少包含两个连续的0或两个连续的1。

请写出与M等价的正规式。

解:

(0|1)*(00|11)(0|1)*

 

9.对右图所示的有限自动机

(1)若是确定的,则写出其转换矩阵;若不是,则将其确定化;

(2)最小化。

(注:

确定化和最小化均应给出转换矩阵和图示)。

解:

(1)

符号

状态

a

b

-1

2

3

2

1

4

+3

2

5

+4

1

6

5

5

5

6

6

6

(2)首先将状态按终态和非终态分成两个集合{1,2,5,6}和{3,4}

检查子集{1,2,5,6},由于f(1,a)=2,f(2,a)=1,f(5,a)=4,f(6,a)=3,所以子集{1,2,5,6}可进一步划分为{1,2}和{5,6}

检查子集{3,4},由于f(3,a)=2,f(4,a)=1以及f(3,b)=5,f(4,b)=6,所以不用进一步划分了。

检查子集{1,2},由于f(1,a)=2,f(2,a)=2以及f(1,b)=3,f(2,b)=4,所以不用进一步划分了。

检查子集{5,6},由于f(5,a)=4,f(6,a)=3以及f(5,b)=¢,f(6,b)=¢,所以不需要进一步划分了。

因此最终划分的结果是{1,2}、{3,4}和{5,6},重新命名状态,令{1,2}为1,{3,4}为3和{5,6}为5,则得到化简后的DFA为

符号

状态

a

b

-1

1

3

+3

1

5

5

5

5

 

10.写出在{a,b}上,不以a开头,但以aa结尾的字符串集合的正规式(并构造与之等价的最简DFA)。

解:

依题意,“不以a开头”,则必以b开头,又要“以aa结尾”,故正规式为:

b(a|b)*aa

(构造与之等价的最简DFA,此略)

11.写一个LL

(1)文法G,使其语言是

L(G)={ambnc2n|m>=0,n>0}

并证明文法是LL

(1)。

解:

文法G(S):

SaS|E

EbE’

E’Ecc|cc

Select(SaS)∩Select(SE)=Ф

Select(E’Ecc)∩Select(E’cc)=Ф

故文法为LL

(1)的

12.将文法G改写成等价的LL

(1)文法,并构造预测分析表。

G:

S→S*aT|aT|*aT

T→+aT|+a

(编写递归下降子程序)

解:

消除左递归后的文法G’:

S→aTS’|*aTS’

S’→*aTS’|ε

T→+aT|+a

提取左公因子得文法G’’:

S→aTS’|*aTS’

S’→*aTS’|ε

T→+aT’

T’→T|ε

Select(S→aTS’)={a}

Select(S→*aTS’)={*}

Select(S→aTS’)∩Select(S→*aTS’)=Ф

Select(S’→*aTS’)={*}

Select(S’→ε)=Follow(s’)={#}

Select(S’→*aTS’)∩Select(S’→ε)=Ф

Select(T→+aT’)={+}

Select(T’→T)=First(T)={+}

Select(T’→ε)=Follow(T’)={*,#}

Select(T’→T)∩Select(T’→ε)=Ф

所以该文法是LL

(1)文法。

预测分析表:

*

+

a

#

S

S’Ta,N

TS’T,N

S’

S’Ta,N

ε,P

T

T’a,N

T’

ε,P

T,P

ε,P

a

ε,N

#

OK

(递归下降子程序,略)

13.对文法G[S]:

S→aSb|P

P→bPc|bQc

Q→Qa|a

构造简单优先关系表。

该文法是否是简单优先文法?

解:

简单优先关系矩阵如下:

S

a

b

P

Q

c

S

=

a

=

<>

<

<

>

b

<

<>

=

=<

P

>

=

Q

=

=

c

>

>

由于矩阵中有元素存在多种优先关系,故不是简单优先文法。

14.考虑文法G:

S→AS|b

A→SA|a

(1)构造文法的可归前缀图(活前缀的DFA);

(2)判断文法是否是LR(0)文法,并说明理由。

解:

(1)可归前缀图

(2)因为存在冲突,所以不是LR(0)文法。

15.已知文法G[S]:

S→Uta|Tb

  T→S|Sc|d

U→US|e

(1)试判断G是LR(0),SLR

(1),LALR

(1)还是LR

(1),说明理由。

(2)构造相应的分析表。

解:

(1)首先拓广文法为G',增加产生式S'→S

(0)S'→S 

(1) S→UTa

(2)S→Tb(3)T→S

(4)T→Sc(5)T→d(6)U→US(7)U→e

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

(2)在I1中:

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

在I1中:

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)文法。

构造的SLR

(1)分析表如下:

状态(State)

Action

Goto

 

a  b  c  d  e   #

S U T

0

1

2

3

4

5

6

7

8

9

10

      S5  S4

r3  r3  S6        Acc

      S5  S4

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

1 2 3

.

8 2 7

 

  

16.文法G及其LR分析表如下,请给出对串dada#的分析过程。

G:

S→VdB①

V→e②

V→ε③

B→a④

B→Bda⑤

B→ε⑥

状态

ACTION

GOTO

d

e

a

#

S

B

V

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

 

 

 

解:

对输入串dada#的分析过程

步骤

状态栈

符号栈

剩余输入符号

动作

1

2

3

4

5

6

7

8

9

0

02

024

0245

0246

02467

024678

0246

01

#

#V

#Vd

#Vda

#VdB

#VdBd

#VdBda

#VdB

#S

dada#

dada#

ada#

da#

da#

a#

#

#

#

用V→ε归约

移进

移进

用B→a归约

移进

移进

用B→Bda归约

用S→VdB归约

接受

17.对以下文法,请写出关于配对括号数目ps的属性文法。

文法规则

语义规则

S→(T)

S→i

T→T,S

T→S

解:

h表示配对括号数目

(1)S.h=T.h+1

(2)S.h=0

(3)T.h=T’.h+S.h(4)T.h=S.h

 

18.把下列语句

ifx>0andy>0thenz:

=x+y

elsex:

=x+2

翻译成四元式序列。

解:

19.对传值、传地址和传名3种参数传递方法分别写出下列程序的输出:

voidp(intx,inty,intz){

y*=3;

z+=x;

}

voidmain(){

inta=5,b=2;

p(a*b,a,a);

printf(“%d\n”,a);

}

这些参数传递机制如何实现?

解:

(1)传值5;

(2)传地址25;(3)传名45

(参数传递机制,略)

20.将下面程序划分为基本块,并画出其程序流图。

b:

=1

b:

=2

ifw<=xgotoL2

e:

=b

gotoL2

L1:

gotoL3

L2:

c:

=3

b:

=4

c:

=6

L3:

ify<=zgotoL4

halt

L4:

g:

=g+1

h:

=8

gotoL1

解:

(1)基本块:

(2)程序流图

 

b:

=1

1

4

2

3

7

6

5

b:

=2

ifw<=xgotoL2

(1)

e:

=b

gotoL2

(2)

L1:

gotoL3(3)

L2:

c:

=3

b:

=4

c:

=6(4)

L3:

ify<=zgotoL4(5)

halt(6)

L4:

g:

=g+1

h:

=8

gotoL1(7)

21.对PL/0语言If……ELSE子句填空:

<条件语句>:

:

=IF<条件>THEN<语句>ELSE<语句>

注:

FOR语句和WHILE语言的填空

请在空缺处填空,完成条件语句的编译算法:

switch(SYM){

……

caseIFSYM:

;

CONDITION(SymSetUnion(SymSetNew(THENSYM),FSYS),LEV,TX);

if(SYM==THENSYM)GetSym();

elseError(16);

CX1=CX;GEN(JPC,0,0);

STATEMENT(SymSetUnion(SymSetNew(ELSESYM),FSYS),LEV,TX);

CX2=CX;GEN(JMP,0,0);

;

If()

{GetSym();

STATEMENT(FSYS,LEV,TX);

;

}

break;

……

}

解:

(1)getSym()

(2)Code[CX1].A=CX

(3)SYM==ELSESYM(4)Code[CX2].A=CX

 

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

当前位置:首页 > 高等教育 > 理学

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

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