教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 学前教育 >

编译原理期末试题(8套含答案+大题集)(10)

来源:网络收集 时间:2025-04-29
导读: 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 .

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) .L1:

leave ret .Lfe1:

.size func,.Lfe1-func .ident \(GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)\ 8.(10分)C语言是一种类型语言,但它不是强类型语言,因为编译时的类型检查不能保证所接受的程序没有运行时的类型错误。例如,编译时的类型检查一般不能保证运行时没有数组越界。请你再举一个这样的例子说明C语言不是强类型

第46页共6页

语言。 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上,哪一个表达式对应的目标代码的执行效率高?为什么?

参考答案 1.

others start 1 / 2 * 2 * others 4 *

/ 5

2.LR(1)文法 LR(1)文法 二义文法 S ? AB | aABb S ? AB S ? AASb | ? A ? aaAb | ? A ? aaAb | ab | ? A ? a | ?

B ? Bb | ? B ? Bb | ? 3. int real id , $ D D?TL D?TL T T?int T?real L L?id R R R ?, id R R ? ?

4. S? ? S print(S.num) S ? (L) S.num := L.num +1 S ? a S.num := 0 L ? L1,S L.num := L1.num + S.num L ? S L.num := S.num S? ? {S.depth := 0} S S ? {L.depth := S.depth +1} (L) S ? a {print(S.depth)} L ? {L1.depth := L.depth} L1, {S.depth := L.depth} S L ? { S.depth := L.depth} S 5. t1 := initial t2 := final if t1 > t2 goto L1 v := t1 L2: stmt

第47页共6页

if v = t2 goto L1 v := v + 1 goto L2 L1: 6.由于实参表达式是反序进入活动记录,而局部变量是顺序在活动记录中分配。 7.aa是静态外部变量,而bb是外部变量,它们都分配在静态数据区(由.data伪指令开始),但是bb由伪指令.globl指明为全局的,用来解决其它文件中对bb的外部引用,而aa只能由本文件引用。cc是静态局部变量,同aa和bb一样,它的生存期是整个程序并分配在静态数据区。由于cc在源程序中的作用域是函数func的体,而在目标文件中,它的作用域至少已是整个文件了,为避免同源文件中外部变量和其它函数的静态局部变量的名字冲突,所以要对它进行改名,成了cc.2。由于cc不是全局的,因此cc.2前面没有伪指令.globl。dd是自动变量,其作用域是函数func的体,其生存期是该函数激活期间,因此它分配在栈区,并且置初值是用运行时的赋值来实现。

8.例如联合体的类型检查一般也不可能在编译时完成,虽然下面例子是可静态判断类型错误的。 union U { int u1; int *u2;} u; int ?p; u.u1 = 10; p = u.u2; ?p = 0;

9. ? 修改源码SA 的代码生成部分,让它产生B机器的代码,称结果程序为SB。 ? 将SB提交给CCA进行编译,得到一个可执行程序。

? 将SB提交给上述可执行程序进行编译,得到所需的编译器CCB。

10.第一个表达式在执行?yz.(x + y) + z) 3时出现参数个数不足的情况,因此有FUNVAL的值进入栈顶,然后发现参数个数不足,又把它做成FANVAL的情况。而第二个表达式执行的是(?yz.(x + y) + z) 3 5,不会出现参数个数不足的情况。因此第二个表达式的执行效率比第一个表达式的高。

《编译原理》期末大题

1. 设有如下文法G(S),试消除其左递归。

G(S):S—>Ac|c A—>Bb|b B—>Sa|a

解:

S→abcS′|bcS′|cS′, S′→abcS′|?

2. 试构造与下面G(S)等价的无左递归的文法。

G(S):S—>Sa|Nb|c N—>Sd|Ne|f

解:S→fN′bS′|cS′, S′→aS′|dN′bS′|?, N′→eN′|? 3. 设有文法G(S):

S—>aBc|bAB

第48页共6页

A—>aAb|b B—>b|ε

①求各产生式的FIRST集,FOLLOW(A)和FOLLOW(B),以及各产生式的SELECT集。 ②构造LL(1)分析表,并分析符号串baabbb是否是。

解:(1)FIRST(aBc)={a}, FIRST(bAB)={b} FIRST(aAb)={a}, A→b: FIRST(A→b)={b}, B→b: FIRST(b) = {b}, FIRST(ε)={ε} FOLLOW(A)={b, #}, FOOLOW(B)={c, #}

SELECT(S→aBc)={a}, SELECT(S→bAB) ={b}, SELECT(A→aAb)={a}, SELECT(A→b)={b}, SELECT(B→b)={b}, SELECT(B→?)={c, #}

因此,所得的LL(1)分析表如表A-4所示。

表A-4 LL(1)分析表 (2)分析符号串baabbb成功,baabbb是该文法的句子,如图A-16所示。

步骤 符号栈 输入串 所用的产生式 1 #S baabbb# S?bAB 2 #BAb baabbb# 3 #BA aabbb# A?aAb 4 #BbAa aabbb# 5 #BbA abbb# A?aAb 6 #BbbAa abbb# 7 #BbbA bbb# A?b 8 #Bbbb 9 #Bbb 10 #Bb 11 #B 12 # bbb# bb# b# # # B?ε 成功

输输入符号 入 a b c # VN S S→aBc S→bAB A A→aAb A→b B B→b B→? B→? 图A-16 识别串baabbb的过程

4. 对下列文法G(S):

S—>D(R) R—>R;P|P P—>S|I D—>i

①计算文法G中每个非终结符的FIRSTVT集和LASTVT集。 ②构造文法G的算符优先关系矩阵。 解:(1)FIRSTVT(S)={(, i},FIRSTVT(D) ={i},FIRSTVT(R)={;, (, i},FIRSTVT(P)={i, (},LASTVT(S)={)},LASTVT(D)={i},LASTVT(R) = {;, ), i},LASTVT(P)={i, )} …… 此处隐藏:1557字,全部文档内容请下载后查看。喜欢就下载吧 ……

编译原理期末试题(8套含答案+大题集)(10).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/593793.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)