什么是控制语句?
控制语句是可以改变语句执行流程的语句。例如,If、If-else、Switch-Case、while-do 语句。在编程语言中,布尔表达式用于
改变控制流− 布尔表达式用作语句中的条件表达式,以改变控制流。此类布尔表达式的值隐含在程序中达到的位置。例如,if (E) S,如果到达语句 S,则表达式 E 应该为真。
计算逻辑值− 布尔表达式可以定义真或假值。可以使用带有逻辑运算符的三地址指令并行计算此类布尔表达式,如同算术表达式一样。
布尔表达式的设计用途由其语法上下文决定。例如,if 关键字后面的表达式用于改变控制流,而赋值右侧的表达式可以表示逻辑值。此类语法上下文可以通过多种方式定义。它可以使用多个非终结符、使用继承属性或在解析期间设置标志。它可以生成语法树并为布尔表达式的两种不同用途调用多个过程。
示例1− 为以下代码生成三地址码:
while (a < b) do
If (c < d) then
x = y + z
else
x = y – z.
解答
(1) If a < b goto(3)
(2) goto(11)
(3) If c < d goto(5)
(4) goto(8)
(5) t1 = y + z
(6) x = t1
(7) goto(1)
(8) t2 = y − z
(9) x = t2
(10) goto(1)
示例2− 为以下代码生成三地址码:
while (A < C and B < D) do If A=1 then C = C + 1 else while A≤D do A = A + 2.
解答
(1) If A < C goto(3)
(2) goto(15)
(3) If B < D goto(5)
(4) goto(15)
(5) If A = 1 goto(7)
(6) goto (10)
(7) T1 = C + 1
(8) C = T1
(9) goto (1)
(10) If A ≤ D goto (12)
(11) goto (1)
(12) T2 = A + 2
(13) A = T2
(14) goto (10)
示例3− 为以下代码生成三地址码:
Switch (a) { Case 1− b = c + d break; Case 2− e = f + g break; }
解答
(1) If a = 1 goto(3)
(2) If a = 2 goto (6)
(3) t1 = c + d
(4) b = t1
(5) goto(9)
(6) t2 = f + g
(7) e = t2
(8) goto(9)
示例4− 为以下代码生成三地址码:
while (i<5) { i=i+1; }
解答
(1)if i<5 goto(3)
(2) goto (5)
(3) i = i + 1
(4) goto (1)
示例5− 将以下控制语句转换为三地址码。
If (A < B 𝐎𝐑 C > D) X = X + Y + Z
解答
(1) If A < B goto(4)
(2) If C > D goto(4)
(3) goto(7)
(4) T1 = X + Y
(5) T2 = T1 + Z
(6) X = T2