编译原理期末试题及答案 联系客服

发布时间 : 星期一 文章编译原理期末试题及答案更新完毕开始阅读cc245848767f5acfa1c7cd3c

装 订 线

编译原理试题及答案

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

1.语言是 A

A.句子的集合 B.产生式的集合 C.符号串的集合 D.句型的集合 2.编译程序前三个阶段完成的工作是 C A.词法分析、语法分析和代码优化 B.代码生成、代码优化和词法分析

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

3.一个句型中称为句柄的是该句型的最左 D A.非终结符号 B.短语 C.句子 D.直接短语 4.下推自动机识别的语言是 C A.0型语言 B.1型语言 C.2型语言 D.3型语言

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

A. 字符 B.单词 C.句子 D.句型 6.对应Chomsky四种文法的四种语言之间的关系是 B A.L0?L1?L2?L3 B.L3?L2?L1?L0 C.L3=L2?L1?L0 D.L0?L1?L2=L3 7.词法分析的任务是 A

A.识别单词 B.分析句子的含义 C.识别句子 D.生成目标代码 8.常用的中间代码形式不含 D

A.三元式 B.四元式 C.逆波兰式 D.语法树 9. 代码优化的目的是 C

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

C.节省时间和空间 D.把编译程序进行等价交换 10.代码生成阶段的主要任务是 C A.把高级语言翻译成汇编语言 B.把高级语言翻译成机器语言

C.把中间代码变换成依赖具体机器的目标代码 D.把汇编语言翻译成机器语言

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

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

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

3.通常把编译过程分为分析前端与综合后端两大阶段。词法、语法和语义分析是对源程序的(分析),中间代码生成、代码优化与目标代码的生成则是对源程序的(综合)。

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

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

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

1.词法分析

词法分析的主要任务是从左向右扫描每行源程序的符号,按照词法规则 从构成源程序的字符串中识别出一个个具有独立意义的最小语法单位, 并转换成统一的内部表示(token),送给语法分析程序。 2.LL(1)文法

若文法的任何两个产生式A ? ? | ?都满足下面两个条件: (1)FIRST(? ) ? FIRST(? ) = ?;

(2)若? ?* ? ,那么FIRST(? ) ? FOLLOW( A ) = ?。

我们把满足这两个条件的文法叫做LL(1)文法,其中的第一个L代表从左 向右扫描输入,第二个L表示产生最左推导,1代表在决定分析器的每步 动作时向前看一个输入符号。除了没有公共左因子外,LL(1)文法还有一 些明显的性质,它不是二义的,也不含左递归。

3.语法树

句子的树结构表示法称为语法树(语法分析树或语法推导树)。

给定文法G=(VN,VT,P,S),对于G的任何句型都能构造与之关联的 语法树。这棵树具有下列特征: (1)根节点的标记是开始符号S。

(2)每个节点的标记都是V中的一个符号。

(3)若一棵子树的根节点为A,且其所有直接子孙的标记从左向右的排列 次序为A1A2…AR,那么A?A1A2…AR一定是P中的一条产生式。 (4)若一标记为A的节点至少有一个除它以外的子孙,则A?VN。

(5)若树的所有叶节点上的标记从左到右排列为字符串w,则w是文法G 的句型;若w中仅含终结符号,则w为文法G所产生的句子。 4.LR(0)分析器

所谓LR(0)分析,是指从左至右扫描和自底向上的语法分析,且在分析的 每一步,只须根据分析栈当前已移进和归约出的全部文法符号,并至多再 向前查看0个输入符号,就能确定相对于某一产生式左部符号的句柄是否 已在分析栈的顶部形成,从而也就可以确定当前所应采取的分析动作 (是

移进还是按某一产生式进行归约等)。

5.语言和文法

文法就是语言结构的定义和描述,是有穷非空的产生式集合。 文法G定义为四元组的形式: G=(VN,VT,P,S)

