吉林大學(xué)編譯原理課件第六章.ppt

上傳人:za****8 文檔編號(hào):14279514 上傳時(shí)間:2020-07-15 格式:PPT 頁(yè)數(shù):26 大?。?71.51KB
收藏 版權(quán)申訴 舉報(bào) 下載
吉林大學(xué)編譯原理課件第六章.ppt_第1頁(yè)
第1頁(yè) / 共26頁(yè)
吉林大學(xué)編譯原理課件第六章.ppt_第2頁(yè)
第2頁(yè) / 共26頁(yè)
吉林大學(xué)編譯原理課件第六章.ppt_第3頁(yè)
第3頁(yè) / 共26頁(yè)

下載文檔到電腦,查找使用更方便

9.9 積分

下載資源

還剩頁(yè)未讀,繼續(xù)閱讀

資源描述:

《吉林大學(xué)編譯原理課件第六章.ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《吉林大學(xué)編譯原理課件第六章.ppt(26頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

1、語(yǔ)義分析和符號(hào)表,主要內(nèi)容: 語(yǔ)義分析概述(必要性、功能、描述方法) 符號(hào)表 類型表達(dá)式 聲明和程序體的語(yǔ)義分析,語(yǔ)義分析的必要性,語(yǔ)法和語(yǔ)義的區(qū)別; 語(yǔ)法:關(guān)于什么樣的字符串才是該語(yǔ)言 在組成結(jié)構(gòu)上合法的程序的法則。 語(yǔ)義:關(guān)于結(jié)構(gòu)上合法的程序的意義的 法則。,語(yǔ)義分析的分類,語(yǔ)義種類 靜態(tài)語(yǔ)義:在編譯階段(從程序文本上)可 以檢查的語(yǔ)義。 動(dòng)態(tài)語(yǔ)義:通過(guò)程序的執(zhí)行才能檢查的語(yǔ) 義。,語(yǔ)義錯(cuò)誤 各種條件表達(dá)式的類型是不是boolean型? 運(yùn)算符的分量的類型是否相容? 賦值語(yǔ)句的左右部的類型是否相容? 形參和實(shí)參的類型是否相容? 下標(biāo)表達(dá)式的類型是否為所允許的類型?

2、 變體記錄中表示情形的常量是否為合法類型? 函數(shù)說(shuō)明中的函數(shù)類型和返回值的類型是否一致? VE中的V是不是變量,而且是數(shù)組類型? V.id中的V是不是變量,而且是記錄類型? id是不是該記錄類型中的域名? V中的V是不是指針或文件變量? y+f(....)中的f是不是函數(shù)名?形參個(gè)數(shù)和實(shí)參個(gè)數(shù)是否一致? p(....)語(yǔ)句中的p是不是過(guò)程名?形參個(gè)數(shù)和實(shí)參個(gè)數(shù)是否一致? 每個(gè)使用性標(biāo)識(shí)符是否都有聲明?在同層內(nèi)有無(wú)標(biāo)識(shí)符被聲明多次? 標(biāo)號(hào)是否有聲明?有無(wú)重復(fù)聲明和重復(fù)定位錯(cuò)誤?有無(wú)非法轉(zhuǎn)入錯(cuò)誤? 子界類型中的下界和上界類型是否相容?下界是否小于等于上界?,語(yǔ)義分析的內(nèi)容: 類型分析; 標(biāo)

3、識(shí)符相關(guān)信息; 語(yǔ)義分析的功能: 檢查語(yǔ)義錯(cuò)誤 構(gòu)造標(biāo)識(shí)符屬性表(符號(hào)表) 語(yǔ)義分析的實(shí)現(xiàn): 與語(yǔ)法分析相結(jié)合,語(yǔ)義分析的功能圖示,語(yǔ)義分析,,語(yǔ)法分析樹(shù),TokenList,,語(yǔ)義定義,,自然語(yǔ)言描述規(guī)定,,符號(hào)表,,判定,標(biāo)識(shí)符的內(nèi)部表示 類型的內(nèi)部表示 值的內(nèi)部表示,三種內(nèi)部表示,Code,標(biāo)識(shí)符的內(nèi)部表示,標(biāo)識(shí)符種類: 常量名、類型名、變量名、函數(shù)名、過(guò)程名、域名。 TYPE idkind=( consKind, typeKind, varKind, fieldKind, procKind,funcKind ) 內(nèi)部表示(AttributeIR): 常

4、量: 類型: 變量: 域名*: 過(guò)函:,Value,Kind,TypePtr,,,,,,,Forward,Kind,TypePtr,,,,,,,Off,Level,Access,Kind,TypePtr,,,,,,,HostType,Off,Kind,TypePtr,,,,,,,Size,Forward,Class,Parm,Level,Kind,TypePtr,,,,,,,,Off,例有聲明如下: CONST pai= 3.14 ; TYPE vector=ARRAY1..10 OF integer; VAR x, y : real ; r, s : vector ; 設(shè)當(dāng)

5、前層數(shù)和可用offset值分別為L(zhǎng)和0,構(gòu)造標(biāo)識(shí)符 pai, vector, x, y, r 和s 的屬性表示。,類型的內(nèi)部表示,類型的種類:標(biāo)準(zhǔn)、子界、枚舉、數(shù)組、記錄、 集合、文件、指針類型等等。 TypeKind=(intTy,boolTy,charTy,realTy,enumTy, subTy,arrayTy,recordTy,setTy,fileTy,pointerTy) 內(nèi)部表示:(TypeIR) 標(biāo)準(zhǔn)類型: sub: enum: array:,Up,Low,HostType,Kind,Size,,,,,,,Leng,Elems,Kind,Size,,,,,,,E

6、lemType,IndexType,Kind,Size,,,,,,,Kind,Size,,,,,record: FixBody: VariBody: set: file: pointer:,,VariBody,FixBody,Kind,Size,,Next,Off,FixUnitType,id,,,,,,,VariUnits,CaseUnit,,,,,,Next,VariBody,FixBody,,,,,,,,,,BaseType,Kind,Size,,,,,CompType,Kind,Size,,,,,,TypeName,Kind,Size,,,,,,例有如下的類型定義: at

7、= ARRAY 1..10 OF ARRAY1..100 OF integer; rt = RECORD x : real ; a : at; CASE u: boolean OF false:(k : integer); true:(y: real; b: boolean) END 構(gòu)造類型的內(nèi)部表示。,值的內(nèi)部表示,非結(jié)構(gòu)類型值的內(nèi)部表示: 實(shí)型: 指針: 有序類型:整數(shù)形式,有序類型的常量表示: 整型常量:ord(N) = N 布爾常量:ord(false)=0, ord(true) = 1 字符常量:ord(C) = ASC (C) 枚舉常量:設(shè)有枚舉類

8、型(D,A,B),則有 ord(D)=0,ord(A)=1,ord(B)=2 子界常量:設(shè)有子界類型C1..C2,則值空間 為ord(C1)...ord(C2),符號(hào)表,標(biāo)識(shí)符的作用: 聲明部分:定義了各種對(duì)象及對(duì)應(yīng)的屬性和 使用規(guī)則。 程序體:對(duì)所定義的對(duì)象進(jìn)行各種操作。,$id,idname,Idname,AttributeIR,必要性 Token: 新表符號(hào)表(種類、類型等信息):,有關(guān)符號(hào)表的操作: 添加、作用域刪除、查詢 處理符號(hào)表的模塊: 定義符號(hào)表數(shù)據(jù)結(jié)構(gòu) 定義符號(hào)表上的操作,符號(hào)表,符號(hào)表的作用:為語(yǔ)義檢查和代碼生成提供 標(biāo)識(shí)符的語(yǔ)

9、義信息。 標(biāo)識(shí)符的處理思想: 遇到定義性標(biāo)識(shí)符時(shí),在符號(hào)表中填寫(xiě) 被定義標(biāo)識(shí)符的符號(hào)項(xiàng); 當(dāng)遇到使用性標(biāo)識(shí)符時(shí),用該標(biāo)識(shí)符查 符號(hào)表求得其屬性。,標(biāo)識(shí)符的特點(diǎn),標(biāo)識(shí)符的作用域:標(biāo)識(shí)符有效的最大程序段 嵌套作用域規(guī)則:當(dāng)存在標(biāo)識(shí)符的嵌套聲明時(shí),最近定義的屬性為標(biāo)識(shí)符的當(dāng)前屬性 局部化單位:允許有聲明的程序段,,,,P:,Var x ,y,z,,,,Var x,m,n,x:=1; m:=x+1;,y:=x+1;,x:=0;,Q:,局部化區(qū)入口,Proc p( Func f( 形式過(guò)/函 p( f( Record begin,符號(hào)表的種類:全局符號(hào)表、局部符號(hào)表 原則: 進(jìn)入一個(gè)局

10、部化區(qū)時(shí),記錄本層符號(hào)表的位置 遇到定義性標(biāo)識(shí)符時(shí),構(gòu)造其語(yǔ)義信息,查本層符號(hào)表,若存在,則有重復(fù)聲明錯(cuò)誤,否則將語(yǔ)義信息填入表中 遇到一個(gè)使用性標(biāo)識(shí)符時(shí),查表(從里層到外層),查不到則有未定義標(biāo)識(shí)符錯(cuò)誤,否則構(gòu)造新的TOKEN 退出一個(gè)局部化區(qū)時(shí),作廢本層符號(hào)表,標(biāo)識(shí)符處理的原則,符號(hào)表的實(shí)現(xiàn),用局部符號(hào)表實(shí)現(xiàn) proc p:x,y,z proc p1:x,y1,z1 proc p2:y y,z x,y1,z1,y proc p3:z,a x,y,a x,z,,,,,,,,,,,,,符號(hào)表的實(shí)現(xiàn),用全局符號(hào)表實(shí)現(xiàn) proc p0:x,y proc p1:x,z y proc p2:x1,y1

11、 y x,z,,,,,,,,,,語(yǔ)義分析例子,program p() type at=array1..100 of array1..10 of inteter var x:real; a:at; i:integer; proc p1(var a1:at; a2:at) var x:integer; a:real; proc p2(n:integer) var m:1..50; x:real; m,n,x(使用性出現(xiàn)) end a1,a2,x,a,i(使用性出現(xiàn)) end x,a,i(使用性出現(xiàn)) end,,,,,,,,,,標(biāo)號(hào)的語(yǔ)義分析,標(biāo)號(hào)出現(xiàn)的位置: 標(biāo)號(hào)聲明:label 1, 2, ,

12、 n; 標(biāo)號(hào)定位(語(yǔ)句前):i:Statement; 標(biāo)號(hào)使用(Goto后):goto i; 標(biāo)號(hào)部分的語(yǔ)義錯(cuò)誤: 標(biāo)號(hào)重復(fù)聲明; 標(biāo)號(hào)重復(fù)定位; 標(biāo)號(hào)有定位而無(wú)聲明; 標(biāo)號(hào)有使用而無(wú)定位; Goto語(yǔ)句有非法轉(zhuǎn)入.,標(biāo)號(hào)部分語(yǔ)義分析原理,設(shè)置五種表:LDEC,LDEF,LUSE,SL,PL LDEC表:(Flag, Label,); LDEF、LUSE表:(Label); SL表:(kind,LDEFaddr,LUSEaddr); PL表:(LDECaddr,LDEFaddr); 標(biāo)號(hào)的語(yǔ)義分析原理 1)進(jìn)入一個(gè)過(guò)/函時(shí),將本層LDEC和LDEF的地址填入PL表; 2)遇到

13、一個(gè)標(biāo)號(hào)聲明“l(fā)abel 1, 2,,n”時(shí),建立本層LDEC表(檢查重復(fù)聲明錯(cuò)誤),其中的Flag標(biāo)志均設(shè)置為0; 3)遇到定位性標(biāo)號(hào)“:Statement”時(shí): 檢查在LDEC表中有無(wú) ,若無(wú)則表示無(wú)標(biāo)號(hào)聲明錯(cuò)誤; 若有,則檢查其Flag位,若是1,則有重復(fù)定位錯(cuò)誤; 若Flag=0,令其Flag位為1,并將 填入LDEF表中。 查看LUSE表,若其中有則將其刪除掉。,4)進(jìn)入一個(gè)結(jié)構(gòu)語(yǔ)句時(shí),將本語(yǔ)句的LDEF和LUSE表位置填入SL表; 5)遇到一個(gè)“goto ” 時(shí): 查看LDEF表,看其中是否有; 若無(wú),將填入LUSE表; 6)退出一個(gè)結(jié)構(gòu)化語(yǔ)句時(shí): 清查本層LUSE表(若有定位則刪除該項(xiàng)):用本層的LUSE中標(biāo)號(hào)查本層定位表,若查到,則把該項(xiàng)從LUSE中刪除; 作廢本層的LDEF。 7)退出一個(gè)過(guò)/函時(shí): 清查本層LUSE表; 作廢本層的LDEC和LDEF。 8)程序結(jié)束時(shí),清查L(zhǎng)USE表,若非空,則說(shuō)明有標(biāo)號(hào)為定位的錯(cuò)誤。,

展開(kāi)閱讀全文
溫馨提示:
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. 裝配圖網(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ì)自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!