编译原理10套试卷及答案 下载本文

可以修改高级语言的程序。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)所示。

b

A S

B a S d

d a S d

b a

S b S S a S S S d

(1) (2) B S b

a

图五(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

状态转换图为:

1 1 AB0 C ? ? 1 A,B C C 1 1 C10 2001年编译原理试题

1.(10分)处于/* 和 */之间的串构成注解,注解中间没有*/。画出接受这种

注解的DFA的状态转换图。 2.(10分)为语言

L = {ambn | 0 ? m ? 2n}(即a的个数不超过b的个数的两倍)

写一个LR(1)文法,不准超过6个产生式。(若超过6个产生式,不给分。若所写文法不是LR(1)文法,最多给5分。) 3.(10分)构造下面文法的LL(1)分析表。 D ? TL

T ? int | real L ? id R

R ? , id R | ? 4.(15分)就下面文法 S ? ( L) | a L ? L ? S | S ? 给出一个语法制导定义,它输出配对括号的个数。 ? 给出一个翻译方案,它输出每个a的嵌套深度。 如句子(a, (a, a) ),第一小题的输出是2,第二小题的输出是1 2 2。 5.(10分)Pascal语言for语句的含义见教材第222页习题7.13。请为该语句设计一种合理的中间代码结构。你可以按第215页图7.17的方式或者第219页图7.19的方式写出你的设计,不需要写产生中间代码的语法制导定义。 6.(5分)一个C语言程序如下:

func(i1,i2,i3) long i1,i2,i3; {

long j1,j2,j3;

printf(\ printf(\}

main() {

long i1,i2,i3; func(i1,i2,i3); }

该程序在某种机器的Linux上的运行结果如下:

Addresses of i1,i2,i3 = 27777775460,27777775464,27777775470 Addresses of j1,j2,j3 = 27777775444,27777775440,27777775434

从上面的结果可以看出,func 函数的3个形式参数的地址依次升高,而3个局部变量的地址依次降低。试说明为什么会有这个区别。

7.(15分)一个C语言程序及其在某种机器linux操作系统上的编译结果如下。根据所生成的汇编程序来解释程序中四个变量的作用域、生存期和置初值方式等方面的区别。

static long aa = 10; short bb = 20;

func() {

static long cc = 30; short dd = 40; }

.file \ .version \gcc2_compiled.: .data

.align 4

.type aa,@object .size aa,4 aa:

.long 10 .globl bb .align 2

.type bb,@object .size bb,2 bb:

.value 20 .align 4

.type cc.2,@object .size cc.2,4 cc.2:

.long 30 .text

.align 4 .globl func

.type func,@function func:

pushl ?p

movl %esp,?p subl $4,%esp

movw $40,-2(?p)