编译原理(九)

令 a 表示一个 2*3 的整型数组,b 表示一个 3*4 的整型数组. 假定一个整数的宽度为 4. 试使用课本图 6.22 的翻译模式,翻译赋值语句 x = a[i][j] + b[i][j]. 提示:参考课本例 6.12

t1 = i * 12;
t2 = j * 4;
t3 = t1 + t2;
t4 = a[t3];
t5 = i * 16;
t6 = j * 4;
t7 = t5 + t6;
t8 = b[t7];
x = t4 + t8;

龙书 Exercise 6.6.1 a)

在图 6-36 的语法制导定义中添加处理下列控制流构造的原则。

一个 repeat 语句:S -> repeat S1 while B

S1.next = newlabel()
B.ture = newlabel()
B.false = S.next
S.code = label(B.ture) || S1.code || label(S1.next) || B.code

一个 for 循环语句:S -> for (S1; B; S2) S3

S1.next = newlabel()
B.ture = newlabel()
B.false = S.next
S2.next = S1.next
S3.next = newlabel()
S.code = S1.code || label(S1.next) || B.code || label(B.ture) || S3.code || label(S3.next) || S2.code || gen('goto', S1.next)