什麼是控制語句?
控制語句是可以改變語句執行流程的語句。例如,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