freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

[高等教育]第七章語義分析和中間代碼生成(編輯修改稿)

2025-09-13 04:23 本頁面
 

【文章內(nèi)容簡介】 {if =null Then X:=T4 else T2 [T3]:=X} 第四節(jié) 布爾表達式的翻譯一、布爾表達式的定義和翻譯布爾表達式的定義布爾表達式是用布爾運算符號(and,or,not)作用到布爾變量或關(guān)系運算符上而組成的。⑴ 布爾表達式的作用① 邏輯值的計算;② 作為條件控制的布爾式。⑵ 布爾表達式的優(yōu)先級(P185)①算術(shù)運算符-(一元負),*,/,+,-。②比較運算符=,≠,, ≤, , ≥。③邏輯運算符not,and,or。布爾表達式的計算方法⑴ 按優(yōu)先關(guān)系計算值用1代表true,0代表false 1 or ( not 0 and 0) or 0= 1 or (1 and 0) or 0= 1or 0 or 0= 1 or 0=1⑵ 按優(yōu)化方式計算值A(chǔ) or B: if A then true else B (A為真時無需判斷B);A and B:if A then B else false(A為假時無需判斷B);not A: if A then false else true數(shù)值表示法的翻譯例:ab 等價為if ab then 1 else 0翻譯為:100: if ab goto 103101: T1:=0102: goto 104103: T1 :=1104:其中:T1的值表示ab結(jié)果例:a or b and not c翻譯為:100: T1 := not c101: T2 := b and T1102: T3 := a or T2 數(shù)值表示法的翻譯模式:E→E1 or E2 { := newtemp。 emit( ‘:=’ ‘or’ ) }E→E1 and E2 { := newtemp。 emit( ‘:=’ ‘a(chǎn)nd’ ) }E→ not E1 { := newtemp。 emit( ‘:=’ ‘not’ ) }E→ ( E1 ) { := } E→id1 relop id2 {:=newtemp。 emit(‘if’ ‘goto’nextstat + 3 )。 emit(‘:=’‘0’); emit(‘goto’nextstat + 2 )。 emit(‘:=’‘1’) }E→id { := }例:ab or cd and ef的翻譯過程 E→id1 relop id2 (ab){ :=T1, 100 if ab goto 103 101 T1:=0 102 goto 104 103 T1:=1 }E→id1 relop id2 (cd){:=T2 104 if cd goto 107 105 T2:=0106 goto 108107 T2:=1 }E→id, relop id2 (ef){:=T3 108 if ef goto 111 109 T3:=0 110 goto 112 111 T3:=1E→E1 and E2 (and) { :=T4112 T4:=T2 and T3} E→E1 or E2 (or){:=T5113 T5:=T1 or T4}二、作為條件控制的布爾表達式翻譯作為條件控制出口的定義⑴ 語義值為真()轉(zhuǎn)移到真入口地址。⑵ 語義值為假()轉(zhuǎn)移到假入口地址。 true jmp例:if E then S1 else S2 ; false條件語句翻譯的結(jié)構(gòu): E的代碼 to to S1的代碼goto S2的代碼 中間語言的表示: if E goto L1 (轉(zhuǎn)移到真入口) goto L2 (轉(zhuǎn)移到假入口)L1: S1 (代碼序列) … goto Snext (跳出條件語句)L2: S2 (代碼序列) …Snext:布爾表達式E的翻譯: K:if E goto (轉(zhuǎn)移到真入口) K+1:goto (轉(zhuǎn)移到假入口) true jmp例:if a<b then S1 else S2 ; false中間語言的表示: if a<b goto L1 (轉(zhuǎn)移到真入口) goto L2 (轉(zhuǎn)移到假入口)L1: S1 (代碼序列) … goto Snext (跳出條件語句)L2: S2 (代碼序列) …Snext:布爾表達式E=a<b的翻譯: K:if a<b goto (轉(zhuǎn)移到真入口) K+1:goto (轉(zhuǎn)移到假入口) true jmp例 if E1 or E2 then S1 else S2 ; false條件語句翻譯的結(jié)構(gòu): E1的代碼 to to E2的代碼 to to S1的代碼 ┆goto S2的代碼 ┆中間語言的表示: if E1 goto L2 goto L1L1: if E2 goto L2 goto L3L2:: S1的代碼 ┆ goto Snext L3:: S2的代碼 ┆ :布爾表達式E1 or E2的翻譯: if E1 goto L2 goto L1L1: if E2 goto L2 goto L3L2:: ┆ L3:: ┆布爾表達式E1 or E2的操作規(guī)則:①(L2真入口), 但L2的入口地址尚沒確定,,。②E1為假,直接轉(zhuǎn)向E2第一條地址L1, 在E1 or之后的地址便是E2第一條地址,為了得到該地址:a、產(chǎn)生式E→E1 or E2改為 E→E1 or M E2,添加非終結(jié)符M和產(chǎn)生式M→ε;b、, 產(chǎn)生式M→ε的翻譯模式(語義處理)為:{ :=nextquad };c、E2為假,布爾表達式 E1 or (L3假入口), 但L3的入口地址尚沒確定,,。翻譯模式(語義處理)為:E→E1 or M E2 {backpatch (, )。 := merge(,) := } M→ε { :=nextquad } true jmp例 if E1 and E2 then S1 else S2 ; false條件語句翻譯的結(jié)構(gòu): E1的代碼 to to E2的代碼 to to S1的代碼 ┆goto S2的代碼 ┆ 中間語言的表示: if E1 goto L2 goto L3L1: if E2 goto L2 goto L3L2:: S1的代碼 ┆ goto Snext L3:: S2的代碼 ┆ :布爾表達式E1 or E2的翻譯: if E1 goto L2 goto L3L1: if E2 goto L2 goto L3L2:: ┆ L3:: ┆布爾表達式E1 and E2的操作規(guī)則:①E1 ,但入口地址尚沒確定,,。②E1為真,直接轉(zhuǎn)向E2第一條地址L1。在E1and之后的地址便是E2第一條地址,為了得到該地址:a、把產(chǎn)生式E→E1 and E2 改為 E→E1 and M E2,添加非終結(jié)符M和產(chǎn)生式M→ε;b、, 產(chǎn)生式M→ε的翻譯模式(語義處理)為:{ :=nextquad } c、E2為真,布爾表達式 E1 and (L3真入口), 但L3的入口地址尚沒確定,,。 翻譯模式(語義處理)為:E→E1 and M E2 { backpatch (E1. truelist, )。 E. falselist:= merge (E1. falselist,E2. falselist) E. truelist := E2. truelist } M→ε { :=nextquad }⑵語義值和語義子程序的設(shè)置語義值(變量)和語義子程序:(P190)①語義值(屬性)E1 . truelist(真鏈),代表E為真的四元式地址(需轉(zhuǎn)移地址確定后,按此地址將轉(zhuǎn)移地址填入第四元)。(假鏈),代表E為假的四元式地址。nextqual(變量)指向下一條將產(chǎn)生的四元式地址,每執(zhí)行emit后,nextqual自動加1。②函數(shù)makelist(i)函數(shù),創(chuàng)建一個僅含i的新鏈表。merge (P1, P2)拉練函數(shù),把P1和P2鏈合為一個鏈。backpatch (p, t )回填函數(shù),把P所鏈接的每個四元式的第四數(shù)據(jù)項填上t。用四元式形式表示三地址代碼(jnz, a, _, p) 代表 if a goto p(jrop, x, y, p) 代表 if x rop y goto p(j, _, _, p) 代表 goto p例 if AB and C then S1 else S2的四元式如下1(j, A, B,3) E1 . truelist(真鏈)記下E為真的四元式地址,此處為1。2(j,_, _,P+1) E1 . falselist(假鏈)記下E為假的四元式地址,此處為2。3(jnz, C, _,5) 4(j,_,_,p+1) 生成S2的地址(P+1)未能確定。5 S1的中間代碼 ┆P( j, _, _, q )P+1 S2的中間代碼 ┆q拉鏈與回填函數(shù)MERG (P1, P2)拉鏈函數(shù):P1, P2是兩條四元式地址,表示轉(zhuǎn)到同一地址,故把P1和P2合為一個鏈。PROCEDURE MERGE (p1, p2 )。IF P2=0 THEN MERGE:=P1 ELSEBEGIN P := P2。WHILE ≠0 DO P:=:=P1。MERGE:=P2ENDBACKPATCH (p, t )回填函數(shù):把P所鏈接的每個四元式的第四數(shù)據(jù)項填上t。PROCEDURE BACKPATCH(p,t);BEGIN Q:=p。 WHILE Q≠0 DOBEGINq:=;:=t;Q:=qEND END根據(jù)以生成的四元式利用拉鏈和回填函數(shù),將確定的轉(zhuǎn)移地址填入到相應(yīng)的第四數(shù)據(jù)項(轉(zhuǎn)移地址)。例:p (j,_,_,r) 轉(zhuǎn)到同一地址r(當(dāng)確定后將第四數(shù)q (j,_,_,r) 據(jù)項都填為r)的四元式構(gòu)成鏈。(k)(j,_,_,r)第一步:建新鏈 p 和 qp(j, _, _, 0) :=p ┇q(j, _, _, 0) :=q第二步:合鏈 marge(p, q)=qp(j, _, _, 0) ┇q(j, _, _, p)
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1