搜索
您的当前位置:首页正文

编译原理与技术模拟试题三

来源:星星旅游
模拟试题三

一、填空(10分)

1.1 编译程序的工作过程可划分为 、语法分析、 、中间代码生成、代码优化、

等阶段,类型检查工作一般在 阶段进行。 1.2 SLR(1)中L的含义是 。

1.3 常用的存储分配策略有静态存储分配和动态存储分配,其中,动态存储分配策略包括

分配和 分配。

1.4 用LR方法实现语法分析时,典型的操作有 、 、接受和报错。

1.5 已知数组M[0..5, 1..10]以行为主序存放,如果每个元素占2个存储单元,且起始地址为a,则元素M[2,3]的地址是 。

二、单选题(20分)

2.1识别上下文无关语言的自动机是 。 A. 下推自动机 B. NFA

C. DFA

D. 图灵机

2.2 给定文法A→bA|ca,为该文法句子的是 。 A. bb

B. bca

C. bcab

D. cab

2.3 一个句型中的最左 称为该句型的句柄。 A. 短语

B. 直接短语

C. 非终结符号 D. 终结符号

2.4 已知文法G[S]:S→A1 A→A1|S0|0。与G等价的正规式是 。 A. 0(0|1)*1

B. 1*|0*1

C. 0(1|10)*1

D. 1(10|01)*0

2.5从编译程序的语法分析角度看,源程序是句子的集合, 可以较好地反映句子的结构。

A. 线性表 B. 树 C. 完全图 D. 堆栈 2.6词法分析的输出由 两部分组成。 A. 字符串和正规式 C. 文法和正规式

B. 记号和自动机 D. 记号的种类和属性

2.7 一个文法产生的 的集合称为该文法产生的语 A. 句子

B. 短语 C. 非终结符 D. 终结符

2.8 程序设计语言一般可分为低级语言和高级语言,低级语言指的是与机器硬件构造密切相关的语言。用低级语言编写程序的特点是 。 A.程序的执行效率低,编写效率低,可读性强 B.程序的执行效率低,编写效率高,可读性差 C.程序的执行效率高,编写效率低,可读性强 D.程序的执行效率高,编写效率低,可读性差

2.9 表达式采用逆波兰式表示时可以不用括号,而且可以用基于 的求值过程进行计算。与逆波兰式ab+cd+*对应的中缀表达式是 。

A. 栈 B. 队列 C. 符号表 D. 散列表 A. a+b+c*d B. (a+b)* c+d C. (a+b)* (c+d) D. a+b*c+d

三、简答题(30分)

3.1 (6分)请分别写出传值调用和引用调用时,下述代码的输出结果。

program main(input,output)

procedure f(a,b)

begin

a := b - a; b := a * b + 1;

end; begin

x := 2; y := 6; f(y,x); print(x,y); end.

3.2 (8分)请简要说明进行自上而下的语法分析时,文法中为什么不能有左递归和公共左因子。

3.3 (10分)请计算下面文法G中各非终结符的FIRST和FOLLOW集合。该文法是LL(1)文法吗?为什么? G:E→E* T | T

T→T - F | F F→(E) | id

3.4(6分)设某程序执行到某一时刻时,控制栈中的内容如下所示(其中M是主程序,P、Q、R、S均是过程)。

(a) 给出所有在生存期的活动的调用关系(提示:若A调用B,则记为A→B); (b) 试根据访问链中的内容画出主程序和过程的嵌套关系树。

S的活动记录S的活动记录控制链Q的活动记录R的活动记录P的活动记录M的活动记录访问链四、综合题(40分)

4.1(10分)设有正规式r=1(0|1)0,试给出: (a)(4分)识别该正规集的NFA;

*

(b)(6分)识别该正规集的DFA(要有计算过程);

4.2(20分)设有上下文无关无法G[E]及其语法制导翻译如下(注:G中终结符id仅由单

个英文字母组成,如a, b等):

