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

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

来源:网络收集 时间:2026-08-25
导读: (2) 写出每个产生式对应的语义动作。 答:(1). 适合语法制导翻译的文法(3分) G(S): R? do U?R S(1) While S?U E (2). (6分) R? do { R.QUAD:=NXQ } U?R S(1) While { U.QUAD:=R.QUAD; BACKPATCH(S.CHAIN, NXQ) } S?

(2) 写出每个产生式对应的语义动作。 答:(1). 适合语法制导翻译的文法(3分) G(S): R? do

U?R S(1) While S?U E (2). (6分) R? do

{ R.QUAD:=NXQ }

U?R S(1) While { U.QUAD:=R.QUAD;

BACKPATCH(S.CHAIN, NXQ) }

S?U E

{ BACKPATCH(E.TC, U.QUAD); S.CHAIN:=E.FC }

答案二:

(1) S ? do M1 S(1) While M2 E

M ?ε (3分)

(2) M ?ε { M.QUAD := NXQ } (6分)

S ? do M1 S(1) While M2 E {

BACKPATCH(S(1).CHAIN, M2.QUAD); BACKPATCH(E.TC, M1.QUAD);

S.CHAIN:=E. FC

七、(8分)将语句

if (A0) then while C>0 do C:=C+D 翻译成四元式。(8分) 答:

100 (j<, A, X, 102) 101 (j, -, -, 109) 102 (j>, B, 0, 104)

第41页共6页

}

103 (j, -, -, 109) 104 (j>, C, 0, 106) 105 (j, -, -, 109) 106 (+, C, D, T1) 107 (:=, T1, -, C) 108 (j, -, -, 104) 109

(控制结构3分,其他5分)

八、(10分) 设有基本块如下:

T1:=S+R T2:= 3 T3:= 12/T2 T4:=S/R A:=T1-T4 T5:=S+R B:=T5

T6:=T5*T3 B:=T6

(1)画出DAG图;

(2)设A,B是出基本块后的活跃变量,请给出优化后的四元式序列。

答:(1) DAG如右图:(6分) n7 A n8 T6,B

_ *

n3 T1,T5, B n6 T4

/ +

n2 n1 n4 T2 n5 T3

(2) 四元式序列:(4分) T1:=S+R T4:=S/R A:=T1-T4 B:=T1*4

(1) S ? BB (2) B ? aB (3) B? b

S R 3 4 九、(9分) 设已构造出文法G(S):

第42页共6页

的LR分析表如下

状态 0 1 2 3 4 5 6 7 8 9 ACTION a s3 s6 s3 r3 s6 r2 b s4 s7 s4 r3 s7 r2 # acc r1 r3 r2 S 1 GOTO B 2 5 8 9

假定输入串为abab,请给出LR分析过程(即按照步骤给出状态,符号,输入串的变化过程)。 答:

步骤 状态 符号 输入串 0 0 # abab# 1 03 #a bab# 2 034 #ab ab# 3 038 #aB ab# 4 02 #B ab# 5 026 #Ba b# 6 0267 #Bab # 7 0269 #BaB # 8 025 #BB # 9 01 #S # acc

《编译原理》期末试题(八)

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

2.为语言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 | ?

第43页共6页

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() {

第44页共6页

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语言不是强类型

第45页共6页

…… 此处隐藏:929字,全部文档内容请下载后查看。喜欢就下载吧 ……
编译原理期末试题(8套含答案+大题集)(13).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/606345.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)