




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第四章:語義分析 符號(hào)表管理goto語句1.1 語義分析部分三個(gè)核心知識(shí)點(diǎn)檢查語義錯(cuò)誤抽象地址的分配(層數(shù)、偏移)符號(hào)表局部化、標(biāo)識(shí)符的作用域int main() int a; float b,d; int c; float a; int d; float c; float d; /. a=b+c+d; char d; . d=d+1; return 0;此處的a,b,c,d對(duì)應(yīng)的是什么d對(duì)應(yīng)的是什么1.2 處理原則符號(hào)表局部化處理的本質(zhì):在程序的某一個(gè)點(diǎn)P上,判斷符號(hào)表的哪些信息是有效的因此有以下原則:每進(jìn)入一個(gè)局部化區(qū),記錄本層符號(hào)表的首地址遇到聲明性標(biāo)識(shí)符時(shí),構(gòu)造其語義字,查本層的符號(hào)表
2、,檢查是否有重名,有則出錯(cuò),否則就把其語義字填到符號(hào)表里。遇到使用性出現(xiàn),查符號(hào)表,如果查到則讀取其語義字,否則出現(xiàn)語義錯(cuò)誤。退出一個(gè)局部化區(qū),作廢本層的符號(hào)表。1.3 Pascal語言的符號(hào)表的管理Pascal語言的最大特點(diǎn)就是允許嵌套的過程聲明。規(guī)定Pascal主程序的層數(shù)為0,在主程序中聲明的標(biāo)識(shí)符(包括過/函標(biāo)識(shí)符)的層數(shù)為1,在第i層過/函中聲明的標(biāo)識(shí)符(包括形參和局部標(biāo)識(shí)符)的層數(shù)為i+1(i1)。用一個(gè)Scope棧來實(shí)現(xiàn)標(biāo)識(shí)符的嵌套作用域。Scope棧的每項(xiàng)指向當(dāng)前仍有效的某層符號(hào)表的首項(xiàng),具體說Scope(0) 指向0層符號(hào)表的首項(xiàng),Scope(i) 指向i層符號(hào)表的首項(xiàng)。 P
3、ascal語言的符號(hào)表的實(shí)例(刪除法)procedure P1( ) var i,j,k:integer; t1 procedure Q2( ) var a, b: real; procedure R3( ) t2 var a,b:boolean; t3 begin R的過程體(a,b,i) end begin Q的過程體(a,b,i) end; procedure S2( ) var c,e:char; t4 begin S的過程體(a,b,i,Q) end ; t5begin P的過程體 (a,b,i,P,Q,S)20. end;21 begin.P( );.end.PijkQabRabS
4、ceScope棧PROGRAM example;符號(hào)表 關(guān)于Pascal語言的符號(hào)表的實(shí)例 (跳轉(zhuǎn)法)procedure P( ) var i,j,k:integer; t1 procedure Q( ) var a, b: real; procedure R( ) t2 var a,b:boolean; t3 begin R的過程體(a,b,i) end; begin Q的過程體(a,b,i) end; procedure S( ) var c,e:char; t4 begin S的過程體(a,b,i) end; t5begin P的過程體 (a,b,i) endbegin . end.P.
5、 ijkQabRab # #Sce #Scope棧符號(hào)表PROGRAM example;1.4 C語言的符號(hào)表的管理C語言不允許函數(shù)的嵌套聲明。一個(gè)C程序是由若干個(gè)函數(shù)并列組成的(其中一定要有main函數(shù)),這些函數(shù)的地位都是相同的。從main函數(shù)調(diào)用開始執(zhí)行,在后面聲明的函數(shù)可以調(diào)用在它之前聲明的函數(shù)。C語言的每個(gè)標(biāo)識(shí)符的層次只有兩個(gè),即0層和1層。全局標(biāo)識(shí)符和所有的函數(shù)標(biāo)識(shí)符的層數(shù)是0,函數(shù)的形式參數(shù)和局部標(biāo)識(shí)符的層數(shù)是1。xvarKindintPtrdir00swaproutKindNULLactual0sizefalseavarKindatptrindir1offobvarKindbt
6、ptrindir1offo+1tmpvarKindintPtrdir1offo+2#mainroutKindNULLactual0nullsizeFalse#yvarKindintPtrdir01int x,y;void swap(int* a, int*b ) int tmp; tmp = *a; *a = *b; *b = tmp; void main()x = 10;y = 20;swap(&x,&y);(1) 簡(jiǎn)單的C語言符號(hào)表_駐留法 atptr btptr1pointerTyintPtr btptr1pointerTyintPtr1. main()2. 13. int a;4. f
7、loat b,d;5. 26 int c;7. float a;8. 39. int d;10. float c;11. 412. float d;13. 14. a=b+c+d;15. 4 16. 317. 518. char d;19. 520. 221. 1mainroutKindNULLactual0NULLfalseavarKindintPtrdir10bvarKindrealPtrdir11dvarKindrealPtrdir13avarKindrealPtrdir16dvarKindintPtrdir18cvarKindrealPtrdir19dvarKindrealPtrdir
8、111cvarKindintPtrdir15#dvarKindcharPtrdir113(8)#(2)帶有分程序的C語言全局符號(hào)_駐留法 ( 假定off(偏移)為0 )#void main( ) int a = 1; B1int b = 1;printf(“a = %d, b = %dn”, a, b);int b = 2; B2int a = 3; B3printf(“a = %d, b = %dn”,a, b);int b = 4; B4printf(“a = %d, b = %dn”,a, b);(3)帶有分程序的C語言全局符號(hào)_刪除法a = 3, b = 2a = 1, b = 4a
9、= 1, b = 11a.1b.2b3a.4b1.5 嵌套式語言并列式語言的比較特殊情形,從程序設(shè)計(jì)語言的角度來說有嵌套式語言和并列式語言從處理難度角度來說,可能嵌套式語言復(fù)雜,并列式簡(jiǎn)單。 嵌套式語言里還要考慮變量運(yùn)行環(huán)境。 并列式語言的局部化區(qū)比較固定,層數(shù)分成兩層,全局量定義成0層,局部量定義成1層。分配地址特殊情形就是分程序結(jié)構(gòu),分程序可以是嵌套的,他的層數(shù)都是看成同一層,查局部化區(qū)每個(gè)分程序看成一個(gè)獨(dú)立的局部化區(qū)。分配抽象地址的時(shí)候?yàn)榱斯?jié)省空間,并列的分程序可以是并行的分配,嵌套的分程序必須要連續(xù)的往下分,前一個(gè)分程序從10100,并列的可以還是10100。2. goto語句和標(biāo)號(hào)處
10、理2.1 goto語句及goto之爭(zhēng)2.2 標(biāo)號(hào)的出現(xiàn)形式2.3 可能出現(xiàn)的錯(cuò)誤2.4 實(shí)現(xiàn)方式2.5 實(shí)現(xiàn)算法2.1 goto語句及goto之爭(zhēng)goto 標(biāo)號(hào)標(biāo)號(hào):在上世紀(jì)70年代,曾經(jīng)發(fā)生過關(guān)于goto語句的一場(chǎng)大辯論,主題就是要不要在高級(jí)程序設(shè)計(jì)語言中把goto語句保留下來例如:r1:x1=f(x0);if (abs(x1-x0)0.0001) goto r2;x0=x1; goto r1;r2: ; 2.2 標(biāo)號(hào)的出現(xiàn)形式標(biāo)號(hào)在程序中出現(xiàn)共有三種形式聲明性出現(xiàn) 在程序的聲明部分給出一個(gè)聲明,聲明哪些標(biāo)識(shí)符是標(biāo)號(hào)。例如:label R1,R2定位性出現(xiàn) 起到定位的作用,例如: R1:s,
11、 s是一個(gè)語句,R1是一個(gè)語句標(biāo)號(hào),表示R1這個(gè)語句標(biāo)號(hào)定位在s語句前面轉(zhuǎn)移性出現(xiàn) 例如goto R1, 即把程序的控制結(jié)構(gòu)轉(zhuǎn)到標(biāo)號(hào)為R1的位置上開始去執(zhí)行2.3 可能出現(xiàn)的錯(cuò)誤標(biāo)號(hào)的重復(fù)聲明標(biāo)號(hào)的重復(fù)定位使用的標(biāo)號(hào)未聲明(語言決定的)有轉(zhuǎn)移但是無定位2.4 實(shí)現(xiàn)方式一般有兩種實(shí)現(xiàn)方式:goto R Jump R 效率較高但實(shí)現(xiàn)困難,難以定位跳轉(zhuǎn)地址goto R Jump *R為標(biāo)號(hào)分配一個(gè)存儲(chǔ)單元,跳轉(zhuǎn)指令采用間接尋址方式,從對(duì)應(yīng)存儲(chǔ)單元中讀取該標(biāo)號(hào)定位的地址。 通常采用第二種實(shí)現(xiàn)方式2.4 實(shí)現(xiàn)方式要做好兩部分工作:1.分配存儲(chǔ)單元2.檢查語義錯(cuò)誤因此需要構(gòu)建兩個(gè)表標(biāo)號(hào)表: 未找到定位標(biāo)號(hào)表:狀態(tài)有定位填1無定位填0地址狀態(tài)標(biāo)志標(biāo)號(hào)名標(biāo)號(hào)名標(biāo)號(hào)名標(biāo)號(hào)名2.5 實(shí)現(xiàn)算法遇到聲明性標(biāo)號(hào)時(shí)查標(biāo)號(hào)表1.如果表中有該標(biāo)號(hào),說明該標(biāo)號(hào)被重復(fù)聲明2.如果沒有,則將標(biāo)號(hào)填到符號(hào)表里,狀態(tài)填0,地址無遇到定位性標(biāo)號(hào)時(shí)查標(biāo)號(hào)表1. 沒查到,報(bào)錯(cuò)(標(biāo)號(hào)未聲明)2.查到,狀態(tài)位為0,則將其變?yōu)?,生成目標(biāo)代碼時(shí)回填地址。狀態(tài)位為1,報(bào)錯(cuò)(標(biāo)號(hào)重復(fù)定位)遇到轉(zhuǎn)移性標(biāo)號(hào)時(shí)查標(biāo)號(hào)表查到,則建立指針;查不到,將該標(biāo)號(hào)填入未找到定位標(biāo)號(hào)表程序單位結(jié)束時(shí)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 未來辦公軟件發(fā)展趨勢(shì)調(diào)研報(bào)告
- 二手房包銷合同
- 農(nóng)副產(chǎn)品購銷合同兩
- 2025年江西貨運(yùn)從業(yè)資格證恢復(fù)考試題
- 《不同價(jià)態(tài)含硫物質(zhì)的轉(zhuǎn)化》作業(yè)設(shè)計(jì)方案
- 2023年高考全國乙卷數(shù)學(xué)(文)真題(解析版)
- 《藥物化學(xué)》課程標(biāo)準(zhǔn)
- 建房拆除改造合同范本
- 制砂機(jī)購買合同范例
- 中俄出口合同范例
- 《高等數(shù)學(xué)說課》課件
- 【我國新能源汽車產(chǎn)業(yè)發(fā)展分析文獻(xiàn)綜述5800字】
- 河北省普通高校專科升本科教育選拔考試英語真題及答案解析
- JCT1041-2007 混凝土裂縫用環(huán)氧樹脂灌漿材料
- 九年級(jí)化學(xué)學(xué)情分析
- 金融工程.鄭振龍(全套課件560P)
- 2023年第九屆中國國際互聯(lián)網(wǎng)+大學(xué)生創(chuàng)新創(chuàng)業(yè)大賽解讀
- 直播電商可行性分析
- 人教版四年級(jí)數(shù)學(xué)下冊(cè)教材分析精講課件
- 《龍族設(shè)定全解析》
- 產(chǎn)品手繪設(shè)計(jì)表現(xiàn)技法PPT完整全套教學(xué)課件
評(píng)論
0/150
提交評(píng)論