procedure B; VAR c: char; Begin …(1)… end; {B} procedure C; VAR t: real; Begin …(2)… end; {C} Begin …… B; C; …… end; {A } Begin { main } … A(d); …
end. 【答案】
运行到(1) 时的运行栈:(静态链) 运行到(2) 时的运行栈:(静态链)
15 c 14 0(形参个数) 15 c 13 5 14 12 返回地址 B 0(形参个数) 13 5 C 11 5 12 返回地址 10 p 11 5 9 k(形参) 10 p 8 1(形参个数) 9 k(形参) 8 1(形参个数) 7 0 A 7 0 A 6 返回地址 6 返回地址 5 0 5 0 4 d 4 d 3 i 3 i 2 0 Tr 2 0 Tr 1 返回地址 1 返回地址 0
0 0 0
6
【答案】
运行到(1) 时的运行栈:(Display表) 运行到(2) 时的运行栈:(Display表)
20 c 20 t 19 13 19 13 18 5 18 5 17 0 17 0 B C 16 0(形参个数) 16 0(形参个数) 15 10(全局display) 15 10(全局display) 14 返回地址 14 返回地址 13 5 13 5 12 p 12 p 11 5 11 5 10 0 10 0 9 k(形参) 9 k(形参) A A 8 1(形参个数) 8 1(形参个数) 7 6 5 4 3 2 1 0
2(全局display) 返回地址 0 d i 0(display) 返回地址 0 主程序Tr 7 6 5 4 3 2 1 0
2(全局display) 返回地址 0 d i 0(display) 返回地址 0 主程序Tr 6. 有如下示意的Pascal源程序,并已知在运行时刻,以过程为单位对程序中的变量进行动态存储分配。当运行主程序而调用过程语句X时,试分别给出以下时刻的运行栈的内容和Display的内容。
(1) 已开始而尚未执行完毕标号为10的语句; (2) 已开始而尚未执行完毕标号为11的语句; program main; VAR a, b, c: integer; procedure X ( i, j: integer); {X} VAR d, e: real; procedure Y; {Y} VAR f, g: real; Begin …… end; {Y} procedure Z( k: integer); {Z} VAR h, i, j: real; Begin …… end; {Z}
7
Begin …… 10: Y; …… 11: Z; …… end; {X} Begin { main } …… X (a, b); …… end. { main } 【答案】 (1) 运行到标号10时,运行栈的内容: (2) 运行到标号11时,运行栈的内容: j 24 g 26 23 f 25 i 22 16 24 h 21 6 23 16 Z Y 20 0 22 6 19 0(形参个数) 21 0 18 12(全局display) 20 k 17 返回地址 19 1(形参个数) 16 6 18 12(全局display) 15 e 17 返回地址 14 d 16 6 13 6 15 e 12 0 14 d X (a, b) 11 j 13 6 X (a, b) 10 i 12 0 9 2(形参个数) 11 j 8 2(全局display) 10 i 7 返回地址 9 2(形参个数) 6 0 8 2(全局display) 5 c 7 返回地址 4 b 6 0 3 a 5 c main 2 0(display) main 4 b 1 返回地址 3 a 0 0 2 0 (display) 1 返回地址
0 0 main → X(a,b) →Y
main → X(a,b) →Y →Z
8
第10章 优化
1. 试把以下程序划分为基本块并作出其程序流图。 【答案】 real C real C A:=0 A:=0 B:=1 B:=1 L1: A:=A+B
if B≧C goto L2
B:=B+1 L1: A:=A+B goto L1 if B≧C goto L2 L2: write A
halt
B:=B+1 L2: write A goto L1 halt
2. 试把以下程序划分为基本块并作出其程序流图。
【答案】
real A, B
F:=1 real A,B C:=A*A F:=1
D:=B*B C:=A*A
if C E:=A*A if C F:=F+1 E:=E+F write E E:=A*A L1: E:=B*B halt F:=F+1 F:=F+2 L1: E:=B*B E:=E+F E:=E+F F:=F+2 write E write E halt if E>100 goto L2 E:=E+F write E if E>100 goto L2 L2: F:=F-1 halt goto L1 halt L2: F:=F-1 9 3. 试对以下基本块B1和B2: B1: A:=B*C B2: B:=3 D:=B/C D:=A+C E:=A+D E:=A*C F:=2*E G:=B*F G:=B*C H:=A+C H:=G*G I:=A*C F:=H*G J:=H+I L:=F K:=B*5 M:=L L:=K+J M:=L 分别应用DAG对它们进行优化,并就以下两种情况分别写出优化后的四元式序列:(1) 假设只有G,L,M在基本块后面还要被引用; (2) 假设只有L在基本块后面还要被引用。 【答案】 B1基本块:(1) G, L, M可用 (2) L可用 (1) G:=B*C (1) G:=B*C (2) H:=G*G (2) H:=G*G (3) L:=H*G (3) L:=H*G (4) M:=L B2基本块:(1) G, L, M可用 (2) L可用 (1) D:=A+C (1) D:=A+C (2) E:=A*C (2) E:=A*C (3) G:=3*F (3) J:=D+E (4) J:=D+E (4) L:=15+J (5) L:=15+J (6) M:=L 10 百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库《编译原理》(陈火旺版)课后作业参考答案ch6-10(2)在线全文阅读。
相关推荐: