




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
S.PO.P語(yǔ)義分析、生成中間代碼生成目標(biāo)程序代碼優(yōu)化語(yǔ)法分析程序詞法分析程序錯(cuò)誤處理符號(hào)表管理第6章符號(hào)表管理和錯(cuò)誤處理明確符號(hào)表的作用、內(nèi)容、組織明確錯(cuò)誤處理的兩種方法:錯(cuò)誤校正和局部化處理教學(xué)目標(biāo)6.1符號(hào)表管理6.2錯(cuò)誤處理6.3PL/0編譯程序的錯(cuò)誤處理教學(xué)內(nèi)容編譯程序中使用最多的數(shù)據(jù)結(jié)構(gòu)是表源程序中的各種信息,以便查詢或修改,在這些表中,尤以符號(hào)表最為重要生存期最長(zhǎng)使用最為頻繁6.1符號(hào)表管理6.1.1符號(hào)表的作用和內(nèi)容作用:(1)收集符號(hào)的各種信息(2)語(yǔ)義檢查的依據(jù)(3)目標(biāo)代碼生成階段地址分配的依據(jù)內(nèi)容:名字欄+信息欄6.1.2符號(hào)表的組織操作:(1)向表中填入一個(gè)新標(biāo)識(shí)符。(2)對(duì)于給定一個(gè)標(biāo)識(shí)符:①查找是否在表中;②訪問它在表中的相關(guān)信息;③在表中填寫或更新它的某些信息。(3)更新或刪除一個(gè)或一組無用的項(xiàng)。6.1.2符號(hào)表的組織符號(hào)表的總體組織:(1)多張(2)一張(3)前兩種的折中符號(hào)表項(xiàng)的組織:(1)線性組織(2)排序組織(3)散列組織:效率高,為多數(shù)編譯程序采用Hash表的基本思想是:為符號(hào)表設(shè)置一個(gè)足夠大的空間M為符號(hào)構(gòu)造一個(gè)散列函數(shù)Hash(Ki),使得0≤Hash(Ki)≤M-1,i=1,2,…,n這樣查找Ki時(shí),Hash(Ki)就決定了Ki在符號(hào)表中的位置構(gòu)造Hash函數(shù)的方法:將標(biāo)識(shí)符中的每個(gè)字符轉(zhuǎn)換為一個(gè)非負(fù)整數(shù)將得到的各個(gè)整數(shù)組合成一個(gè)整數(shù)(可以將第一個(gè)、中間的和最后一個(gè)字符值加在一起,也可以將所有字符的值加起來)將結(jié)果數(shù)調(diào)整到0~M-1范圍內(nèi),可以利用取模的方法,Ki%M(M為素?cái)?shù))解決地址沖突的方法:由于用戶定義標(biāo)識(shí)符的隨機(jī)性,Hash函數(shù)值在0~M-1范圍內(nèi)不一定唯一若兩個(gè)標(biāo)識(shí)符具有相同的函數(shù)值,則可用開放地址法或鏈地址法解決沖突,有關(guān)內(nèi)容可以參考《數(shù)據(jù)結(jié)構(gòu)》的教材。詞法錯(cuò)誤語(yǔ)法錯(cuò)誤語(yǔ)義錯(cuò)誤違反了語(yǔ)言的環(huán)境限制數(shù)組維數(shù)太大循環(huán)嵌套層數(shù)太多6.2錯(cuò)誤處理詞法錯(cuò)誤、語(yǔ)法錯(cuò)誤和語(yǔ)義錯(cuò)誤詞法錯(cuò)誤:不合法單詞例:mian(){
int3sum;
…語(yǔ)法錯(cuò)誤:源程序在語(yǔ)法上不符合文法例:A[x,y=B+*C超越系統(tǒng)限制:(計(jì)算機(jī)系統(tǒng)和編譯系統(tǒng))1.數(shù)據(jù)溢出錯(cuò)誤,常數(shù)太大,計(jì)算結(jié)果溢出。2.符號(hào)表、靜態(tài)存儲(chǔ)分配數(shù)據(jù)區(qū)溢出。3.動(dòng)態(tài)存儲(chǔ)分配數(shù)據(jù)區(qū)溢出。語(yǔ)義規(guī)則標(biāo)識(shí)符先說明后引用標(biāo)識(shí)符引用要符合作用域規(guī)定過程調(diào)用時(shí)實(shí)參與形參類型一致參與運(yùn)算的操作數(shù)類型一致下標(biāo)變量的下標(biāo)不能越界語(yǔ)義錯(cuò)誤主要包括:程序不符合語(yǔ)義規(guī)則或
超越具體計(jì)算機(jī)系統(tǒng)的限制錯(cuò)誤處理方法有兩種:錯(cuò)誤校正法:根據(jù)文法進(jìn)行錯(cuò)誤改正錯(cuò)誤局部化法:把錯(cuò)誤的影響限制在一個(gè)局部的范圍,避免錯(cuò)誤擴(kuò)散和影響程序其他部分的分析錯(cuò)誤局部化法詞法分析:發(fā)現(xiàn)不合法字符,顯示錯(cuò)誤,并跳過該標(biāo)識(shí)符(單詞)繼續(xù)往下分析。語(yǔ)法語(yǔ)義分析:跳過所在的語(yǔ)法成分(短語(yǔ)或語(yǔ)句),一般是跳到語(yǔ)句右界符,然后從新語(yǔ)句繼續(xù)往下分析。錯(cuò)誤局部化處理的實(shí)現(xiàn)(遞歸下降分析法)err:全局變量,存放錯(cuò)誤信息。用遞歸下降分析時(shí),如果發(fā)現(xiàn)錯(cuò)誤,便將有關(guān)錯(cuò)誤信息(字符串或者編號(hào))送err,然后轉(zhuǎn)錯(cuò)誤處理程序;出錯(cuò)程序先打印或顯示出錯(cuò)位置以及出錯(cuò)信息,然后跳出一段源程序,直到跳到語(yǔ)句的右界符或正在分析的語(yǔ)法成分的合法后繼符號(hào)為止,然后再往下分析。if_statement(){getsym();/*讀下個(gè)單詞符號(hào)*/C();/*表達(dá)式處理程序*/ifnotsym=“then”{err:=“缺then”;
error();/*出錯(cuò)處理程序*/}else{getsym();statement();}ifsym=“else”{getsym();statement();}}if<C>then<statement>[else<statement>];error(){printf(linecnt,err);do
getsym();while(sym!=“;”orsym!=“end”)}發(fā)現(xiàn)錯(cuò)誤立即跳到語(yǔ)句結(jié)尾處(語(yǔ)句右界符
;或end),這樣處理較粗糙,將跳過太多(3)提高錯(cuò)誤局部化程度的方法設(shè)S1:
合法后繼符號(hào)集(某語(yǔ)法成分的后繼符號(hào))S2:
停止符號(hào)集(跳讀必須停止的符號(hào)集)error(S1,S2){printf(linecnt,err);dogetsym();while(symnotinS1ornotinS2)}若<C>有錯(cuò),則可跳到then若statement有錯(cuò),則可跳到elseif<C>then<statement>[else<statement>];6.3
PL/0編譯程序的錯(cuò)誤處理錯(cuò)誤局部化處理遵循以下兩條原則。(1)鎮(zhèn)定原則(2)關(guān)鍵字原則在進(jìn)入某個(gè)語(yǔ)法單位時(shí),調(diào)用test檢查當(dāng)前符號(hào)是否屬于該語(yǔ)法單位的首符號(hào)集。若不屬于,則濾去首符號(hào)和后繼符號(hào)集合外的所有符號(hào)。在語(yǔ)法單位分析結(jié)束時(shí),調(diào)用test,檢查當(dāng)前符號(hào)是否屬于調(diào)用該語(yǔ)法單位時(shí)應(yīng)有的后繼符號(hào)集合。若不屬于,則濾去后繼符號(hào)和首符號(hào)集合外的所有符號(hào)。test過程有三個(gè)參數(shù):s1、s2、nS1:可允許的下一個(gè)符號(hào)集合,如果當(dāng)前符號(hào)不在此集合中,當(dāng)即得到一個(gè)錯(cuò)誤號(hào);S2:另加的停止符號(hào)集合,在某上出錯(cuò)狀態(tài)下,可恢復(fù)語(yǔ)法分析繼續(xù)正常工作的補(bǔ)充單詞符號(hào)集合;整數(shù)n,表示有關(guān)錯(cuò)誤的診斷號(hào)。在進(jìn)入某個(gè)語(yǔ)法單位時(shí),調(diào)用TEST濾去開始符號(hào)前的所有符號(hào)。在語(yǔ)法單位分析結(jié)束時(shí),調(diào)用TEST濾去當(dāng)前符號(hào)到后繼符號(hào)之間的所有符號(hào)。╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳TESTTEST開始符號(hào)集合與后繼符號(hào)集合TEST測(cè)試過程流程圖voidfactor(fsys)structnode*fsys;{voidexpression();intm=0,n=0,i;char*tempset[]={"rpsren",NULL};structnode*temp;temp=(structnode*)malloc(sizeof(structnode));while(tempset[m]!=NULL)temp->pa[n++]=tempset[m++];temp->pa[n]=NULL;
test(facbegsys,fsys,24);/*24:表達(dá)式的開始符不能是此符號(hào)*/
while(in(sym,facbegsys)==1){if(strcmp(sym,"ident")==0){i=position(id);if(i==0)error(11);elseswitch(table[i].kind){
因子的處理過程
caseconstant:gen(lit,0,table[i].val);break;casevariable:gen(lod,lev-table[i].level,table[i].adr);break;caseprocedur:error(21);break; }getsym();}elseif(strcmp(sym,"number")==0){if(num>AMAX){error(31);num=0;}gen(lit,0,num);getsym();}elseif(strcmp(sym,"lparen")==0){getsym();expression(add(temp,fsys));if(strcmp(sym,"rparen")==0)getsym();
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- GB 28895-2025防護(hù)服裝抗油易去污防靜電防護(hù)服
- 2025河南鄭州市新密市國(guó)開投資集團(tuán)有限公司招聘管理人員和專業(yè)技術(shù)人員9人模擬試卷附答案詳解(完整版)
- 2025貴州丹寨縣人民檢察院招聘聘用制檢察輔助人員模擬試卷附答案詳解(突破訓(xùn)練)
- 2025廣東深圳市優(yōu)才人力資源有限公司招聘編外聘用人員1人(派遣至深圳市龍崗區(qū)機(jī)關(guān)事務(wù)管理局)考前自測(cè)高頻考點(diǎn)模擬試題及答案詳解參考
- 2025年甘肅省煙草專賣局(公司)招聘相關(guān)事宜模擬試卷及參考答案詳解一套
- 2025福建福州市水路運(yùn)輸事業(yè)發(fā)展中心招聘編外人員1人模擬試卷完整答案詳解
- 2025廣東深圳大學(xué)人文學(xué)院李立教授團(tuán)隊(duì)博士后招聘1人考前自測(cè)高頻考點(diǎn)模擬試題及參考答案詳解1套
- 2025南華大學(xué)附屬南華醫(yī)院招聘62人(湖南)模擬試卷完整答案詳解
- 2025年濟(jì)寧嘉祥縣事業(yè)單位公開招聘工作人員(教育類)(68人)考前自測(cè)高頻考點(diǎn)模擬試題及答案詳解(全優(yōu))
- 2025年中國(guó)環(huán)保涂料添加劑行業(yè)市場(chǎng)分析及投資價(jià)值評(píng)估前景預(yù)測(cè)報(bào)告
- 2025政治理論時(shí)政熱點(diǎn)知識(shí)試題庫(kù)附完整答案
- 民間借貸抗訴申請(qǐng)書
- 四川康定偏巖子金礦床成礦流體特征:剖析與啟示
- 關(guān)于創(chuàng)造力的課件
- 消毒滅菌教學(xué)課件
- 醫(yī)院安全防暴培訓(xùn)課件
- 2025年考研護(hù)理綜合全程真題及答案
- 工會(huì)安全監(jiān)督培訓(xùn)課件
- 污水處理廠冬季運(yùn)行保障方案
- 學(xué)堂在線 知識(shí)產(chǎn)權(quán)法 章節(jié)測(cè)試答案
- 小學(xué)道德與法治五年級(jí)上冊(cè)《煙酒有危害》教學(xué)課件
評(píng)論
0/150
提交評(píng)論