E→E*T | T T→T+F | F F→(E) | id

11

{E.place=newtemp; emit(*, E.place, T.place, E.place;} {E.place=T.place;}

{T.place=newtemp; emit(+, T.place, F.place, T.place;} {T.place=F.place;} {F.place=E.place;} {F.place=id.name;}

1

1

(a)(5分)画出句子a+(b+c)*d的分析树;

(b)(3分)写出当a=1、b=2、c=3、d=4时的计算结果;(*表示算术乘、+表示算术加) (c)(9分)将文法G简化为:E→E*T|T,T→T+F|F,F→id,给出其识别活前缀的DFA。 (d)(3分)该文法是SLR(1)文法吗?为什么? 4.3(10分)阅读以下程序代码

if (y > 0 or x > y)

while (x > y) do x = x - y else y = 0

(a)(4分)请画出其代码结构图(程序流程图); (b)(6分)给出其三地址码序列。

模拟试题三参考答案

一、填空(10分)

1.1 编译程序的工作过程可划分为 词法分析 、语法分析、 语义分析 、中间代码生成、

代码优化、 目标代码生成 等阶段,类型检查工作一般在 语义分析 阶段进行。 1.2 SLR(1)中L的含义是 从左至右扫描输入序列 。

1.3 常用的存储分配策略有静态存储分配和动态存储分配,其中,动态存储分配策略包括

栈式 分配和 堆式 分配。

1.4 用LR方法实现语法分析时,典型的操作有 移进 、 归约 、接受和报错。 1.5 已知数组M[0..5, 1..10]以行为主序存放,如果每个元素占2个存储单元,且起始地址为a,则元素M[2,3]的地址是 a+44 。

二、单选题(20分)

2.1识别上下文无关语言的自动机是 A 。 A. 下推自动机 B. NFA

C. DFA

D. 图灵机

2.2 给定文法A→bA|ca,为该文法句子的是 B 。 A. bb

B. bca

C. bcab

D. cab

2.3 一个句型中的最左 B 称为该句型的句柄。 A. 短语

B. 直接短语

C. 非终结符号 D. 终结符号

2.4 已知文法G[S]:S→A1 A→A1|S0|0。与G等价的正规式是 C 。 A. 0(0|1)*1

B. 1*|0*1

C. 0(1|10)*1

D. 1(10|01)*0

2.5从编译程序的语法分析角度看,源程序是句子的集合, B 可以较好地反映句子的结构。

A. 线性表 B. 树 C. 完全图 D. 堆栈 2.6词法分析的输出由 D 两部分组成。 A. 字符串和正规式 C. 文法和正规式

B. 记号和自动机 D. 记号的种类和属性

2.7 一个文法产生的 A 的集合称为该文法产生的语 A. 句子

B. 短语 C. 非终结符 D. 终结符

2.8 程序设计语言一般可分为低级语言和高级语言,低级语言指的是与机器硬件构造密切相关的语言。用低级语言编写程序的特点是 D 。 A.程序的执行效率低,编写效率低,可读性强 B.程序的执行效率低,编写效率高,可读性差 C.程序的执行效率高,编写效率低,可读性强 D.程序的执行效率高,编写效率低,可读性差

2.9 表达式采用逆波兰式表示时可以不用括号,而且可以用基于 A 的求值过程进行计算。与逆波兰式ab+cd+*对应的中缀表达式是 C 。

A. 栈 B. 队列 C. 符号表 D. 散列表 A. a+b+c*d B. (a+b)* c+d C. (a+b)* (c+d) D. a+b*c+d

三、简答题(30分)

3.1 (6分)请分别写出传值调用和引用调用时,下述代码的输出结果。

program main(input,output)

procedure f(a,b)

begin

a := b - a; b := a * b + 1;

end; begin

x := 2; y := 6; f(y,x); print(x,y);

end.

解:传值调用: 2,6 引用调用: -7,-4

3.2 (8分)请简要说明进行自上而下的语法分析时,文法中为什么不能有左递归和公共左因子。

解:若有左递归,则分析可能先入死循环。若有公共左因子,则分析过程可能需要回溯,从而降低分析效率。

3.3 (10分)请计算下面文法G中各非终结符的FIRST和FOLLOW集合。该文法是LL(1)文法吗?为什么?

G:E→E* T | T T→T - F | F F→(E) | id 解:FIRST(E) = FIRST(T) = FIRST(F) = {(, id}

FOLLOW(E) = {#,*,)} FOLLOW(T) = {#,*,),-} FOLLOW(F) = {#,*,),-}

该文法不是LL(1)文法,因为FIRST(E* T)与FIRST(T)交集不空,或文法中有左递归。 3.4(6分)设某程序执行到某一时刻时,控制栈中的内容如下所示(其中M是主程序,P、Q、R、S均是过程)。

(a) 给出所有在生存期的活动的调用关系(提示:若A调用B,则记为A→B); (b) 试根据访问链中的内容画出主程序和过程的嵌套关系树。

S的活动记录S的活动记录控制链Q的活动记录R的活动记录P的活动记录M的活动记录访问链

解:(a)调用关系: M→P→R→Q→S→S (b)嵌套关系树:

MPRQS

四、综合题(40分)

4.1(10分)设有正规式r=1(0|1)0,试给出: (a)(4分)识别该正规集的NFA;

(b)(6分)识别该正规集的DFA(要有计算过程); 解:(a)NFA

01*

11203(b) {1} {2} {2,3} {2,3} {2,3} 1 {2} {2} {2} 00 1112013

4.2(20分)设有上下文无关无法G[E]及其语法制导翻译如下(注:G中终结符id仅由单个英文字母组成,如a, b等):

E→E*T {E.place=newtemp; emit(*, E.place, T.place, E.place;}

| T {E.place=T.place;} 11

T→T+F {T.place=newtemp; emit(+, T.place, F.place, T.place;} | F {T.place=F.place;} F→(E) {F.place=E.place;} | id {F.place=id.name;}

(a)(5分)画出句子a+(b+c)*d的分析树;

(b)(3分)写出当a=1、b=2、c=3、d=4时的计算结果;(*表示算术乘、+表示算术加) (c)(9分)将文法G简化为:E→E*T|T,T→T+F|F,F→id,给出其识别活前缀的DFA。 (d)(3分)该文法是SLR(1)文法吗?为什么? 解:(a)

EETTF(aTTFb+FcE)+F*TFd11

(b) 1+(2+3)*4=1+5*4=24 (c)拓广文法,加S->E

I4I1I0S->.EE->.E*TE->.TT->.T+FT->.FF->.iS->E.E->E.*TE->E*.TT->.T+FT->.FF->.iI6E->E*T.T->T.+F*TF+T->F.iI7ETFI2E->T.T->T.+F+T->T+.FF->.iI5T->F.I3iFiF->i.T->T+F.I8I9(d) 是SLR(1)。因为冲突项为:I1,I2,I6 对于I1: *  Follow(S)

对于I2: +  Follow(E)={#,),i, *} 对于I6: +  Follow(E)={#,),i, *}

4.3(10分)阅读以下程序代码

if (y > 0 or x > y)

while (x > y) do x = x - y else y = 0

(a)(4分)请画出其代码结构图(程序流程图); (b)(6分)给出其三地址码序列。 解:(a)(4分)

x > 0 ?

falsex > y ?truefalsey = 0truefalsex > y ?truex = x - y(b) (5分)

101 if y > 0 goto 105 102 goto 103

103 if x > y goto 105 104 goto 110 105 if x > y goto 106 goto 111 107 t1 = x – y 108 x = t1 109 goto 105 110 y = 0 111

因篇幅问题不能全部显示,请点此查看更多更全内容

Top