編譯7語(yǔ)義分析和中間代碼產(chǎn)生2_zss__第1頁(yè)
編譯7語(yǔ)義分析和中間代碼產(chǎn)生2_zss__第2頁(yè)
編譯7語(yǔ)義分析和中間代碼產(chǎn)生2_zss__第3頁(yè)
編譯7語(yǔ)義分析和中間代碼產(chǎn)生2_zss__第4頁(yè)
編譯7語(yǔ)義分析和中間代碼產(chǎn)生2_zss__第5頁(yè)
已閱讀5頁(yè),還剩16頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、編譯原理編譯原理(第三版第三版) 陳火旺等編著22022-3-247.3 賦值語(yǔ)句的翻譯賦值語(yǔ)句的翻譯 n7.3.1 簡(jiǎn)單算術(shù)表達(dá)式及賦值語(yǔ)句簡(jiǎn)單算術(shù)表達(dá)式及賦值語(yǔ)句 32022-3-24為賦值語(yǔ)句生成三地址代碼的為賦值語(yǔ)句生成三地址代碼的S-屬性文法定義屬性文法定義 產(chǎn)生式產(chǎn)生式語(yǔ)義規(guī)則語(yǔ)義規(guī)則Sid:=ES.code:=E.code | gen(id.place := E.place)EE1+E2E.place:=newtemp; E.code:=E1.code | E2.code | gen(E.place := E1.place + E2.place)EE1*E2E.place:=ne

2、wtemp; E.code:=E1.code | E2.code | gen(E.place := E1.place * E2.place)E-E1E.place:=newtemp; E.code:=E1.code | gen(E.place := uminus E1.place)E (E1)E.place:=E1.place; E.code:=E1.codeEid E.place:=id.place; E.code= 42022-3-24產(chǎn)生賦值語(yǔ)句三地址代碼的翻譯模式產(chǎn)生賦值語(yǔ)句三地址代碼的翻譯模式 Sid:=E p:=lookup(); if p nil thenemit(

3、p := E.place) else error EE1+E2 E.place:=newtemp; emit(E.place := E1.place + E2.place)EE1*E2 E.place:=newtemp; emit(E.place := E 1.place * E 2.place)Sid:=E S.code:=E.code | gen(id.place := E.place)EE1+E2 E.place:=newtemp; E.code:=E1.code | E2.code |gen(E.place := E1.place + E2.place)EE1*E2 E.place:=

4、newtemp; E.code:=E1.code | E2.code | gen(E.place := E1.place * E2.place)52022-3-24產(chǎn)生賦值語(yǔ)句三地址代碼的翻譯模式產(chǎn)生賦值語(yǔ)句三地址代碼的翻譯模式 E-E1 E.place:=newtemp; emit(E.place:= uminusE 1.place)E(E1) E.place:=E1.placeEid p:=lookup(); if p nil then E.place:=p else error E-E1 E.place:=newtemp; E.code:=E1.code | gen(E.p

5、lace := uminus E1.place)E (E1) E.place:=E1.place; E.code:=E1.codeEid E.place:=id.place; E.code= 62022-3-247.3.2 數(shù)組元素的引用數(shù)組元素的引用n數(shù)組元素地址的計(jì)算:數(shù)組元素地址的計(jì)算:參見(jiàn)參見(jiàn)P179-P180P179-P18072022-3-24n設(shè)設(shè)A為為n維數(shù)組,每個(gè)元素寬度為維數(shù)組,每個(gè)元素寬度為w, lowi 為第為第i維維 的下界,的下界,ni 是為第是為第i維維 可取值的個(gè)可取值的個(gè)數(shù)數(shù), base為為A的第一個(gè)元素相對(duì)地址的第一個(gè)元素相對(duì)地址 n元素元素Ai1,i2,i

6、k相對(duì)地址公式相對(duì)地址公式 (i1 n2+i2)n3+i3)nk+ik)w +base-(low1 n2+low2)n3+low3)nk+lowk)w nC= base-(low1n2+low2)n3+low3)nk+lowk)w 82022-3-24n如果如果id出現(xiàn)的地方也允許下面產(chǎn)生式中的出現(xiàn)的地方也允許下面產(chǎn)生式中的L出現(xiàn)出現(xiàn) (數(shù)組引用文法):(數(shù)組引用文法):L id Elist | idElistElist,E | E 為了便于處理,文法改寫(xiě)為為了便于處理,文法改寫(xiě)為L(zhǎng)Elist | id ElistElist, E | id E 92022-3-24n引入下列語(yǔ)義變量或語(yǔ)義過(guò)程

