编译原理第第7和第8章作业

2018-12-19 21:01

第七章作业

练习7.2.5:在一个通过引用传递参数的语言中,有一个函数f(x,y)完成下面的计算:x=x+1;y=y+2;return x+y;

如果将a赋值为3,然后调用f(a,a),那么返回值是什么? 解:执行语句x=x+1,则a=a+1=4, 再执行语句y=y+2,则a=a+2=5, 最后返回x+y,则返回a+a=9。

练习7.2.6:C语言函数f的定义如下: int f(int x,*py,**ppz) {

**ppz+=1;*py+=2;x+=3;return x+*py+**ppz; }

变量a是一个指向b的指针;变量b是一个指向c的指针,而c是一个当前值为4的整数变量。如果我们调用f(c,b,a),返回值是什么? 解:先执行语句**ppz+=1,则c=*b=**a=5, 再执行语句*py+=2,则*b=*b+2=7,c=*b=**a=7,

接着执行语句x+=3,则x=4,x=x+3=7,而c=*b=**a=7, 最后执行语句return x+*py+**ppz,则返回7+7+7=21。

练习7.3.2:假使我们使用显示表来实现下图中的函数。请给出对fib0(1)的第一次调用即将返回时的显示表。同时指明那时在栈中的各个活动记录中保存的显示表条目。

计算Fibonacci数的嵌套函数

解:

main() d[1] d[2] d[3] d[4] fib0(4) 保存的d[2] fib1(4) 保存的d[3] fib2(4) 保存的d[4] fib1(3) 保存的d[3] fib0(2) 保存的d[2] fib1(2) 保存的d[3] fib0(1) 保存的d[2] 第八章练习

练习8.2.1:假设所有的变量都存放在内存中,为下面的三地址语句生成代码: 5)两个语句的序列 x=b*c y=a+x

解:生成的代码如下: LD R1, b LD R2, c

MUL R1, R1, R2 ST x, R1 LD R2, a

ADD R1, R2, R1 ST y, R1

练习8.2.6:确定下列指令序列的代价。 1)LD R0,y LD R1,z ADD R0,R0,R1 ST x,R0 解:2+2+1+2=7 2)LD R0,i MUL R0,R0,8 LD R1,a(R0) ST b,R1

解:2+2+2+2=8 3)LD R0,c LD R1,i MUL R1,R1,8 ST a(R1),R0 解:2+2+2+2=8 4)LD R0,p LD R1,0(R0) ST x,R1 解:2+2+2=6 5)LD R0,p LD R1,x ST 0(R0),R1 解:2+2+2=6 6)LD R0,x LD R1,y SUB R0,R0,R1 BLTZ *R3,R0 解:2+2+1+1=6


编译原理第第7和第8章作业.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:公开发行证券公司信息披露的编报规则第12号--公开发行证券的法律

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: