- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
2001 年编译原理试题
1.(10 分)处于 /* 和 */ 之间的串构成注解,注解中间没有 */ 。画出接受这种注解的 DFA的状态转换图。
2.(10 分)为语言
L = {a mbn | 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,第二小题的输出是
122。
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(Addresses of i1,i2,i3 = %o,%o,%o\n,i1,i2,i3); printf(Addresses of j1,j2,j3 = %o,%o,%o\n,j1,j2,j3);
}
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 static.c
.version 01.01
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 %ebp
movl %esp,%ebp
subl $4,%esp
movw $40,-2(%ebp)
.L1:
leave
ret
.Lfe1:
.size func,.Lfe1-func
.ident GCC: (GNU) egcs-2.91.66Linux (egcs-1.1.2 release)
8.(10 分)C语言是一种类型语言,但它不是强类型语言,因为编译时的类型检查不能保证所接受的程序没有运行时的类型错误。 例如,编译时的类型检查一般不能保证运行时没有数组越界。 请你再举一个这样的例子说明 C 语言不是强类型语言。
9.(10 分)如果在 A 机器上我们有 C 语言编译器 CCA,也有它的源码 SA(用 C 语言写成)。如何利用它通过尽量少的工作来得到 B 机器的 C 语言编译器 CCB。
10.( 5 分)表达式 ( x.( yz.(x + y) + z) 3) 4 5 和( x.( yz.(x + y) + z) 3 5) 4 有同样的结果。在抽象机 FAM 上,哪一个表达式对应的目标代码的执行效率高?为什么?
2001 年编译原理试题参考答案
1.
others
*
start
/
2
*
2
*
4
/
1
others
5
2. LR(1)文法
AB | aABb
A aaAb |
B Bb |
3. int
D D TL
T T int
原创力文档


文档评论(0)