7、引入下列語(yǔ)義變量或語(yǔ)義過(guò)程:Elist.ndim :下標(biāo)個(gè)數(shù)計(jì)數(shù)器:下標(biāo)個(gè)數(shù)計(jì)數(shù)器Elist.place :表示臨時(shí)變量,用來(lái)臨時(shí)存放:表示臨時(shí)變量,用來(lái)臨時(shí)存放已形成的已形成的Elist中的下標(biāo)表達(dá)式計(jì)算出來(lái)的值中的下標(biāo)表達(dá)式計(jì)算出來(lái)的值 limit(array,j) :函數(shù)過(guò)程,它給出數(shù)組函數(shù)過(guò)程,它給出數(shù)組array的第的第j維的長(zhǎng)度維的長(zhǎng)度102022-3-24n每個(gè)代表變量的非終結(jié)符每個(gè)代表變量的非終結(jié)符L有兩項(xiàng)語(yǔ)義值有兩項(xiàng)語(yǔ)義值L.place:n若若L為為簡(jiǎn)單變量簡(jiǎn)單變量i, 指變量指變量i的符號(hào)表入口的符號(hào)表入口 n若若L為為下標(biāo)變量(數(shù)組元素引用)下標(biāo)變量(數(shù)組元素引用),指存

8、放,指存放CONSPART的臨時(shí)變量的整數(shù)碼的臨時(shí)變量的整數(shù)碼 L.offset :n若若L為為簡(jiǎn)單變量簡(jiǎn)單變量,null,n若若L為為下標(biāo)變量(數(shù)組元素引用)下標(biāo)變量(數(shù)組元素引用),指存放,指存放VARPART的臨時(shí)變量的整數(shù)碼的臨時(shí)變量的整數(shù)碼 112022-3-24關(guān)于賦值語(yǔ)句的文法關(guān)于賦值語(yǔ)句的文法(1) SL:=E(2) EE+E(3) E(E)(4) EL(5) LElist (6) Lid(7) Elist Elist, E(8) Elistid E122022-3-24產(chǎn)生賦值語(yǔ)句的翻譯模式產(chǎn)生賦值語(yǔ)句的翻譯模式(1) SL:=E if L.offset=null then

9、/*L是簡(jiǎn)單變量是簡(jiǎn)單變量*/emit(L.place := E.place) else emit( L.place L.offset := E.place) (2) EE1 +E2 E.place:=newtemp; emit(E.place := E 1.place + E 2.place)132022-3-24(3) E(E1)E.place:=E1.place(4) EL if L.offset=null then E.place:=L.place else begin E.place:=newtemp; emit(E.place := L.place L.offset ) end 1

10、42022-3-24Ai1,i2,ik (i1 n2+i2)n3+i3)nk+ik)w +base-(low1 n2+low2)n3+low3)nk+lowk)w(8) Elistid E Elist.place:=E.place; Elist.ndim:=1; Elist.array:=id.place 152022-3-24A i1,i2,ik ( (i1 n2+i2)n3+i3)nk+ik)w +base-(low1 n2+low2)n3+low3)nk+lowk)w(7) Elist Elist1, E t:=newtemp;m:=Elist1.ndim+1;emit(t := Eli

11、st1.place * limit(Elist1.array,m) );emit(t := t + E.place); Elist.array:= Elist1.array;Elist.place:=t;Elist.ndim:=m 162022-3-24Ai1,i2,ik (i1 n2+i2)n3+i3)nk+ik) w +base-(low1 n2+low2)n3+low3)nk+lowk)w(5) LElist L.place:=newtemp; emit(L.place := Elist.array C); L.offset:=newtemp; emit(L.offset := w *

12、Elist.place) (6) Lid L.place:=id.place; L.offset:=null 172022-3-24例7.1P183n自學(xué)+講解182022-3-24類(lèi)型轉(zhuǎn)換類(lèi)型轉(zhuǎn)換n用用E.type表示非終結(jié)符表示非終結(jié)符E的類(lèi)型屬性的類(lèi)型屬性 n對(duì)應(yīng)產(chǎn)生式對(duì)應(yīng)產(chǎn)生式EE1 op E2的語(yǔ)義動(dòng)作中關(guān)于的語(yǔ)義動(dòng)作中關(guān)于E.type的語(yǔ)義規(guī)則可定義為:的語(yǔ)義規(guī)則可定義為: if E1.type=integer and E2.type=integer E.type:=integer else E.type:=real n算符區(qū)分為整型算符算符區(qū)分為整型算符int op和實(shí)型算符和實(shí)

13、型算符real op,192022-3-24例例 假定輸入串為假定輸入串為x:=yi*j 其中其中x、y為實(shí)型;為實(shí)型;i、j為整型。這個(gè)賦值句為整型。這個(gè)賦值句產(chǎn)生的三地址代碼為:產(chǎn)生的三地址代碼為: T1:=i int* j T3:=inttoreal T1 T2:=y real+ T3 x:=T2 202022-3-24關(guān)于產(chǎn)生式關(guān)于產(chǎn)生式EE1 E2 的語(yǔ)義動(dòng)作的語(yǔ)義動(dòng)作 E.place:=newtemp; if E1.type=integer and E2.type=integer then begin emit (E.place := E 1.place int+ E 2.place); E.type:=integer end else if E1.type=real and E2.type=real then begin emit (E.place := E 1.place real+ E 2.place); E.type:=real end212022-3-24else if E1.type=integer and E2.type=real then beginu:=newtemp;emit (u := inttoreal E 1.place);emi

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論