




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、主要內(nèi)容:主要內(nèi)容:. 語義分析概述語義分析概述( (必要性、功能、描述方法必要性、功能、描述方法) ). 符號表符號表. 類型表達式類型表達式. 聲明和程序體的語義分析聲明和程序體的語義分析語法和語義的區(qū)別語法和語義的區(qū)別: : 語法:語法:關于什么樣的字符串才是該語言關于什么樣的字符串才是該語言 在組成結構上合法的程序的法則。在組成結構上合法的程序的法則。 語義:語義:關于結構上合法的程序的意義的關于結構上合法的程序的意義的 法則。法則。 語義種類語義種類 靜態(tài)語義:靜態(tài)語義:在編譯階段在編譯階段( (從程序文本上從程序文本上) )可可 以檢查的語義。以檢查的語義。 動態(tài)語義:動態(tài)語義:通
2、過程序的執(zhí)行才能檢查的語通過程序的執(zhí)行才能檢查的語 義。義。 語義的描述語義的描述語義形式化方法:語義形式化方法: 1. 1. 操作語義操作語義 2. 2. 指稱語義指稱語義 3. 3. 公理語義公理語義 4. 4. 代數(shù)語義代數(shù)語義 語義分析的內(nèi)容:語義分析的內(nèi)容: 類型分析類型分析 標識符相關信息標識符相關信息 語義分析的功能:語義分析的功能: 檢查語義錯誤檢查語義錯誤 構造標識符屬性表(符號表)構造標識符屬性表(符號表) 語義分析的實現(xiàn):語義分析的實現(xiàn): 與語法分析相結合與語法分析相結合語義分析語義分析語法分析樹語法分析樹TokenListTokenList語義定義語義定義自然語言描述規(guī)
3、定自然語言描述規(guī)定符號表符號表判定判定 標識符的內(nèi)部表示標識符的內(nèi)部表示 類型的內(nèi)部表示類型的內(nèi)部表示 值的內(nèi)部表示值的內(nèi)部表示三種內(nèi)部表示三種內(nèi)部表示CodeCodeZ 標識符種類:標識符種類: 常量名、類型名、變量名、函數(shù)名、過程名、域名。常量名、類型名、變量名、函數(shù)名、過程名、域名。 TYPE idkind=( consKind, typeKind, varKind, fieldKind, procKind,funcKind )Z 內(nèi)部表示(內(nèi)部表示(AttributeIR):): 常量:常量: 類型:類型: 變量:變量: 域名域名*: 過函:過函:ValueValueKindKindT
4、ypePtrTypePtrForwardForwardKindKindTypePtrTypePtrOffOffLevelLevelAccessAccessKindKindTypePtrTypePtrHostTypeHostTypeOffOffKindKindTypePtrTypePtrSizeSize ForwardForwardClassClassParmParmLevelLevelKindKindTypePtrTypePtrOffOffb 例有聲明如下:例有聲明如下: CONST pai= 3.14 ;CONST pai= 3.14 ; TYPE vector=ARRAY1.10 OF i
5、nteger; TYPE vector=ARRAY1.10 OF integer; VAR x, y : real ; VAR x, y : real ; r, s : vector ; r, s : vector ; 設當前層數(shù)和可用設當前層數(shù)和可用offsetoffset值分別為值分別為L L和和0 0,構造標識符構造標識符 pai, vector, x, y, r pai, vector, x, y, r 和和s s 的屬性表示。的屬性表示。Z 類型的種類:類型的種類:標準、子界、枚舉、數(shù)組、記錄、標準、子界、枚舉、數(shù)組、記錄、 集合、文件、指針類型等等。集合、文件、指針類型等等。 Ty
6、peKind=(intTy,boolTy,charTy,realTy,enumTy, subTy,arrayTy,recordTy,setTy,fileTy,pointerTy)Z 內(nèi)部表示:內(nèi)部表示:( (TypeIR)TypeIR) 標準類型:標準類型: sub: enum: array: UpLowHostTypeKindSizeLengElemsKindSizeElemTypeIndexTypeKindSizeKindSizerecord: FixBody: VariBody:set: file:pointer: VariBodyFixBodyKindSizeNextOffFixUni
7、tTypeidVariUnitsCaseUnitNextVariBodyFixBodyOffCaseTypeidBaseTypeKindSizeCompTypeKindSizeTypeNameKindSizeb例有如下的類型定義:例有如下的類型定義: at = ARRAY 1.10 OF at = ARRAY 1.10 OF ARRAY1.100 OF integer; ARRAY1.100 OF integer; rt = RECORD x : real ; a : at; rt = RECORD x : real ; a : at; CASE u: boolean OF CASE u: b
8、oolean OF false:(k : integer); false:(k : integer); true:(y: real; b: boolean) true:(y: real; b: boolean) END END 構造類型的內(nèi)部表示。構造類型的內(nèi)部表示。Z 非結構類型值的內(nèi)部表示:非結構類型值的內(nèi)部表示: 實型實型 指針指針 有序類型:整數(shù)形式有序類型:整數(shù)形式 有序類型的常量表示:有序類型的常量表示: Z 整型常量:整型常量:ord(N) = Nord(N) = NZ 布爾常量:布爾常量:ord(false)=0, ord(true) = 1ord(false)=0, ord(
9、true) = 1Z 字符常量:字符常量:ord(C) = ASC (C)ord(C) = ASC (C)Z 枚舉常量:枚舉常量:設有枚舉類型設有枚舉類型( (D,A,B),D,A,B),則有則有 ord(D)=0,ord(A)=1,ord(B)=2ord(D)=0,ord(A)=1,ord(B)=2Z 子界常量:子界常量:設有子界類型設有子界類型C C1 1.C.C2 2, ,則值空間則值空間 為為 ord(Cord(C1 1).ord(C).ord(C2 2)Z 標識符的作用:標識符的作用: 聲明部分:定義了各種對象及對應的屬性和聲明部分:定義了各種對象及對應的屬性和 使用規(guī)則。使用規(guī)則。
10、 程序體:對所定義的對象進行各種操作。程序體:對所定義的對象進行各種操作。$ $idididnameidnameIdnameIdname AttributeIRAttributeIRZ 必要性必要性 TokenToken: 新表符號表(種類、類型等信息):新表符號表(種類、類型等信息):Z 有關符號表的操作:有關符號表的操作: 添加、作用域刪除、查詢添加、作用域刪除、查詢Z 處理符號表的模塊:處理符號表的模塊: 定義符號表數(shù)據(jù)結構定義符號表數(shù)據(jù)結構 定義符號表上的操作定義符號表上的操作符號表的作用:符號表的作用:為語義檢查和代碼生成提供為語義檢查和代碼生成提供 標識符的語義信息。標識符的語義信
11、息。標識符的處理思想:標識符的處理思想: 遇到定義性標識符時,在符號表中填寫遇到定義性標識符時,在符號表中填寫 被定義標識符的符號項;被定義標識符的符號項; 當遇到使用性標識符時,用該標識符查當遇到使用性標識符時,用該標識符查 符號表求得其屬性。符號表求得其屬性。標識符的作用域:標識符的作用域:標識符有效的最大程序段標識符有效的最大程序段嵌套作用域規(guī)則:嵌套作用域規(guī)則:當存在標識符的嵌套聲明當存在標識符的嵌套聲明時,最近定義的屬性為標識符的當前屬性時,最近定義的屬性為標識符的當前屬性局部化單位:局部化單位:允許有聲明的程序段允許有聲明的程序段P:P:Var x ,y,zVar x ,y,zVa
12、r x,m,nVar x,m,nx:=1;x:=1;m:=x+1;m:=x+1;y:=x+1;y:=x+1;x:=0;x:=0;Q:Q:lProc p(lFunc f(l形式過形式過/函函 p( f(lRecord begin符號表的種類:符號表的種類:全局符號表、局部符號表全局符號表、局部符號表原則:原則: 進入一個局部化區(qū)時,記錄本層符號表的進入一個局部化區(qū)時,記錄本層符號表的位置位置 遇到定義性標識符時,構造其語義信息,遇到定義性標識符時,構造其語義信息,查本層符號表,若存在,則有重復聲明錯查本層符號表,若存在,則有重復聲明錯誤,否則將語義信息填入表中誤,否則將語義信息填入表中 遇到一個
13、使用性標識符時,查表(從里層遇到一個使用性標識符時,查表(從里層到外層),查不到則有未定義標識符錯到外層),查不到則有未定義標識符錯誤,否則構造新的誤,否則構造新的TOKENTOKEN 退出一個局部化區(qū)時,作廢本層符號表退出一個局部化區(qū)時,作廢本層符號表標識符處理的原則標識符處理的原則用局部符號表實現(xiàn)用局部符號表實現(xiàn)proc p:x,y,zproc p:x,y,zproc p1:x,y1,z1proc p1:x,y1,z1proc p2:yproc p2:yy,zy,zx,y1,z1,yx,y1,z1,yproc p3:z,aproc p3:z,ax,y,ax,y,ax,zx,z用全局符號表實
14、現(xiàn)用全局符號表實現(xiàn)proc p0:x,yproc p0:x,yproc p1:x,zproc p1:x,zy yproc p2:x1,y1proc p2:x1,y1y yx,z x,z program p()program p()type at=array1.100 of array1.10 of intetertype at=array1.100 of array1.10 of intetervar x:real; a:at; i:integer;var x:real; a:at; i:integer;proc p1(var a1:atproc p1(var a1:at; a2:at)a2:
15、at)var x:integer; a:real;var x:integer; a:real;proc p2(n:integer)proc p2(n:integer)var m:1.50; x:real;var m:1.50; x:real;m,n,x(m,n,x(使用性出現(xiàn)使用性出現(xiàn)) )endenda1,a2,x,a,ia1,a2,x,a,i(使用性出現(xiàn))(使用性出現(xiàn))endendx,a,ix,a,i(使用性出現(xiàn))(使用性出現(xiàn))endendZ 標號出現(xiàn)的位置:標號出現(xiàn)的位置: 標號聲明:標號聲明:label label 1 1, , 2 2, , , , n n; ; 標號定位標號定位(語
16、句前):語句前):i i:StatementStatement; 標號使用(標號使用(GotoGoto后):后):goto goto i i; ;Z 標號部分的語義錯誤:標號部分的語義錯誤: 標號重復聲明;標號重復聲明; 標號重復定位;標號重復定位; 標號有定位而無聲明;標號有定位而無聲明; 標號有使用而無定位;標號有使用而無定位; GotoGoto語句有非法轉入。語句有非法轉入。 設置五種表:設置五種表:LDECLDEC,LDEFLDEF,LUSELUSE,SLSL,PLPL LDECLDEC表表:( (Flag, LabelFlag, Label,); LDEFLDEF、LUSELUSE表
17、:表:( (Label)Label); SLSL表:表:(kind(kind,LDEFaddrLDEFaddr,LUSEaddr)LUSEaddr); PLPL表:表:(LDECaddr(LDECaddr,LDEFaddr)LDEFaddr);標號的語義分析原理標號的語義分析原理1 1)進入一個進入一個過過/ /函函時,將本層時,將本層LDECLDEC和和LDEFLDEF的地址填入的地址填入PLPL表。表。2 2)遇到一個標號聲明遇到一個標號聲明“l(fā)abel label 1 1, , 2 2,n n”時,建立本層時,建立本層LDECLDEC表(檢表(檢查重復聲明錯誤),其中的查重復聲明錯誤),
18、其中的FlagFlag標志均設置為標志均設置為0 0。3 3)遇到定位性標號遇到定位性標號“:Statement:Statement”時:時:l檢查在檢查在LDECLDEC表中有無表中有無 ,若無則表示無標號聲明錯誤;,若無則表示無標號聲明錯誤;l若有,則檢查其若有,則檢查其FlagFlag位,若是位,若是1 1,則有重復定位錯誤;,則有重復定位錯誤;l若若Flag=0Flag=0,令其,令其FlagFlag位為位為1 1,并將,并將 填入填入LDEFLDEF表中;表中;l查看查看LUSELUSE表,若其中有表,若其中有則將其刪除掉。則將其刪除掉。4 4)進入一個進入一個結構語句結構語句時,將本語句的時,將本語句的LDEFLDEF和和LUSELUSE表位置填表位置填入入SLSL表。表。5 5)遇到一個遇到一個“goto goto ” 時:時:l查看查看LDEFLDEF表,看其中是否有表,看其中是否有;l若無,將填入若無,將填入LUSELUSE表。表。6 6)退出一個
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 項目推廣演講致辭稿
- 個人車輛掛靠租賃公司協(xié)議書
- 2025年柳州a2貨運從業(yè)資格證模擬考試題
- 2025年南京貨運從業(yè)資格證考試模擬考試題庫答案大全
- 小學英語試卷聽力稿
- 書籍設計印刷合同范本文檔
- 個體診所自查報告
- 廈門落戶中介合同范本
- 業(yè)務員個人年度工作總結
- 三年級語文備課組工作總結
- 信息安全意識培訓課件
- 社團活動情況登記表
- 基本樂理及音樂常識類知識考試題及答案
- 山東省濰坊市2023-2024學年高二下學期期末測試+英語試卷
- 2023年北京市初三一模數(shù)學試題匯編:選擇壓軸(第8題)
- AIGC視域下非遺文創(chuàng)產(chǎn)品的數(shù)字化轉型升級路徑研究
- 生涯規(guī)劃與就業(yè)創(chuàng)業(yè)全套課件電子教案板
- 公司投資占股協(xié)議書模板
- 石油采油井場水土保持方案報告書
- 2024-2030年中國護眼臺燈行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略分析報告
- 五下音樂《美麗的家鄉(xiāng)(簡譜、五線譜)》課件
評論
0/150
提交評論