其中:VN 是非空有穷集合,称为非终结符号集合;VT 是非空有穷集合, 称为终结符号集合;P是产生式的集合(非空);S是开始符号(或识别符号)。 这里,VN∩VT=?,S?VN。V=VN∪VT,称为文法G的字母表,它是出现 文法产生式中的一切符号的集合。

文法G所描述的语言用L(G)表示,它由文法G所产生的全部句子组成,即

L(G)={x| S?*x,其中S为文法开始符号,且x?VT? }

简单的说,文法描述的语言是该文法一切句子的集合。

四、简答题(共4小题,每小题5分,共20分)

1.编译程序和高级语言有什么区别?

用汇编语言或高级语言编写的程序,必须先送入计算机,经过转换成用机器 语言表示的目标程序(这个过程即编译),才能由计算机执行。执行转换过程 的程序叫编译程序。汇编程序是指没有编译过的汇编语言源文件。编译程序转 换过的叫目标程序,也就是机器语言。

编译程序的工作情况有三种:汇编型、解释型和编译型。汇编型编译程序用来 将汇编语言编写的程序,按照一一对应的关系,转换成用机器语言表示的程序。 解释型编译程序将高级语言程序的一个语句,先解释成为一组机器语言的指令, 然后立即执行,执行完了,取下一组语句解释和执行,如此继续到完成一个程序 止。用解释型编译程序,执行速度很慢,但可以进行人和计算机的\对话\,随时 可以修改高级语言的程序。BASIC语言就是解释型高级语言。编译型编译程序将 级语言编写的程序,一次就会部翻译成机器语言表示的程序,而且过程进行很快, 在过程中,不能进行人机对话修改。FORTRAN语言就是编译型高级语言。 2.编译程序的工作分为那几个阶段?

词法分析、语法分析和语义分析是对源程序进行的分析(称为编译程序的前端), 而中间代码生成、代码优化和代码生成三个阶段合称为对源程序进行综合(称为 编译程序的后端),它们从源程序的中间表示建立起和源程序等价的目标程序。 3.简述自下而上的分析方法。

所谓自下而上分析法就是从输入串开始,逐步进行“归约”,直至归约到文法的

开始符号;或者说从语法树的末端开始,步步向上“归约”,直到根节点。 4.简述代码优化的目的和意义。

代码优化是尽量生成“好”的代码的编译阶段。也就是要对程序代码进行 一种等价变换,在保证变换前后代码执行结果相同的前提下,尽量使目 标程序运行时所需要的时间短,同时所占用的存储空间少。

五、综合应用题(共3小题,每小题10分,共30分)

1.证明下述文法G:

S?aSbS|aS|d

是二义性文法。 解:

一个文法,如果存在某个句子有不只一棵语法分析树与之对应,那么称这个 文法是二义性文法。

句子aadbd有两棵语法树。如下图:

由此可知,S?aSbS|aS|d定义的文法是二义性文法。

2.对于文法G[S]:S?AB,A?Aa|bB,B?a|Sb求句型baSb的全部短语、直接短语和句柄?

句型baSb的语法树如图五(2)所示。

S

A B

b b B S

a a S d

d a S d

b a S b S S a S S S d

(1) (2)

图五(2) 句型baSb的的语法树

解:

baSb为句型baSb的相对于S的短语,ba为句型baSb的相对于A的短语,Sb为句型baSb的相对于B的短语,且为直接短语,a为句型baSb的相对于B的短语,且为直接短语和句柄。

3.设有非确定的有自限动机NFA M=({A,B,C},{0,1},?,{A},{C}),其中: ? (A,0)={C} ? (A,1)={A,B} ? (B,1)={C} ? (C,1)={C}。请画出状态转换距阵和状态转换图。 解:

状态转换距阵为:

? A B C

状态转换图为:

0 C ? ? 1 A,B C C 1 1 AB1 1 C10