编译原理上海交通大学期末考试.docx

上传人:b****6 文档编号:7733481 上传时间:2023-01-26 格式:DOCX 页数:25 大小:28.87KB
下载 相关 举报
编译原理上海交通大学期末考试.docx_第1页
第1页 / 共25页
编译原理上海交通大学期末考试.docx_第2页
第2页 / 共25页
编译原理上海交通大学期末考试.docx_第3页
第3页 / 共25页
编译原理上海交通大学期末考试.docx_第4页
第4页 / 共25页
编译原理上海交通大学期末考试.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

编译原理上海交通大学期末考试.docx

《编译原理上海交通大学期末考试.docx》由会员分享,可在线阅读,更多相关《编译原理上海交通大学期末考试.docx(25页珍藏版)》请在冰豆网上搜索。

编译原理上海交通大学期末考试.docx

编译原理上海交通大学期末考试

 

上海交通大学期末考试

 

编译原理试题及答案

一、对于文法G[S]:

S→1A|0B|εA→0S|1AAB→1S|0BB

⑴(3分)请写出三个关于G[S]的句子;

⑵(4分)符号串11A0S是否为G[S]的句型?

试证明你的结论。

⑶(3分)试画出001B关于G[S]的语法树。

二、请构造一个文法,使其产生这样的表达式E:

表达式中只含有双目运算符+、*,

且+的优先级高于*,+采用右结合,*采用左结合,运算对象只有标识符i,可以

用括号改变运算符优先级。

要求给出该文法的形式化描述。

三、设有语言L={α|α∈{0,1}+,且α不以0开头,但以00结尾}。

⑴试写出描述L的正规表达式;

⑵构造识别L的DFA(要求给出详细过程,并画出构造过程中的NDFA、DFA的

状态转换图,以及DFA的形式化描述)。

四、给定文法G[S]:

S→AB

A→aB|bS|c

B→AS|d

⑴(6分)请给出每一个产生式右部的First集;

⑵(3分)请给出每一个非终结符号的Follow集;

⑶(8分)请构造该文法的LL

(1)分析表;

⑷(8分)什么是LL

(1)文法?

该文法是LL

(1)文法吗?

为什么?

五、给定文法G[S]:

S→SaA|a

A→AbS|b

⑴请构造该文法的以LR(0)项目集为状态的识别规范句型活前缀的DFA。

⑵请构造该文法的LR(0)分析表。

⑶什么是LR(0)文法?

该文法是LR(0)文法吗?

为什么?

⑷什么是SLR

(1)文法?

该文法是SLR

(1)文法吗?

为什么?

六、给定下列语句:

ifa+b>c

thenx:

=a*(b-c)+(b*c-d)/e

⑴写出其等价的逆波兰表示;

⑵写出其等价的四元式序列。

七、已知下列C语言程序:

int*f()

{inta=100;return&a;

}

main()

{int*i=f();

chara[]=“compiler”;printf(“theresultis%d\n”,*i);

}

 

1

 

程序运行结果为:

theresultis26157,

请解释为什么程序运行的结果不是期望的“theresultis100”?

 

1.1三个0和1数量相等的串

 

1.2S=>1A=>11AA=>11A0S

 

1.3

 

第二题构造文法如下:

 

G[E]=({+,*,(,),i},{E,F,T},P,E),其中P为:

 

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

 

第三题

(1)正规表达式:

1(0|1)*00

 

(2)第一步:

将正规表达式转换为NDFA

 

第二步:

将NDFA

确定化为DFA

造表法确定化(

3

分)确定化后

DFAM

的状态转换表(2

分)

状态输入

I0

I1

t

0

1

[S]

[A,D,B]

q0

q1

[A,D,B]

[D,B,C]

[D,B]

重新命名

q1

q2

q3

[D,B,C]

[D,B,C,Z]

[D,B]

q2

q4

q3

 

2

 

[D,B]

[D,B,C]

[D,B]

q3

q2

q3

[D,B,C,Z]

[D,B,C,Z]

[D,B]

q4

q4

q3

DFA的状态转换图(3

分)

 

第三步:

给出DFA的形式化描述

 

DFAM=({q0,q1,q2,q3,q4},{0,1},t,q0,{q4})

 

t的定义见M的状态转换表。

 

第四题

 

(1)First(AB)={a,b,c}First(aB)={a}

 

First(bS)={b}

 

First(c)={c}

 

First(AS)={a,b,c}

 

First(d)={d}

 

