17.語(yǔ)義分析-表示基礎(chǔ)_第1頁(yè)
17.語(yǔ)義分析-表示基礎(chǔ)_第2頁(yè)
17.語(yǔ)義分析-表示基礎(chǔ)_第3頁(yè)
17.語(yǔ)義分析-表示基礎(chǔ)_第4頁(yè)
17.語(yǔ)義分析-表示基礎(chǔ)_第5頁(yè)
已閱讀5頁(yè),還剩31頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第四章:語(yǔ)義分析 語(yǔ)義檢查的內(nèi)容標(biāo)識(shí)符的語(yǔ)義表示 類型的語(yǔ)義表示1.1 語(yǔ)法和語(yǔ)義的區(qū)別語(yǔ)言包括4個(gè)內(nèi)容:詞法、語(yǔ)法、語(yǔ)義、語(yǔ)用語(yǔ)法:關(guān)于什么樣的字符串才是該語(yǔ)言在組成結(jié)構(gòu)上合法的程序的法則。語(yǔ)義:關(guān)于結(jié)構(gòu)上合法的程序的意義法則。1.2 程序設(shè)計(jì)語(yǔ)言語(yǔ)義的分類靜態(tài)語(yǔ)義在編譯階段(compile-time)可以檢查的語(yǔ)義例如:標(biāo)識(shí)符未聲明動(dòng)態(tài)語(yǔ)義目標(biāo)程序運(yùn)行時(shí)(run-time)才能檢查的語(yǔ)義例如:除零、溢出錯(cuò)誤。 1.3 語(yǔ)義分析的功能語(yǔ)義分析的內(nèi)容:類型分析;標(biāo)識(shí)符相關(guān)信息提??;語(yǔ)義分析的功能:檢查語(yǔ)義錯(cuò)誤構(gòu)造標(biāo)識(shí)符屬性表(符號(hào)表)語(yǔ)義分析的實(shí)現(xiàn):與語(yǔ)法分析相結(jié)合1.4 語(yǔ)義錯(cuò)誤檢查類型檢查

2、各種條件表達(dá)式的類型是不是bool型?運(yùn)算符的分量的類型是否相容?賦值語(yǔ)句的左右部的類型是否相容?形參和實(shí)參的類型是否相容?下標(biāo)表達(dá)式的類型是否為所允許的類型?函數(shù)說明中的函數(shù)類型和返回值的類型是否一致?1.4 語(yǔ)義錯(cuò)誤檢查一般性的語(yǔ)義檢查VE中的V是不是變量,而且是數(shù)組類型?V.id中的V是不是變量,而且是記錄類型? id是不是該記錄類型中的域名?y+f()中的f是不是函數(shù)名?形參個(gè)數(shù)和實(shí)參個(gè)數(shù)是否一致?p()語(yǔ)句中的p是不是過程名?形參個(gè)數(shù)和實(shí)參個(gè)數(shù)是否一致?*V中的V是不是指針或文件變量?是否有變量的聲明、標(biāo)識(shí)符有沒有重復(fù)聲明?2 語(yǔ)義分析處理后的結(jié)果Token序列語(yǔ)義分析NewToke

3、n序列符號(hào)表常量表類型表過/函信息表數(shù)組信息表記錄信息表形參表特殊符3.1 標(biāo)識(shí)符在程序中的出現(xiàn)聲明性出現(xiàn)如:int x, int a10;Pascal語(yǔ)言中出現(xiàn)在程序頭、函數(shù)頭部分使用性出現(xiàn)如:x=x+1; a0=a1+a2;Pascal語(yǔ)言中出現(xiàn)在程序體函數(shù)體部分3.2 標(biāo)識(shí)符的種類常量標(biāo)識(shí)符類型標(biāo)識(shí)符變量標(biāo)識(shí)符實(shí)在變量形參變量值引用型 地址引用型過函標(biāo)識(shí)符實(shí)在過函形式過函域名標(biāo)識(shí)符3.3 標(biāo)識(shí)符的屬性標(biāo)識(shí)符的語(yǔ)義信息要把其主要內(nèi)容區(qū)分開,標(biāo)識(shí)符的主要信息主要包括以下幾個(gè):名字種類信息類型信息對(duì)不同類型的獨(dú)特的信息3.4 標(biāo)識(shí)符的語(yǔ)義表示 常量標(biāo)識(shí)符其中各個(gè)域的含義如下:Name是常量的名

