【文章內(nèi)容簡(jiǎn)介】
if then; if then else和while do等語(yǔ)句中的布爾表達(dá)式 E的翻譯。 這三種語(yǔ)句的語(yǔ)法為: S→if E then S1 |if E then S1 else S2| while E do S1 控制語(yǔ)句的代碼結(jié)構(gòu) (a) if E then S1 E的代碼 . 。 S1的代碼 Jump out S2的代碼 out (b)|if E then S1 else S2 E 的代碼 . 。 S1 的代碼 真 假 begin E的代碼 . 。 S1的代碼 Jump begin (c)while E do S1 翻譯的基本思路:對(duì)于 E為 a rop b,形成代碼為: If a rop b goto goto 對(duì)于 E為 E1 or E2 的形式: E1為真,則 E為真,即 E的真出口為 E1的真 出口。 E1為假,計(jì)算 E2,即 E1的假出口應(yīng) 為 E2的第一個(gè)四元式標(biāo)號(hào), E2的真、假出 口與 E的真、假出口一樣。 我們使用 E. true和 E. false分別表示整個(gè)表達(dá)式 a< b or c< d and ef的真、假出口,而 E. true和 E. false的值并不能在產(chǎn)生四元式的同時(shí)就知道。為了看清這一點(diǎn),我們把該表達(dá)式放在條件語(yǔ)句中考慮,如語(yǔ)句 If ( a< b or c< d and ef )then S1 else S2 的四元式序列見(jiàn)下頁(yè): ( p) goto ( q) ( p+1) (關(guān)于 S2的四元式) … ( q) If ( a< b or c< d and ef )then S1 else S2 的四元式序列為 ( 1) if a< b goto ( 7) /*( 7)是整個(gè)布爾表達(dá)式的真出口 */ ( 2) goto ( 3) ( 3) if c< d goto ( 5) ( 4) goto (p+1) /*( p+1)是整個(gè)布爾表達(dá)式的假出口 */ ( 5) if ef goto ( 7) ( 6) goto ( p+1) ( 7) (關(guān)于 S1的四元式) … 拉鏈返填 ?? ( 10 ) g o t o L ( 10 ) g o t o 0 ?? ?? 鏈尾( 10 ) ( 20 ) g o t o L ( 20 ) g o t o 1 0 ? ? ?? ( 30 ) g o t o L ( 3 0 ) g o t o 2 0 ?? ?? 鏈頭( 30 ) ( 40 ) L :?? ( 40 ) 語(yǔ)句 i f a b o r c d a n d e f t h en S1 el s e S2的四元式(1 ) i f a b g o t o ( 7 ) ( E .t ru e ) ( 1 ) 和 ( 5 )( 2 ) g o t o ( 3 ) 拉鏈 (真)( 3 ) i f c d g o t o ( 5 )( 4 ) g o t o ( p + 1 ) ( E. f a l se) ( 4 ) 和 ( 6 )( 5 ) i f e f g o t o ( 7 ) 拉鏈 (假)( 6 ) g o t o ( p + 1 )( 7 ) ( S1的四元式 ??( p 1 ) ??)( p ) g o t o (q)( p + 1 ) ( S2的四元式??( q 1 ) ??)(q)( 1 ) i f a b g o t o ( E .t ru e )( 2 ) g o t o ( 3 ) ( 3 ) i f cd g o t o ( 5 )( 4 ) g o t o ( E . f a l s e)( 5 ) i f ef g o t o ( E .t ru e ) ( 6 ) g o t o ( E . f a l s e) ( E .t ru e) ( S1的四元式序列 ?? ??)( p ) g o t o (q)( E .f a l se) ( S2的四元式序列??( q 1 ) ??)語(yǔ)義描述使用的量: E .t ru e “真”鏈, E . f a l s e “假”鏈 E. co d eb e g i n E 的第一個(gè)四元式 n ex t st a t 下一四元式地址 過(guò)程: em i t ( ) 輸出一條四元式,而后 n ex t st a t +1 m er g e( p 1 ,p 2 ) 例: m er g e( p 1 ,p 2 )( p 1 0 0 ) 0 ?? p1 鏈 ( p 10) p 1 0 0?? `( p 1 ) p 1 0( p 2 0 0 ) 0 p 1?? p2 鏈 ( p 2 0 ) p 2 0 0??( p 2 ) p 2 0 b a ck p a t ch ( p ,t ) 把 p 所鏈接的每個(gè)四元式的第四區(qū)段都填為 t 。如: E1 or E2 E1有一個(gè)真出口, E2也有一個(gè)真 出口,將兩個(gè)鏈合并為一條鏈。 布爾表達(dá)式的一種翻譯方案: (1) E → E1 or E2 { b ack p atch (E1.fals e, E2.Cod eb egin )。 od eb egin := E1.cod eb egin 。 ru e:= m erge(E1.tru e, E2.tru e) alse: = E2.fals e} (2) E → E1 an d E2 { b ack p atch (E1.tru e, E2.cod eb egin )。 od eb egin := E1.cod eb egi n。 ru e:= E2.tru e。 alse: = m erge(E1.fals e, E2fals e)。} (3) E → n ot E1 { E .tru e:= E1.fals e。 od eb egin := E1.cod eb egin 。 alse: = E1.tru e ( 4) E → (E1) { E. t ru e: = E1.t ru e。 ode be gin: = E1.c ode be gin。 alse: = E1.f alse } ( 5) E → id 1 rop i d2 { E. t ru e: =n ext st at。 ode be gi