资源描述:
《编译原理期末考试卷.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、2001年编译原理试题1.(10分)处于/*和*/之间的串构成注解,注解中间没有*/。画出接受这种注解的DFA的状态转换图。2.(10分)为语言L={ambn
2、0£m£2n}(即a的个数不超过b的个数的两倍)写一个LR(1)文法,不准超过6个产生式。(若超过6个产生式,不给分。若所写文法不是LR(1)文法,最多给5分。)3.(10分)构造下面文法的LL(1)分析表。D®TLT®int
3、realL®idRR®,idR
4、e4.(15分)就下面文法S®(L)
5、aL®L,S
6、S·给出一个语法制导定义,它输出配对括号的个数。·给出一个翻译方案,它输出每个a的嵌套深度。如句子(a,(a,a)),第一小题
7、的输出是2,第二小题的输出是122。5.(10分)Pascal语言for语句的含义见教材第222页习题7.13。请为该语句设计一种合理的中间代码结构。你可以按第215页图7.17的方式或者第219页图7.19的方式写出你的设计,不需要写产生中间代码的语法制导定义。6.(5分)一个C语言程序如下:func(i1,i2,i3)longi1,i2,i3;{longj1,j2,j3;printf("Addressesofi1,i2,i3=%o,%o,%o",&i1,&i2,&i3);printf("Addressesofj1,j2,j3=%o,%o,%o",&j1,&j2,&j3);}mai
8、n(){longi1,i2,i3;func(i1,i2,i3);}该程序在某种机器的Linux上的运行结果如下:Addressesofi1,i2,i3=27777775460,27777775464,27777775470Addressesofj1,j2,j3=27777775444,27777775440,27777775434从上面的结果可以看出,func函数的3个形式参数的地址依次升高,而3个局部变量的地址依次降低。试说明为什么会有这个区别。7.(15分)一个C语言程序及其在某种机器linux操作系统上的编译结果如下。根据所生成的汇编程序来解释程序中四个变量的作用域、生存期和置初值方式
9、等方面的区别。staticlongaa=10;shortbb=20;func(){staticlongcc=30;shortdd=40;}.file"static.c".version"01.01"gcc2_compiled.:.data.align4.typeaa,@object.sizeaa,4aa:.long10.globlbb.align2.typebb,@object.sizebb,2bb:.value20.align4.typecc.2,@object.sizecc.2,4cc.2:.long30.text.align4.globlfunc.typefunc,@functionf
10、unc:pushl%ebpmovl%esp,%ebpsubl$4,%espmovw$40,-2(%ebp).L1:leaveret.Lfe1:.sizefunc,.Lfe1-func.ident"GCC:(GNU)egcs-2.91.6619990314/Linux(egcs-1.1.2release)"8.(10分)C语言是一种类型语言,但它不是强类型语言,因为编译时的类型检查不能保证所接受的程序没有运行时的类型错误。例如,编译时的类型检查一般不能保证运行时没有数组越界。请你再举一个这样的例子说明C语言不是强类型语言。9.(10分)如果在A机器上我们有C语言编译器CCA,也有它的源码SA(
11、用C语言写成)。如何利用它通过尽量少的工作来得到B机器的C语言编译器CCB。10.(5分)表达式(lx.(lyz.(x+y)+z)3)45和(lx.(lyz.(x+y)+z)35)4有同样的结果。在抽象机FAM上,哪一个表达式对应的目标代码的执行效率高?为什么?2003年编译原理试题1.(20分)写出字母表S={a,b}上语言L={w
12、w中a的个数是偶数}的正规式,并画出接受该语言的最简DFA。2.(15分)考虑下面的表达式文法,它包括数组访问、加和赋值:E®E[E]
13、E+E
14、E=E
15、(E)
16、id该文法是二义的。请写一个接受同样语言的LR(1)文法,其优先级从高到低依次是数组访问、加和赋值,
17、并且加运算是左结合,赋值是右结合。3.(10分)下面是产生字母表S={0,1,2}上数字串的一个文法:S®DSD
18、2D®0
19、1写一个语法制导定义,它打印一个句子是否为回文数(一个数字串,从左向右读和从右向左读都一样时,称它为回文数)。4.(10分)教材上7.2.1节的翻译方案P®{offset:=0}DD®D;DD®id:T{enter(id.name,T.type,offset);offset:=offse