6.7 节的练习
6.7.1
使用图 6-43 中的翻译方案翻译下列表达式。给出每个子表达式的 truelist 和 falselist。你可以假设第一条被生成的指令的地址是 100.
- a==b && (c==d || e==f)
- (a==b || c==d) || e==f
- (a==b && c==d) && e==f
解答
-
a==b && (c==d || e==f)
6.7.2
解答
- E3.false = i1
- S2.next = i7
- E4.false = i7
- S1.next = i3
- E2.true = i3
6.7.3
当使用图 6-46 中的翻译方案对图 6-47 进行翻译时,我们为每条语句创建 S.next 列表。一开始是赋值语句 S1, S2, S3,然后逐步处理越来越大的 if 语句,if-else 语句,while 语句和语句块。在图 6-47 中有 5 个这种类型的结构语句:
- S4: while (E3) S1
- S5: if(E4) S2
- S6: 包含 S5 和 S3 的语句块
- S7: if(E2) S4 else S6
- S8: 整个程序
对于这些结构语句,我们可以通过一个规则用其他的 Sj.next 列表以及程序中的表达式的列表 Ek.true 和 Ek.false 构造出 Si.next。给出计算下列 next 列表的规则:
- S4.next
- S5.next
- S6.next
- S7.next
- S8.next
解答
(该题解答不是很肯定)
- S4.next = S3.next
- S5.next = S2.next
- S6.next = S3.next
- S7.next = S3.next
- S8.next = E1.false