教程案例成果_第1頁
教程案例成果_第2頁
教程案例成果_第3頁
教程案例成果_第4頁
教程案例成果_第5頁
已閱讀5頁,還剩57頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

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

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

2014/符號表的實標號表,等等 符號表的實Hash符號表的實classlocal作用域的符號 (1)class

global作用域的符號

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

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

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

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

q被第二次激活時運qqqpmainvoidq()q();}intmainp(}活動記

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

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

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

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

R的活動記錄Q的活動記錄P的活動記錄S的活動記錄

態(tài)…Q;態(tài) procedure…P;… …S;… 2014/器記號 器–用語法制導定義和翻譯方案的方法來2014/中間代中間代碼的形 syntaxtree,抽象語法樹DAG(DirectedAcyclicGraph,有向無圈圖TAC(Three-addresscode,三地址碼,四元式P-code(特別用于Pascal語言實現(xiàn) 2014/三地址碼順序的語句序列其語句一般具有如下x:=yop(op為操作碼,y和z為操作符,x為結果 xyz翻譯成的三地址語句序列是t1:=yzt2:=x+ 2014/中間代碼舉算術表達式AB*CDECDTAC(Three-addresscode,三地址碼,四元式CDT1:=CDT1:=C-BT2:=B*ACD或T3:=A+T4:=C-((NT5NT5:=T4^ET6:=E/T7:=T3+((20142014/ 過程中說明語句的語法制導翻id的詞法名字(符號表中的名字T.typeT.width數(shù)據(jù)寬度(字節(jié)數(shù)offset:相對于過程數(shù)據(jù)區(qū)基址的下一個可用的相enter(,T.type,offset): typeT.type,20142014/過程中說明語句的語法制導翻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/賦值語句的語法制導翻id的詞法名字(符號表中的名字E.place用來存放EE.code:E求值的TAC的項,返回存放相應值的指針,若無該項,則返回genTACnewtempt 2014/產(chǎn)生 語義規(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/符號表中的名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ù)組元素的地址計

2014/一維數(shù)組A的第i個元素的地址計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元中,稱為“向量”.對于靜態(tài)數(shù)組, 例:對于靜態(tài)數(shù)組說明A[l1:u1,l2:u2,…,ln:un],可以在符

li:第i維的下ui:第i維的上界type:數(shù)組元素的類型 n:數(shù)組維數(shù)C隨后解例:對于靜態(tài)數(shù)組A[l1:u1,l2:u2,…,ln:un],若數(shù)組布局采用行優(yōu)先的連續(xù)布局,數(shù)組首元素的地址為a,則數(shù)組元素A[i1,i2,…,in]的地址D可以如下計算: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即為前頁向量中的類型轉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/布爾表達式的語法制導翻例如:可以用數(shù)值“1”表示true用數(shù)值“0”表示優(yōu)點:方便實現(xiàn)控制流語句中E1or ifE1thentrueel

溫馨提示

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

評論

0/150

提交評論