教程案例成果_第1頁(yè)
教程案例成果_第2頁(yè)
教程案例成果_第3頁(yè)
教程案例成果_第4頁(yè)
教程案例成果_第5頁(yè)
已閱讀5頁(yè),還剩57頁(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)介

2014/繼承屬性的模擬求類型檢符號(hào)運(yùn)行 組中間代碼生1 2014/從上面的討論可知,分析棧中繼承屬性的是通 2014/SaA{C.i:=A.s}CbAB{C.i:=A.s}Cc{C.s:=若直接應(yīng)用上述復(fù)寫(xiě)規(guī)則的處理方法,則在使Cc進(jìn)行約時(shí),C.i的值或存在棧頂(top-1),或存在次棧頂(top-一種可行的做法是引入新的非終結(jié)符M,將以上翻譯方案改造為SaA{C.i:=A.s}CbAB{M.i:=A.s}M{C.i:=M.s}Cc{C.s:=Mε{M.s:=M.i這樣,在使用Cc進(jìn)行歸約時(shí),C.i的值就一定可以通過(guò)次棧2014/SaA{C.i:=f(A.s)}這里,繼承C.i不是通過(guò)復(fù)寫(xiě)規(guī)則來(lái)求值,而是通過(guò)普通函數(shù)f(A.s)調(diào)用來(lái)計(jì)算.在計(jì)算C.i時(shí),A.s在語(yǔ)義棧上,但f(A.s)并未同樣,一種做法是引入新的非終結(jié)符M,將以上翻譯方案SaA{M.i:=A.s}M{C.i:=M.s}Mε{M.s:=這樣,就解決了上述注:從翻譯方案中去掉嵌在產(chǎn)生式中間的語(yǔ)義規(guī)則集時(shí),若語(yǔ)義

2014/ 2014/ 2014/靜態(tài)語(yǔ)義分析的主要工類型檢查(type控制流檢查(flow-of-control控制流語(yǔ)句必須使控制轉(zhuǎn)移到合法的地方(如唯一性檢查(uniquenesschecks)很多場(chǎng)合要求對(duì)名字相關(guān)檢查(name-related(如,一些名字可能被要求配對(duì)出現(xiàn) 2014/語(yǔ)義處理的環(huán)符號(hào)表(symbol類型檢查 生器記號(hào) 語(yǔ)法 語(yǔ)法 表生器 2014/Chapter 2014/符號(hào)表的作符號(hào)表的常見(jiàn)屬關(guān)于符號(hào)表的操符號(hào)表的實(shí)2014/符號(hào)表的作 符號(hào)表的常見(jiàn)屬 2014/關(guān)于符號(hào)表的操

2014/符號(hào)表的實(shí)標(biāo)號(hào)表,等等 符號(hào)表的實(shí)Hash符號(hào)表的實(shí)classlocal作用域的符號(hào) (1)class

global作用域的符號(hào)

作用作用域Mac類的描Mac類成員符號(hào)Computer類的描Computer類成員符號(hào)略略(7)

intvoidCrash(intnTimes){inti;…}classMacextendsComputerint}voidmain()(15)

classMacpowerbook;…2014/運(yùn)行 組織的作用與任程序在器中的布分配策活動(dòng)記回收 運(yùn)行 組織的作用與任數(shù)據(jù)表示分配表達(dá)式計(jì) 如何組織表達(dá)式的計(jì)過(guò)程實(shí)現(xiàn)數(shù)據(jù)表成分(component),偏移地址(offset),數(shù)據(jù)表示舉char1integer4float8boolean1bit/1指針4數(shù)組一塊連續(xù) 結(jié)構(gòu)/記錄所有域(field)存放在一塊連續(xù) 對(duì)象 2014/StackHeapFreeStaticStackHeapFreeStatic

LowestHighest2014/分配策在編譯期間將數(shù)據(jù)對(duì)象的運(yùn)行 按照棧的方式來(lái)管從數(shù)據(jù)段的堆空間分配和釋放數(shù)據(jù)對(duì)象的靜 分如匯編語(yǔ)言,F(xiàn)ORTRAN語(yǔ)可靜態(tài)分配的數(shù)據(jù)對(duì)象如大小固定且在程序執(zhí)行期間可全程的全局變量,以及程序中的常量,cstans)如C語(yǔ)言中的static和extern棧 分堆 分靈活數(shù)據(jù)對(duì)象 分配和釋放不限時(shí)間和次顯式的分配或釋放(explicitallocation 隱式的分配或釋放(implicitallocation 堆 分 最先適應(yīng)算法(選擇最先找到的足夠大 塊碎片整理算 壓縮合并小 塊,使其更可(部分內(nèi)容可參考數(shù)據(jù)結(jié)構(gòu)和操作系統(tǒng)課程+偏移地址+偏移地址(通常存于某寄存器中活動(dòng)記voidp()q();

q被第二次激活時(shí)運(yùn)qqqpmainvoidq()q();}intmainp(}活動(dòng)記

TOP(棧頂寄存器SP(基址寄存器活動(dòng)記解決對(duì)非局部量 (存取采用Display為活動(dòng)記錄增加靜態(tài)鏈2014/活動(dòng)記采用DisplayDisplay寄存器表(簡(jiǎn)稱Display表)記錄各嵌套層當(dāng)前過(guò)程的活動(dòng)記錄在運(yùn)行棧上的起始位置(址)當(dāng)前激活過(guò)程的層次為(主程序的層次設(shè)為),則對(duì)應(yīng)的spy表含有K+1個(gè)單元,依次存放著現(xiàn)行層,直接外層直至最外層的每一過(guò)程的動(dòng)記錄的址嵌套作用域規(guī)則確保每一時(shí)刻DisplayDisplay表的大?。醋疃嗲短椎膶訑?shù))取決于實(shí)活動(dòng)記Display表方案R被第一次激活后運(yùn)行Display寄存D[i的情S的活動(dòng)記Q的活動(dòng)記R的活動(dòng)記

programMain(I,O);procedureP;procedureQ;procedureR; …R;… …Q;… procedureS;…P;… …S;… 活動(dòng)記Display表的(過(guò)程被調(diào)用和返回時(shí)的保存和恢復(fù) 的方法是把整個(gè)Display表存入活動(dòng)記錄若過(guò)程為第n層,則需要保存D[0]~D[n])一個(gè)過(guò)程被調(diào)用時(shí),從調(diào)用過(guò)程的Display表中自下向上抄錄n個(gè)SP值,再加上本層的SP值方法二只在活動(dòng)記錄保存一個(gè)Display活動(dòng)記Display表 舉保存完整的全局DisplayR的活R的活動(dòng)記錄全局DisplayQ的活動(dòng)記錄P的活動(dòng)記錄S的活動(dòng)記

programMain(I,O);procedureP;procedureQ;procedureR; …R;… …Q;… procedureS;…P;… …S;… 活動(dòng)記采用靜態(tài)鏈(staticDisplay表的方法要用到多個(gè)寄存器,有時(shí)并不情愿這樣做(寄存器資源很寶貴)一種可選的方法是采用靜態(tài)鏈,只保留一個(gè)寄存器(即SP)指向當(dāng)前AR所有活動(dòng)記錄都增加一個(gè)靜態(tài)鏈(如在offset0處)AR要被撤銷。為回卷(unwind)(靜態(tài)鏈/鏈:SL,動(dòng)態(tài)鏈/控制鏈:DL活動(dòng)記采用靜態(tài)鏈的方法

programMain(I,O);procedureP;procedureQ;procedureR; …R;

R的活動(dòng)記錄Q的活動(dòng)記錄P的活動(dòng)記錄S的活動(dòng)記錄

態(tài)…Q;態(tài) procedure…P;… …S;… 2014/器記號(hào) 器–用語(yǔ)法制導(dǎo)定義和翻譯方案的方法來(lái)2014/中間代中間代碼的形 syntaxtree,抽象語(yǔ)法樹(shù)DAG(DirectedAcyclicGraph,有向無(wú)圈圖TAC(Three-addresscode,三地址碼,四元式P-code(特別用于Pascal語(yǔ)言實(shí)現(xiàn) 2014/三地址碼順序的語(yǔ)句序列其語(yǔ)句一般具有如下x:=yop(op為操作碼,y和z為操作符,x為結(jié)果 xyz翻譯成的三地址語(yǔ)句序列是t1:=yzt2:=x+ 2014/中間代碼舉算術(shù)表達(dá)式AB*CDECDTAC(Three-addresscode,三地址碼,四元式CDT1:=CDT1:=C-BT2:=B*ACD或T3:=A+T4:=C-((NT5NT5:=T4^ET6:=E/T7:=T3+((20142014/ 過(guò)程中說(shuō)明語(yǔ)句的語(yǔ)法制導(dǎo)翻id的詞法名字(符號(hào)表中的名字T.typeT.width數(shù)據(jù)寬度(字節(jié)數(shù)offset:相對(duì)于過(guò)程數(shù)據(jù)區(qū)基址的下一個(gè)可用的相enter(,T.type,offset): typeT.type,20142014/過(guò)程中說(shuō)明語(yǔ)句的語(yǔ)法制導(dǎo)翻P{offset:=0}D;SDD1;D2Did offset:=offset+T.widthTTTTarray[num]ofT1TT1S

{T.type:=char;T.width:=1{T.type:=integer;T.width:=4{T.type:=real;T.width:=8{T.type:=array(num.val,T1.type);T.width:=num.valT1.width}{T.type:=pointer(T1.type)T.width:=4 2014/賦值語(yǔ)句的語(yǔ)法制導(dǎo)翻id的詞法名字(符號(hào)表中的名字E.place用來(lái)存放EE.code:E求值的TAC的項(xiàng),返回存放相應(yīng)值的指針,若無(wú)該項(xiàng),則返回genTACnewtempt 2014/產(chǎn)生 語(yǔ)義規(guī)Sid:=EE1+E2EE1E-E(E1E

S.code:=E.code||gen(‘:=‘E.place:=E.code:=E1.code||E2.codegen(E.place‘:=‘E1.place‘+’E2.place)E.place:=newtemp;E.code:=E1.code||E2.codegen(E.place‘:=‘E1.place‘’E.place:=newtemp; E.code:=E1.code||gen(E.place‘:=‘‘uminus‘E1.place)E.place:=E1.place;E.code:=E1.codeE.place:=id.place;E.code:=2014/符號(hào)表中的名Sid:= {p:=ifpnilemit(p,‘:=’,E.place)elseerror}EE1+{E.place:=emit(E.place,‘:=’,E1.place,‘+’,E2.place)EE1{E.place:=emit(E.place,‘:=’,‘uminus’,E1.place)E(E1){E.place:=E1.placeE {p:=ifpnilthenE.place:=pelseerror 數(shù)組元素的地址計(jì)

2014/一維數(shù)組A的第i個(gè)元素的地址計(jì)base+(ilow)iw+(baselow2014/A[1,1],A[2,1],A[1,2],A[2,2],A[1,3],A[2,A[1,1],A[1,2],A[1,3],A[2,1],A[2,2],A[2,base+((i1low1)n2+(i2low2))(其中n2high2low21)((i1n2i2w+(base((low1n2)+low2)A[i1i2ik]((…((i1n2+i2)n3+i3)…)nk+ik)+base((…((low1n2+low2)n3+low3)…)nklowk)數(shù)組的向量(dove元中,稱為“向量”.對(duì)于靜態(tài)數(shù)組, 例:對(duì)于靜態(tài)數(shù)組說(shuō)明A[l1:u1,l2:u2,…,ln:un],可以在符

li:第i維的下ui:第i維的上界type:數(shù)組元素的類型 n:數(shù)組維數(shù)C隨后解例:對(duì)于靜態(tài)數(shù)組A[l1:u1,l2:u2,…,ln:un],若數(shù)組布局采用行優(yōu)先的連續(xù)布局,數(shù)組首元素的地址為a,則數(shù)組元素A[i1,i2,…,in]的地址D可以如下計(jì)算:D=a+(i1-l1)(u2-l2)(u3-l3)…(un-+…+(in-1-ln-1)(un-ln)+(in-重新整理后得:DaCVC=(…(l1(u2-l2)+l2)(u3-l3)+l3)(u4-l4)+…+ln-1)(un-ln)+V=(…((i1(u2-l2)+i2)(u3-l3)+i3)(u4-l4)+……+in-1)(un-ln)+(這里的C即為前頁(yè)向量中的類型轉(zhuǎn)x:=y+it1:=iintt2:=inttorealt1t3:=yreal+t2x:=EE1+E.place:=ifE1.type=integerandE2.type=integerthenE.type=integerelseifE1.type=integerandE2.type=realthenu:=emit(u,‘:=’,‘inttoreal’,emit(E.place,‘:=’,u,‘real+’,E.type:=..20142014/布爾表達(dá)式的語(yǔ)法制導(dǎo)翻例如:可以用數(shù)值“1”表示true用數(shù)值“0”表示優(yōu)點(diǎn):方便實(shí)現(xiàn)控制流語(yǔ)句中E1or ifE1thentrueel

溫馨提示

  • 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)論