什麼是布林表示式?


布林表示 **真** 或 **假**。它也可以用 **1 或 0** 表示。

布林表示式是指返回真或假的表示式。布林表示式可以透過兩種方式表示:

  • 條件表示式

For example, If a > b{
    cout<<"a is greater than b";
}

這裡 a > b 是一個條件表示式,可以為真或假。

  • 邏輯表示式

這些表示式包含邏輯運算子,即 OR、AND、NOT 應用於運算元。

例如:

  • 𝐄 𝐎𝐑 𝐄 → 如果任何一個表示式為真,則返回真。
  • 𝐄 𝐀𝐍𝐃 𝐄 → 如果兩個表示式都為真,則返回真。
  • 𝐍𝐎𝐓 𝐄 → 如果表示式 𝐄 為假,則返回真;如果 𝐄 為真,則返回假。


優先順序方面,NOT 優先順序最高,然後是 AND,最後是 OR 優先順序最低。

布林表示式的翻譯

考慮以下語法

𝐄 → 𝐄 𝐎𝐑 𝐄                                     𝐄 → 𝐓𝐑𝐔𝐄

𝐄 → 𝐄 𝐀𝐍𝐃 𝐄                                  𝐄 → 𝐢𝐝𝟏𝐫𝐞𝐥𝐨𝐩 𝐢𝐝𝟐

𝐄 → 𝐍𝐎𝐓 𝐄                                     𝐄 → (𝐄)

𝐄 → 𝐅𝐀𝐋𝐒𝐄

布林表示式的語法制導翻譯

產生式語義規則
E → E(1)𝐎𝐑 E(2){
E. PLACE = newtemp( ); GEN(E. PLACE = E(1). PLACE 𝐎𝐑 E(2). PLACE)
}
E → E(1)𝐀𝐍𝐃 E(2){
E. PLACE = newtemp( ); GEN(E. PLACE = E(1). PLACE 𝐀𝐍𝐃 E(2). PLACE)
}
E → 𝐍𝐎𝐓 E(1){
E. PLACE = newtemp( ); GEN(E. PLACE = 𝐍𝐎𝐓 E(1). PLACE)
}
E → (E(1)){
E. PLACE = E(1). PLACE
}
E → id1𝐫𝐞𝐥𝐨𝐩 id2{
E. PLACE = newtemp( ); GEN(if id1. PLACE 𝐫𝐞𝐥𝐨𝐩 id2. PLACE goto nextquad + 3); GEN(E. PLACE = 0); GEN(goto nextquad + 2); GEN(E. PLACE = 1)
}
E → TRUE{
E. PLACE = newtemp( ); GEN(E. PLACE = 1)
}
E → FALSE{
E. PLACE = newtemp( ); GEN(E. PLACE = 0)
}

𝐧𝐞𝐰𝐭𝐞𝐦𝐩( ) 將建立一個新的臨時變數。

𝐄. 𝐏𝐋𝐀𝐂𝐄 將表示儲存表示式值的名稱。

𝐏𝐫𝐨𝐜𝐞𝐝𝐮𝐫𝐞 𝐆𝐄𝐍 (𝐬𝐭𝐚𝐭𝐞𝐦𝐞𝐧𝐭) 將為特定語句生成三地址程式碼,並將語句中出現的運算子和運算元插入四元組。

**'nexquad'** 是下一個三地址程式碼語句(四元組陣列)的索引。

將 newtemp( ) 替換為 E. PLACE 將重新整理 E. PLACE 的值。

**示例 1**:將以下表達式轉換為三地址程式碼序列。

(a) X AND Y OR C

(b) X OR Y AND NOT C

解決方案

  • 𝐗 𝐀𝐍𝐃 𝐘 𝐎𝐑 𝐂

T1 = X AND Y

T2 = T1 OR C

  • 𝐗 𝐎𝐑 𝐘 𝐀𝐍𝐃 𝐍𝐎𝐓 𝐂

T1 = NOT C

T2 = Y AND T1

T3 = X OR T2

∴ NOT 優先順序最高,然後是 AND,最後是 OR 優先順序最低。

**示例 2**:為以下語句編寫三地址程式碼

If (A < B OR X > Y)

A = B + C

解決方案

(1) If A < B goto(4)

(2) If X > Y goto(4)

(3) goto(6)

(4) T = B + C

(5) A = T

**示例 3**:為 a > b 𝐀𝐍𝐃 c < d 𝐀𝐍𝐃 e < f 編寫三地址程式碼。

解決方案

(1) If a > b goto(4)

(2) t1 = 0

(3) goto(5)

(4) t1 = 1

(5) If c < d goto(8)

(6) t2 = 0

(7) goto(9)

(8) t2 = 1

(9) If e < f goto(12)

(10) t3 = 0

(11) goto(13)

(12) t3 = 1

(13) t4 = t1 𝐀𝐍𝐃 t2

(14) t5 = t4 𝐀𝐍𝐃 t3

更新於: 2021年11月5日

5K+ 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告