admin 管理员组文章数量: 1086019
2025年1月1日发(作者:react副作用需要清除吗)
第6章 属性文法和语法制导翻译
7. 下列文法由开始符号S产生一个二进制数,令综合属性val给出该数的值:
试设计求的属性文法,其中,已知B的综合属性c, 给出由B产生的二进位的结果值。例如,
输入时,=,其中第一个二进位的值是4,最后一个二进位的值是。
【答案】
产生式
S→L
1
. L
2
S→L
语义规则
{ := + *2}
{ := }
{ :=*2+;
L→L
1
B
L. length:= +1 }
{ :=;
L→B
L. length:= 1 }
B→0
B→1
{ := 0 }
{ :=1 }
-
S→∣L
L→LB∣B
11. 设下列文法生成变量的类型说明:
L→ id L
L→, id L∣:T
(1) 构造一下翻译模式,把每个标识符的类型存入符号表;参考例。
【答案】
产生式
L→ id L
1
L→, id L
1
语义规则
{ := + *2}
{ := }
-
{ :=*2+;
L→ :T
L. length:= +1 }
{ :=;
T→ integer
L. length:= 1 }
T→ real { := 0 }
第7章 语义分析和中间代码产生
1. 给出下面表达式的逆波兰表示(后缀式):
【答案】
原式
(1) a*(-b+c)
(2) a+b*(c+d/e)
(3) –a+b*(-c+d)
(4) not A or not (C or not D)
(5) (A and B) or (not C or D)
ab-c+*
abcde/+*+
a-bc-d+*+
A not C D not or not or
A B and C not D or or
后缀式
(6) (A or B) and (C or not D and A B or C D not E and or and
E)
(7) if (x+y)*z=0
then (a+b)↑c
else a↑b↑c
if xy+z*0=
then ab+c↑
else ab↑c↑
3. 请将表达式-(a+b)*(c+d)-(a+b+c)分别表示成三元式、间接三元式和四元式序列。
【答案】
三元式
(1
)
+ a b
(2- (1) /
四元式
间接三元式
)
(1+ a b T1
(1+ a b
(3+ c d
)
)
)
(2- T1 / T2
(2- (1) /
(4* (2) (3)
)
)
)
(3+ c d T3
(3+ c d
(5+ a b
)
)
)
(4* T2 T3 T4
接码
(4* (2) (3)
(6+ (5) c
)
表:
)
)
(5+ a b T5
(1)
(5+ (1) c
(7- (4) (6)
)
→(2)
)
)
(6+ T5 c T6
→(3)
(6- (4) (5)
→(4)→(1)→(5)→(6)
)
)
(7- T4 T6 T7
4. 按节所说的办法,写出下
)
面赋值句A:=B*(-C+D) 的
自下而上语法制导翻译过程。给出所产生的三地址代
码。
【答案】
四元式
(1uminus c / T1
)
(2+ T1 D T2
)
(3* B T2 T3
5. 按照7.3.2节所给的翻译模式,把下列赋值句翻
)
译为三地址代码:
(4:= T3 / A
A[i, j]:=B [i, j] + C[A [k, l]] + d
)
间
[ i+j]
【答案】
中间代码
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
T
1
:=i*N
A2
T
1
:=T
1
+j
T
2
:=A-C
A
T
3
:=W
A
*T
1
T
4
:=i* N
B2
T
4
:=T
4
+j
T
5
:=B-C
B
T
6
:=W
B
*T
4
T
7
:=T
5
[T
6
]
(13)
(14)
(15)
(16)
(17)
(18)
(19)
(20)
(21)
(22)
(23)
(24)
中间代码
T
10
:=W
A
*T
8
T
11
:=T
9
[T
10
]
T
12
:=C-C
c
T
13
:=W
c
*T
11
T
14
:=T
12
[T
13
]
T
15
:=T
7
+ T
14
T
16
:=i+j
T
17
:=d-C
d
T
18
:=W
d
*T
16
T
19
:=T
17
[T
18
]
T
20
:=T
15
+ T
19
T
2
[T
3
]:=T
20
分别写出布尔式A or ( B and
not (C or D) )的四元式序列。
【答案】
用作数值计算时产生的四元式: 用作条件控制时产生的四元式:
四元式
(1
)
(2
)
(3
)
and B T
2
T
3
not T
1
/ T
2
or C D T
1
6. 按7.4.1和节的翻译办法,
(12) T
9
:=A-C
A
(10) T
8
:=k* N
A2
(11) T
8
:=T
8
+l
(4
)
or A T
3
T
4
(1)
四元式 四元式
( jnz, A, -, (5) ( jnz, C, -, (4))
0 )
其中:右图中(1)和(8)为真出口,
(4)(5)(7)为假出口。
(2)
(3)
( j, -, -, (3)) (6) ( j, -, -, (7))
(jnz, B, -, (7) ( jnz, D, -, (5))
(5))
(4) ( j, -, -, 0 ) (8) ( j, -, -, (1))
7. 用7.5.1节的办法,把下面的语句
翻译成四元式序列:
While A if A=1 then C:=C+1 else while A≦D do A:=A+2; 【答案】 四元式 (1) (j<, A, C, (9) (3)) (2) ( j, -, -, 0) (10) 四元式 ( j, -, -, (1)) ( j≦, A, D,(12)) (3) (j<, B, D, (11) (5)) ( j, -, -, (1)) (4) (5) ( j, -, -, 0 ) (12) (j=, A, 1, (13) (7)) (+, A, 2, T 2 ) (:=,T 2 , -, A ) (6) ( j, -, -, (14) (10) ) ( j, -, -, (10)) (7) (+, C, 1, T 1 ) (15) ( j, -, -, (1)) (8) (:=,T 1 , -, C ) 第9章 运行时存储空间组织 4. 下面是一个Pascal程序: program PP (input, output); VAR k: integer; FUNCTION F (n: integer): integer; begin if n<=0 then F:=1 else F:=n*F(n-1); end; 当第二次( 递归地) 进入F后,DISPLAY的内容是什么当时整个运行栈的内容是什么 【答案】 第1次进入F后,运行栈的内容: 第2次进入F后,运行栈的内容: 10 9 8 7 6 5 4 3 2 1 0 4 0 F n(形参) 1(形参个数) 2(全局display) 返回地址 0 k 0(display) 返回地址 0 主程序P 15 14 13 12 11 10 9 8 7 6 5 n(形参) 1(形参个数) 9(全局display) 返回地址 4 4 0 n(形参) 1(形参个数) 2(全局display) 返回地址 主程序P 第1次F 17 16 11 0 第2次F 4 0 3 k 2 0(display) 1 返回地址 0 0 第2次进入F后,Display内容为: 11 0 5. 对如下的Pascal程序,画出程序执行到(1)和(2)点时的运行栈。 program output); Tr (input, VAR i: integer; d: procedure B; VAR c: char; Begin …(1)… end; {B} procedure C; VAR t: real; Begin …(2)… end; {C} Begin …… B; 【答案】 运行到(1) 时的运行栈:(静态链) 运行到(2) 时的运行栈:(静态链) 15 c 14 0(形参个数) B 13 5 12 返回地址 11 5 10 p A 9 k(形参) 8 1(形参个数) 7 0 Tr 6 返回地址 5 0 4 d 3 i 【答案】 2 0 运行到(1) 1 返回地址 (Display 0 0 到(2) 时的 (Display 20 c 19 13 18 5 B 15 c 14 0(形参个数) C 13 5 12 返回地址 11 5 A 10 p 9 k(形参) 8 1(形参个数) 7 0 Tr 6 返回地址 5 0 4 d 3 i 2 0 时的运行栈: 1 返回地址 表) 运行 0 0 运行栈: 表) 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0 0(形参个数) 10(全局display) 返回地址 5 p 5 0 k(形参) 1(形参个数) 2(全局display) 返回地址 0 d i 20 19 18 17 16 15 14 13 12 11 10 9 t 13 5 0 0(形参个数) 10(全局display) 返回地址 5 p 5 0 k(形参) 1(形参个数) 2(全局display) 返回地址 0 d i 0(display) 返回地址 0 句; 意的Pascal 知在运行时 单位对程序 行动态存储 主程序而调 行栈的内容 主程序 A C 6. 有如下示 源程序,并已 8 7 6 5 4 3 2 1 0 0(display) 刻,以过程为 返回地址 中的变量进 0 分配。当运行 用过程语句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 …… 10: Y; …… 11: Z; …… end; {X} 【答案】 (1) 运行到标号10时,运行栈的内容: (2) 运行到标号11时,运行栈的内容: 26 j 25 i Z 24 h 23 16 22 6 21 0 20 k 19 1(形参个数) X (a, b) 18 12(全局display) 17 返回地址 16 6 main 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 g f 16 6 0 0(形参个数) 12(全局display) 返回地址 6 e d 6 0 j i 2(形参个数) 2(全局display) 返回地址 0 c b a 0(display) 返回地址 0 15 e 14 d 13 6 Y 12 0 11 j 10 i 9 2(形参个数) 8 2(全局display) X (a, b) 7 返回地址 main main →Y main → X(a,b) →Y →Z 6 5 4 3 2 1 0 0 c b a 0 (display) 返回地址 0 → X(a,b) 第10章 优化 1. 试把以下程序划分为基本块并作出其程序流图。 real C 【答案】 A:=0 real C B:=1 A:=0 L1: A:=A+B if B≧C goto L2 B:=B+1 L1: A:=A+B 2. 试把以下程序划分为基本块并作出其程序流图。 【答案】 real A, B C:=A*A F:=1 D:=B*B C:=A*A if C E:=A*A E:=A*A L1: E:=B*B F:=F+1 F:=F+1 F:=F+2 E:=E+F E:=E+F E:=E+F write E halt L2: F:=F-1 L1: E:=B*B 3. 试对以下基本块B1和B2: B1: A:=B*C B2: B:=3 D:=A+C E:=A*C G:=B*F H:=A+C F:=1 real A,B hal D:=B/C E:=A+D F:=2*E G:=B*C 分别应用DAG对它们进行优化,并就以下两种情况分别写出优化后的四元式序列: (1) 假设只有G,L,M在基本块后面还要被引用; (2) 假设只有L在基本块后面还要被引用。 【答案】 B1基本块:(1) G, L, M可用 (2) L可用 (1) G:=B*C (2) H:=G*G (3) L:=H*G (1) G:=B*C (2) H:=G*G B2基本块:(1) G, L, M可用 (2) L可用 (1) D:=A+C (2) E:=A*C (3) G:=3*F (4) J:=D+E (1) D:=A+C (2) E:=A*C (3) J:=D+E
版权声明:本文标题:《编译原理》(陈火旺版)课后作业参考答案ch6-10 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1735805148a1689885.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论