賦值語(yǔ)句的翻譯_第1頁(yè)
賦值語(yǔ)句的翻譯_第2頁(yè)
賦值語(yǔ)句的翻譯_第3頁(yè)
賦值語(yǔ)句的翻譯_第4頁(yè)
賦值語(yǔ)句的翻譯_第5頁(yè)
已閱讀5頁(yè),還剩18頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第九章 中間代碼生成,本章內(nèi)容 用語(yǔ)法制導(dǎo)定義和翻譯方案的方法來(lái)說(shuō)明程序設(shè)計(jì)語(yǔ)言的結(jié)構(gòu)怎樣被翻譯成中間形式。,9.1 賦值語(yǔ)句的翻譯,翻譯的需求 充分了解各種語(yǔ)言現(xiàn)象的語(yǔ)義 包括:控制結(jié)構(gòu)、數(shù)據(jù)結(jié)構(gòu)、單詞 充分了解它們的實(shí)現(xiàn)方法 目標(biāo)語(yǔ)言的語(yǔ)義 了解中間代碼的語(yǔ)義 了解運(yùn)行環(huán)境,實(shí)現(xiàn)賦值語(yǔ)句的翻譯,基本子程序 產(chǎn)生一條中間代碼 gen(code) 產(chǎn)生新的臨時(shí)變量 newtemp 屬性設(shè)置 中間代碼序列 code 存儲(chǔ)位置 place,賦值語(yǔ)句的四元式翻譯,S id := E S.code := E.code | gen( id.place:=E.place ) E E1 + E2 E.pla

2、ce := newtemp; E.code := E1.code | E2.code | gen(E.place:=E1.place+E2.place) E E1 * E2 E.place := newtemp; E.code := E1.code | E2.code | gen(E.place:=E1.place*E2.place),注釋: | 表示代碼序列的連接,E - E1 E.place := newtemp; E.code := E1.code | gen(E.place:=0-E1.place) E ( E1 ) E.place:= E1.place; E.code:= E1.co

3、de E id E.place:= id.place; E.code:= E num E.place:= num.val;E.code:= ,例 5-7:翻譯 a:= -c+b*34,a:= -c+b*34的中間代碼,t2:=0 - c t3:=b*34 t1:=t2+t3 a:=t1,a:= -c+b*34的中間代碼的生成過(guò)程,S.code (S id := E)= E.code | gen( a:=E.place ) /* a id.place */ (E E1 + E2)= E1.code | E2.code | gen( t1:=E1.place+E2.place ) | gen( a

4、:=t1 ) /* newtemp t1 E.place */ (E1 - E11)= E11.code | gen( t2:= 0 - E11.place ) (E2 E21 * E22)/* newtemp t2 E1.place */,| E21.code | E22.code | gen( t3:= E21.place*E22.place ) /* newtemp t3 E2.place */ | gen( t1:=t2+t3 ) | gen( a:=t1 ) (E21 b)= gen( t2:= 0 - c ) | gen( t3:=b*34 ) (E22 34 ) /* c E11

5、.place */ /* b E21.place */ /* 34 E22.place */ | gen( t1:=t2+t3 ) | gen( a:=t1 ) /* E21.code E22.code */,結(jié)果 S的代碼,t2:=0 - c t3:=b*34 t1:=t2+t3 a:=t1,結(jié)果:開(kāi)始符號(hào)的屬性 S.code,1) 找出分析樹(shù)中使用的產(chǎn)生式規(guī)則 2)根據(jù)產(chǎn)生式的語(yǔ)義規(guī)則,代換公式中的各屬性 3)反復(fù)使用 1) 和 2) 改寫公式,最后得到代碼生成語(yǔ)句組成的公式 組成語(yǔ)句的翻譯結(jié)果(中間代碼序列),小結(jié),根據(jù)不同的中間代碼改寫語(yǔ)義規(guī)則 樹(shù)結(jié)構(gòu)(一個(gè)結(jié)點(diǎn)多個(gè)域) 后綴式 賦值語(yǔ)

6、句的四元式翻譯 語(yǔ)法制導(dǎo)定義 翻譯模式: 重要屬性與過(guò)程:code、place、newtemp、gen,表達(dá)式翻譯中的其它問(wèn)題,運(yùn)算合法性檢查 利用符號(hào)表保存的名字類型 類型自動(dòng)轉(zhuǎn)換 填加專用指令 臨時(shí)變量空間的統(tǒng)計(jì) 了解需求、及時(shí)釋放,9.2 控制語(yǔ)句的翻譯,高級(jí)語(yǔ)言的控制結(jié)構(gòu) 順序 begin 語(yǔ)句; 語(yǔ)句; end 條件 if_then_else if_then switch case 循環(huán) while_do do_while for repeat_util 三地址代碼的控制結(jié)構(gòu) goto l if x relop y goto l,S while C do S1 的翻譯,屬性設(shè)置(繼承

7、) 布爾式 C 代碼段真出口 true 代碼段假出口 false 語(yǔ)句 S 代碼段的入口 begin 后續(xù)段入口 next,循環(huán)語(yǔ)句的屬性文法,S while C do S1 C.false := S.next; S.begin := S1.next := newlabel; C.true := S1.begin := newlabel; S.code := gen( S.begin: ) | C.code | gen( C.true: ) | S1.code | gen( gotoS.begin ) 語(yǔ)義過(guò)程 新標(biāo)號(hào)的產(chǎn)生 newlabel,S if C then S1else S2 的翻譯

8、,代碼序列 C S1 S2 屬性關(guān)系 S1.begin = C.true S2.begin = C.false S1.next = S2.next = S.next,條件語(yǔ)句的屬性文法,S if C then S1 C.true := newlabel; else S2 C.false := newlabel; S1.next := S2.next := S.next; S.code := C.code | gen( C.true: ) | S1.code | gen( goto S.next ) | gen( C.false: ) | S2.code,簡(jiǎn)單布爾表達(dá)式的翻譯,C E1 relop E2 C.code := E1.code | E2.code | gen( if E1.place relop.op E2.place gotoC.true ) | gen( gotoC.false ),例 :翻譯下列語(yǔ)句,while a y do z := x + 1; else S12 x := y,S1,生成的三地址代碼序列,L1: if a y goto L5 goto L1 L5: t1 := x + 1 z := t1 got

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論