布林表示式的翻譯

2021-08-29 11:45:05 字數 1244 閱讀 8411

程式語言中的布林表示式有兩個作用。一是計算邏輯值,更多的情況是二,用做改變控制流語句中的條件表示式,如在if-then,if-then-else,或是while-do語句中那樣。

布林表示式是由布林算符and,or和not施於布林變數或關係表示式而成。即布林表示式的形式為e1 rop e2,其中e1和e2都是算術表示式,rop是關係符,如〈=<,=,〉=,≠等等。有的語言,如pl/1,允許更通用的表示式,其中,布林算符,算術算符和關係算符可以施於任何型別的表示式,並不區別布林值和算術值,只不過在需要時執行強制變換。為簡單起見,只考慮如下文法生成的布林表示式。

e→e and e|e or e| not e|id rop id|true|false並且按通常習慣,約定布林算符的優先順序(從高到低)為not 、and、or,並且and和or服從左結合。

布林表示式的翻譯方法

通常,計算布林表示式的值有兩種辦法,第一種辦法,如同計算算術表示式一樣,步步計算出各部分的真假值,最後計算出整個表示式的值。例如,用數值1表示true,用0表示false。那麼布林表示式1 or(not 0 and 0)or 0的計算過程是:

1 or(not 0 and 0)or 0

=1 or(1 and 0)or 0

=1 or 0 or 0

=1 or 0

=1另一種計算方法是採取某種優化措施,只計算部分表示式,例如要計算a or b,若計算出a的值為1,那麼b的值就無需再計算了,因為不管b的值為何結果,a or b的值都為1。

上述兩種方法對於不包含布林函式呼叫的表示式是沒有什麼差別的。但是,假若乙個布林式中會有布林函式呼叫,並且這種函式呼叫引起***(如有對全域性量的賦值)時,這兩種方法未必等價。採用哪種方法取決於程式語言的語義,有些語言規定,函式過程呼叫應不影響這個呼叫處環境的計值,或者說,函式過程的工作不許產生***,在這種規定下,可以任選其中一種。

若按第一種辦法計算布林表示式。布林表示式a or b and not c翻譯成的四元式序列為:

(1) t1∶=not c

(2) t2∶=b and t1

(3) t3∶=a or t2

對於像a<b這樣的關係表示式,可看成等價的條件語句if a<b then 1 

else 0,它翻譯成的四元式序列為:

(1) if a<b goto (4)

(2) t∶=0

(3) goto (5)

(4) t∶=1

(5) …

其中用臨時變數t存放布林表示式a<b的值,(5)為後續的四元式序號。

翻譯布林表示式

翻譯布林表示式time limit 1000 ms memory limit 65536 kib problem description 大家都學過了布林表示式的翻譯,其中有乙個拉鍊 回填技術,這次我們就練習這個技術。input 多組輸入,每組輸入為一行字串,例如 a b or c d and e ...

翻譯布林表示式

time limit 1000 ms memory limit 65536 kib submit statistic problem description 大家都學過了布林表示式的翻譯,其中有乙個拉鍊 回填技術,這次我們就練習這個技術。input 多組輸入,首先輸入乙個整數t,代表資料組數。接下來...

翻譯布林表示式

problem description 大家都學過了布林表示式的翻譯,其中有乙個拉鍊 回填技術,這次我們就練習這個技術。input 多組輸入,首先輸入乙個整數t,代表資料組數。接下來每組輸入為一行字串,例如 a b or c d and e f 每個符號都用空格間隔。output 假鏈跳到 真鏈跳到...