4、字;Kind = constKind,表明該標(biāo)識(shí)符是常量標(biāo)識(shí)符;Type = TypePtr, 其中TypePtr是指向具體常量的類型的內(nèi)部表示的指針;Value = ValPtr,其中ValPtr是指向具體常量值的內(nèi)部表示的指針。ValueTypePtrKindName常量標(biāo)識(shí)符pai 和count的內(nèi)部表示為:realPtrconstKindpai例: C語(yǔ)言的常量定義: #define pai 3.14#define count 100 intPtrconstKindcount3.4 標(biāo)識(shí)符的語(yǔ)義表示類型標(biāo)識(shí)符Name是類型標(biāo)識(shí)符的名字;Kind = typeKind, 表示標(biāo)識(shí)符是類型

5、標(biāo)識(shí)符;Type = TypePtr, 指向類型標(biāo)識(shí)符指代的類型的內(nèi)部表示。TypePtrKindName例:C語(yǔ)言的類型定義: typedef int t1; typedef int t2 10;intPtrtypeKindt1typeKindt2ElemTypeintPtrSizeKind 10 ArrayTyLow Up09類型標(biāo)識(shí)符t1和t2的內(nèi)部表示為:SizeKind1intTy3.4 標(biāo)識(shí)符的語(yǔ)義表示變量標(biāo)識(shí)符的內(nèi)部表示Kind = varKind,表明該標(biāo)識(shí)符是變量標(biāo)識(shí)符;Access = dir表示變量是直接變量,Access = indir表示變量是間接變量;Level表示

6、該變量聲明所在主程序/函數(shù)/過程的層數(shù);Off表示該變量相對(duì)它所在主程序/函數(shù)/過程的內(nèi)存塊起始地址的偏移量;Value = ValPtr, 如果變量定義時(shí)說明了初值,則為初值的內(nèi)部表示的指針,否則為空。OffLevelAccessTypePtrKindValueNameoffLdirintPtrvarKindxOff+1LdirrealPtrvarKindnullyOff+3LindirvarKindnullz變量標(biāo)識(shí)符x、y和z的內(nèi)部表示為(當(dāng)前層為L(zhǎng),當(dāng)前偏移量為off ):例: C語(yǔ)言的變量聲明: int x=10; float y; float* z; realPtrpointTy1

7、3.4 標(biāo)識(shí)符的語(yǔ)義表示域名標(biāo)識(shí)符的內(nèi)部表示Typeptr表示域名所對(duì)應(yīng)域名標(biāo)識(shí)符類型的內(nèi)部表示Kind=fieldKind,表明該標(biāo)識(shí)符是域名標(biāo)識(shí)符Off 域名相對(duì)他所在記錄的偏移量HostType記錄類型指針(宿主類型)KindTypeptrNameOffHostTypeNameForwardSizeCodeClassParamLevelKindTypePtroff3.4 標(biāo)識(shí)符的語(yǔ)義表示過程/函數(shù)標(biāo)識(shí)符的內(nèi)部表示TypePtr表示函數(shù)返回值類型的內(nèi)部表示(過程情形是NULL)Kind = routKind; Level表示過/函的層數(shù);Off只對(duì)形式過/函有效,表示形式過/函在所屬過/函

8、內(nèi)存塊中的偏移;NameForwardSizeCodeClassParamLevelKindTypePtroff3.4 標(biāo)識(shí)符的語(yǔ)義表示過程/函數(shù)標(biāo)識(shí)符的內(nèi)部表示Param表示過/函的參數(shù)表指針,參數(shù)表的結(jié)構(gòu)同符號(hào)表的結(jié)構(gòu)相同,參數(shù)信息可以填入符號(hào)表,也可以填入單獨(dú)的參數(shù)表當(dāng)中;Class= actual表示實(shí)在過/函,Class = formal表示形式過/函;Code只對(duì)實(shí)在過/函有效,表示過/函定義對(duì)應(yīng)生成的目標(biāo)代碼的起始地址,當(dāng)目標(biāo)代碼生成時(shí)回填得到,形式過/函的code為NULL;NameForwardSizeCodeClassParamLevelKindTypePtroff3.4