(2)Follow(S)={#,a,b,c,d}Follow(A)={a,b,c,d}

 

Follow(B)={#,a,b,c,d}

 

(3)LL

(1)分析表(8分)

 

VN

VT

a

b

c

d

#

S

S?

AB

S?

AB

S?

AB

A

A?

aB

A?

bS

A?

C

B

B?

AS

B?

AS

B?

AS

B?

d

 

3

 

(4)对于文法G的每一个非终结符U的产生式U?

α1|α2|⋯|αn,

 

如果SELECT(U?

αi)?

SELECT(U?

αj)=?

(i≠j,i,j=1,2,⋯,n),

 

则文法G是一个LL

(1)文法。

该文法是LL

(1)文法。

 

因为SELECT(A?

aB)?

SELECT(A?

bS)?

SELECT(A?

C)=?

 

SELECT(B?

AS)?

SELECT(B?

d)=?

 

第五题⑴拓广文法1分

 

G[S′]:

S→′S⑴

 

S→SaA⑵S→a⑶A→AbS⑷A→b⑸

 

该文法的以LR(0)项目集为状态的识别规范句型活前缀的DFA:

 

⑵该文法的

LR(0)

分析表:

状态

ACTION

GOTO

a

b

#

S

A

0

S2

1

1

S3

acc

2

r3

r3

r3

3

S5

4

4

r2

r2/S6

r2

5

r5

r5

r5

6

S2

7

7

r4/S3

r4

r4

⑶LR(0)

文法:

该文法的以

LR(0)项目集为状态的识别规范句型活前缀的

DFA中没有冲突状态。

该文法不是

LR(0)

文法

 

4

 

因为存在冲突状态:

I4和I7

 

⑷SLR

(1)文法:

该文法的以LR(0)项目集为状态的识别规范句型活前缀的DFA中有冲突状态,冲突

可用FOLLOW集解决。

 

该文法不是SLR

(1)文法。

 

因为FOLLOW(S)={a,b,#},所以无法解决冲突

 

第六题

 

(1)

(1)ab+c>(23)jumpf

 

(8)xabc-*bc*d-e/+:

=

 

(23)...

 

(2)

 

第七题

 

C语言采用栈式存储分配方法作为其运行环境;

 

f()返回的是指向其活动记录某一位置的指针;

 

f()返回后,其活动记录被释放,并且,其对应的存储空间被数组a占用,

 

再次引用该指针时,其结果由于对回收的活动记录所占用的内存空间的再分配,其所指的值

 

发生了改变。

 

释放在前,引用在后的现象称:

DanglingReference。

 

5

 

<编译原理>历年试题及答案

 

一.(每项选择2分,共20分)选择题

1.将编译程序分成若干个“遍”是为了___。

a.提高程序的执行效率

b.使程序的结构更加清晰

c.利用有限的机器内存并提高机器的执行效率

d.利用有限的机器内存但降低了机器的执行效率

2.构造编译程序应掌握____。

a.源程序b.目标语言

c.编译方法d.以上三项都是

3.变量应当_。

a.持有左值b.持有右值

c.既持有左值又持有右值d.既不持有左值也不持有右值

4.编译程序绝大多数时间花在____上。

a.出错处理b.词法分析

c.目标代码生成d.管理表格

5.词法分析器的输出结果是____。

a.单词的种别编码b.单词在符号表中的位置

c.单词的种别编码和自身值d.单词自身值

6.正规式MI和M2等价是指____。

a.MI和M2的状态数相等b.Ml和M2的有向弧条数相等。

C.M1和M2所识别的语言集相等d.Ml和M2状态数和有向弧条数相等

7.中间代码生成时所依据的是—。

a.语法规则b.词法规则c.语义规则d.等价变换规则

8.后缀式ab+cd+/可用表达式___来表示。

a.a+b/c+db.(a+b)/(c+d)c.a+b/(c+d)d.a+b+c/d

9.程序所需的数据空间在程序运行前就可确定,称为______管理技术。

a.动态存储b.栈式存储c.静态存储d.堆式存储

10.堆式动态分配申请和释放存储空间遵守________原则。

a.先请先放b.先请后放c.后请先放d.任意

 

二(每小题10分,共80分)简答题

1.画出编译程序的总体结构图,简述各部分的主要功能。

2.已知文法G[E]:

E→ET+|TT→TF*|FF→F^|a

试证:

FF^^*是文法的句型,指出该句型的短语、简单短语和句柄.

 

3.为正规式(a|b)*a(a|b)构造一个确定的有限自动机。

4.设文法G(S):

S→(L)|aS|a

L→L,S|S

(1)消除左递归和回溯;

 

6

 

(2)计算每个非终结符的FIRST和FOLLOW;

(3)构造预测分析表。

5.已知文法

A->aAd|aAb|ε

判断该文法是否SLR

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

6.构造算符文法G[H]的算符优先关系(含#)。

G[H]:

H→H;M|M

M→d|aHb

7.已构造出文法G(S)

(1)SBB

(2)BaB

(3)Bb

1)。

给出DFA图

2).给出LR分析表

3).假定输入串为abaab,请给出LR分析过程(即状态,符号,输入串的变化过程)。

8.将下面的语句翻译成四元式序列:

whileA

ifA=1thenC:

=C+l

elsewhileA≤Ddo

A:

=A+2;

9.对下面的流图,

(1)求出流图中各结点N的必经结点集D(n),

(2)求出流图中的回边,

(3)求出流图中的循环。

 

参考答案

一.单项选择题

1.

将编译程序分成若干个“遍”是为了使编译程序的结构更加清晰,故选

b。

2.

.构造编译程序应掌握源程序、目标语言及编译方法等三方面的知识,故选

d。

3.

对编译而言,变量既持有左值又持有右值,故选

c。

4.

编译程序打交道最多的就是各种表格,因此选

d。

5.

词法分析器输出的结果是单词的种别编码和自身值,选

C。

6.

正规式M1和M2所识别的语言集相等,故选

C。

7.选c。

8.选b。

9.选C

10.

堆式动态分配申请和释放存储空间不一定遵守先请后放和后请先放的原则,

故选d

二.简答题

1.

【解答】

编译程序的总体结构图如图

1.2所示。

词法分析器:

输入源程序,进行词法分析,输出单词符号。

 

7

 

语法分析器:

在词法分析的基础上,根据语言的语法规则(文法规则)把单词符号串分

解成各类语法单位,并判断输入串是否构成语法上正确的“程序”。

中间代码生成器:

按照语义规则把语法分析器归约(或推导)出的语法单位翻译成一定形式的中间代码,比如说四元式。

优化:

对中间代码进行优化处理。

目标代码生成器:

把中间代码翻译成目标语言程序。

表格管理模块保存一系列的表格,登记源程序的各类信息和编译各阶段的进展情况。

译程序各阶段所产生的中间结果都记录在表格中,所需信息多数都需从表格中获取,整个编

译过程都在不断地和表格打交道。

出错处理程序对出现在源程序中的错误进行处理。

此外,编译的各阶段都可能出现错误,

出错处理程序对发现的错误都及时进行处理。

2.【解答】

该句型对应的语法树如下:

该句型相对于E的短语有FF^^*;相对于T的短语有FF^^*,F;

相对于F的短语有F^;F^^;简单短语有F;F^;句柄为F.

3.【解答】

最简DFA如图2.66所示。

 

4.

【解答】

(1)

S→(L)|aS’

S’→S|ε

L→SL’

L’→SL’|ε

评分细则:

消除左递归

2分,提公共因子2分。

(2)FIRST和FOLLOW

FIRST)S)={(,a}

FOLLOW(S)={#,,,)}

FIRST(S’)={,a,ε}

FOLLOW(S’)={#,,,)}

FIRST(L)={(,a}

FOLLOW(L)={)}

FIRST(L’)={,,ε}

FOLLOW(L’〕={)}

5.

【解答】

(1)拓广文法

(0)S->A

(1)A->aAd

(2)A->aAb(3)A->ε

(2)构造识别活前缀的DFA

 

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

对于状态

I0:

FOLLOW(A)∩{a}=Ф

对于状态

I1:

FOLLOW(A)∩{a}=Ф

因为,在DFA中无冲突的现象,所以该文法是

SLR

(1)文法。

(3)SLR

(1)分析表

状态

ACTION

GOTO

a

B

d

#

A

0

S2

r3

r3

r3

1

1

acc

2

S2

r3

r3

r3

3

 

8

 

3

S5

S4

4

r1

r1

r1

5

r2

r2

r2

 

(4)串ab#的分析过程

步骤

状态栈

符号栈

当前字符

剩余字符串

动作

1

0

#

a

b#

移进

2

02

#a

b

#

归约A->ε

3

023

#aA

b

#

移进

4

0235

#aAb

#

归约A->aAb

5

01

#A

#

接受

 

6.【解答】

由M→d和M→a⋯得:

FIRSTVT(M)={d,a};

由H-H;⋯得:

FIRSTVT(H)={;}

由H→M得:

FIRSTVT(M)cFIRSTVT(H),即FIRSTVT(H)={;,d,a}

由M→d和M→⋯b得:

LASTVT(M)={d,b};

由H---,;m得:

LASTVT(H)={;};

由H→M得:

LASTVT(M)cLASTVT(H),即LASTVT(H)={;,d,b}

对文法开始符H,有#H#存在,即有#=#,##,也即#<;,##,b>#。

对形如P→⋯ab⋯,或P→⋯aQb⋯,有a=b,由M→a|b得:

a=b;

对形如P→⋯aR⋯,而b∈FIRSTVT(R),有a

有a>b。

由H→⋯;M得:

由M→aH⋯得:

a

a<;,a

由H→H;’’?

得:

LASTVT(H)>;,即:

;>;,d>;,b>;

由M→⋯Hb得:

LASTVT(H)>b,即:

;>b,d>b,b>b

由此得到算符优先关系表,见表3.5。

 

7.【解答】

(1)LR分析表如下:

(2)分析表

 

状态

ACTION

GOTO

a

b

#

S

B

0

s3

s4

1

2

1

acc

2

S3

S4

5

3

s3

s4

6

4

r3

r3

5

R1

R1

r1

6

R2

R2

R2

 

9

 

(3)句子abaab的分析过程表:

句子abaab的分析过程

步骤

状态

符号栈

输入串

所得产生式

0

#0

#

abaad#

1

#03

#a

baad#

2

#034

#ab

aab#

B→b

3

#036

#aB

aab#

B→aB

4

#02

#B

aab#

5

#023

#Ba

ab#

6

#0233

#Baa

b#

7

#02334

#Baab

#

8

#02336

#BaaB

#

9

#0236

#BaB

ad#

10

#025

#BB

ad#

11

#01

#S

d#

12

#

#

d#

13识别成功

 

8.

【解答】

该语句的四元式序列如下(其中

E1、E2和E3分别对应:

A

系运算符优先级高):

100

(j<,A,C,102)

101(j,_,_,113)

/*E1

为F*/

102

(j<,B,D,104)

/*El

为T*/

103

(j,_,_,113)

/*El为F*/

104

(j=,A,1,106)

/*Ez为T*/

105

(j,_,_,108)

/*EZ为F*/

106

(+,C,1,C)

/*C:

=C+1*/

107

(j,_,_,112)

/*跳过else后的语句*/

108

(j≤,A,D,110)

/*E3为T*/

109

(j,_,_,112)

/*E3为F*/

110

(+,A,2,A)

/*A:

=A+2*/

111

(j,_,_,108)

/*转回内层while语句开始处*/

112(j,_,_,100)

/*转回外层while语句开始处*/

113

9.

【解答】

(1)流图中各结点N的必经结点集D(n),

D(l)={1},D

(2)={1,2},D(3)={1,2,3},D(4)={1,2,3,4},D(5)={1,2,5},

D(6)={1,2,5,6}

(2)求出流图中的回边,

5->2,4->3

(3)求出流图中的循环:

回边5->2对应的循环:

2、5、3、4;

回边4->3对应的循环:

3、4

 

10

 

参考答案

 

一、单项选择题(共10小题,每小题2分,共20分)

1.语言是

A.句子的集合B.产生式的集合

C.符号串的集合D.句型的集合

2.编译程序前三个阶段完成的工作是

A.词法分析、语法分析和代码优化

装B.代码生成、代码优化和词法分析

C.词法分析、语法分析、语义分析和中间代码生成

订D.词法分析、语法分析和代码优化

3.一个句型中称为句柄的是该句型的最左

A.非终结符号B.短语

C.句子D.直接短语

线

4.下推自动机识别的语言是

A.0型语言

B.1型语言

C.2型语言

D.3型语言

5.扫描器所完成的任务是从字符串形式的源程序中识别出一个个具有独立含义的最小语法单位即

A.字符B.单词C.句子D.句型

6.对应Chomsky四种文法的四种语言之间的关系是

A.L0L1L2L3B.L3L2L1L0

C.L3=L2L1L0D.L0L1L2=L3

7.词法分析的任务是

A.识别单词B.分析句子的含义

C.识别句子D.生成目标代码

8.常用的中间代码形式不含

A.三元式B.四元式C.逆波兰式D.语法树

9.代码优化的目的是

A.节省时间B.节省空间

C.节省时间和空间D.把编译程序进行等价交换

10.代码生成阶段的主要任务是

A.把高级语言翻译成汇编语言

 

11

 

B.把高级语言翻译成机器语言

C.把中间代码变换成依赖具体机器的目标代码

D.把汇编语言翻译成机器语言

 

二、填空题(本大题共5小题,每小题2分,共10分)

1.编译程序首先要识别出源程序中每个(单词),然后再分析每个(句子)并翻译其意义。

2.编译器常用的语法分析方法有(自底向上)和(自顶向下)两种。

3.通常把编译过程分为分析前端与综合后端两大阶段。

词法、语法和语义分析是对源程序

的(分析),中间代码生成、代码优化与目标代码的生成则是对源程序的(综合)。

4.程序设计语言的发展带来了日渐多变的运行时存储管理方案,主要分为两大类,即(静态

存储分配)方案和(动态存储分配)方案。

5.对编译程序而言,输入数据是(源程序),输出结果是(目标程序)。

 

三、名词解释题(共5小题,每小题4分,共20分)

1.词法分析

词法分析的主要任务是从左向右扫描每行源程序的符号,按照词法规则

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

当前位置:首页 > 人文社科 > 哲学历史

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

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