9、標(biāo)識(shí)符的語(yǔ)義表示過程/函數(shù)標(biāo)識(shí)符的內(nèi)部表示Size只對(duì)實(shí)在過/函有效,表示過/函的目標(biāo)代碼所占內(nèi)存區(qū)的大小,也要當(dāng)目標(biāo)代碼生成以后回填得到;Forward 屬性只對(duì)實(shí)在過/函有效,F(xiàn)orward= true表示過/函是超前聲明, Forward = false表示過/函不是超前聲明。ffalseXXXactualLroutKindintPtroff0L+1dirintPtrvarKindxoff0+1L+1indirvarKindyincformalL+1routKindintPtr2off0L+2indirintPtrvarKindaTypePtrNameKindLeveloffParmCl

10、assCodeSizeForward例:C語(yǔ)言的函數(shù)定義: int f(int x,float* y, int inc(int* a) .頭 .f的函數(shù)體部分 realPtrpointTy14. 類型的語(yǔ)義表示類型語(yǔ)義信息的作用類型的語(yǔ)義檢查分配空間的大小4. 類型的語(yǔ)義表示類型可以分成下面幾大類:標(biāo)準(zhǔn)的類型:整形、實(shí)型、bool、字符類型, 這是標(biāo)準(zhǔn)的數(shù)據(jù)類型自定義的數(shù)據(jù)類型,子界類型,枚舉類型結(jié)構(gòu)數(shù)據(jù)類型:數(shù)組,集合,記錄特殊的指針類型,文件類型類型存儲(chǔ)占用空間大小size屬性: 為方便起見,規(guī)定RealSize取2,IntSize、BoolSize、CharSize取1。4. 類型的語(yǔ)義

11、表示標(biāo)準(zhǔn)類型: 大小、種類SizeKindIntSizeintTyBoolSizeboolTyCharSizecharTyRealSizerealTyintPtrboolPtrcharPtrrealPtrSizeKind1intTy1boolTy1charTy2realTy4. 類型的語(yǔ)義表示子界類型type letter=a.z;ElemTypeSizeKindLowUpcharPtr1subrangeTyazleeterPtr4. 類型的語(yǔ)義表示枚舉類型size表示枚舉類型所占空間的大小;Kind = enumTy;ElemList是指向枚舉常量表表頭的指針.ElemListKindSiz

12、e枚舉常量表內(nèi)部表示:Name表示枚舉常量的名字;Value表示枚舉常量所代表的整數(shù)值。ValueName例:c語(yǔ)言的枚舉類型 enum color red, yellow, blue enumTy10red1yellow2blue例:c語(yǔ)言的枚舉類型 enum color red=10, yellow=red+2, blue enumTy110red12yellow13blue4. 類型的語(yǔ)義表示數(shù)組類型Size:Size = (Up-Low+1)*sizeof(ElemType)Kind = ArrayTy, 表示是數(shù)組類型;Low表示數(shù)組下標(biāo)的下界,在C語(yǔ)言中Low = 0;Up表示數(shù)組

13、下標(biāo)的上界;(low、up合在一起可以是子界類型)ElemType 表示數(shù)組成分類型的內(nèi)部表示指針。 ElemTypeTypePtrArraySizeSizeKindArrayTyLow Up例:C語(yǔ)言的數(shù)組 typedef int A10; typedef char B 5 10; ElemTypeIntPtrSizeKind ArrayTyLow Up09A和B的內(nèi)部表示分別為:ElemTypeSizeKind ArrayTyLow Up04ElemTypeCharPtrSizeKind 10 ArrayTyLow Up091050APtrBPtr4. 類型的語(yǔ)義表示結(jié)構(gòu)體和聯(lián)合體Kind

14、=structTy 表示結(jié)構(gòu)體類型Kind=unionTy表示聯(lián)合體類型RecBodyKindSizeOffTypeptrNamelinkRecBody的內(nèi)部表示如下Name表示域名Typeptr指向域的類型Off表示紀(jì)錄域相對(duì)于結(jié)構(gòu)體類型分配的內(nèi)存塊起始地址的偏移量,對(duì)于聯(lián)合類型而言,所有的域名標(biāo)識(shí)符的起始偏移都是相同的,所以可以省略; 例:typedef struct DateType int year, month, day; datetype;structTy30 intPtryear1 intPtrmonth2 intPtrdaynullSizeKindFieldListDatePtr 例:c語(yǔ)言的聯(lián)合體typedef union char ch; int i; float f; datatype;structTy2 charPtrch intPtri realPtrfdatatypePtr:4. 類型的語(yǔ)義表示指針類型size表示指針類型所占空間的大小,指地址的長(zhǎng)度(

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論