編譯-錯(cuò)誤處理

編譯-錯(cuò)誤處理

ID:42769266

大小:142.00 KB

頁數(shù):16頁

時(shí)間:2019-09-22

編譯-錯(cuò)誤處理_第1頁
編譯-錯(cuò)誤處理_第2頁
編譯-錯(cuò)誤處理_第3頁
編譯-錯(cuò)誤處理_第4頁
編譯-錯(cuò)誤處理_第5頁
資源描述:

《編譯-錯(cuò)誤處理》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。

1、詞法錯(cuò)誤語法錯(cuò)誤語義錯(cuò)誤違反了語言的環(huán)境限制數(shù)組維數(shù)太大循環(huán)嵌套層數(shù)太多錯(cuò)誤處理詞法錯(cuò)誤、語法錯(cuò)誤和語義錯(cuò)誤詞法錯(cuò)誤:不合法單詞例:mian(){int3sum;…語法錯(cuò)誤:源程序在語法上不符合文法例: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ū)溢出。語義規(guī)則標(biāo)識(shí)符先說明后引用標(biāo)識(shí)符引用要符合作用域規(guī)定過程調(diào)用時(shí)實(shí)參與形參類型一致參與運(yùn)算的操作數(shù)類型一致下標(biāo)變量的下標(biāo)不能越界語義錯(cuò)誤主要包括:程序不符合語義規(guī)則或超越具體計(jì)算機(jī)系統(tǒng)的限制錯(cuò)誤處理方法有兩種

2、:錯(cuò)誤校正法:根據(jù)文法進(jìn)行錯(cuò)誤改正錯(cuò)誤局部化法:把錯(cuò)誤的影響限制在一個(gè)局部的范圍,避免錯(cuò)誤擴(kuò)散和影響程序其他部分的分析錯(cuò)誤局部化法詞法分析:發(fā)現(xiàn)不合法字符,顯示錯(cuò)誤,并跳過該標(biāo)識(shí)符(單詞)繼續(xù)往下分析。語法語義分析:跳過所在的語法成分(短語或語句),一般是跳到語句右界符,然后從新語句繼續(xù)往下分析。錯(cuò)誤局部化處理的實(shí)現(xiàn)(遞歸下降分析法)err:全局變量,存放錯(cuò)誤信息。用遞歸下降分析時(shí),如果發(fā)現(xiàn)錯(cuò)誤,便將有關(guān)錯(cuò)誤信息(字符串或者編號(hào))送err,然后轉(zhuǎn)錯(cuò)誤處理程序;出錯(cuò)程序先打印或顯示出錯(cuò)位置以及出錯(cuò)信息,然后跳出一段源程序,直到跳到語句的右界符或正在分析的語法成分的合法

3、后繼符號(hào)為止,然后再往下分析。if_statement(){getsym();/*讀下個(gè)單詞符號(hào)*/C();/*表達(dá)式處理程序*/ifnotsym=“then”{err:=“缺then”;error();/*出錯(cuò)處理程序*/}else{getsym();statement();}ifsym=“else”{getsym();statement();}}ifthen[else];error(){printf(linecnt,err);dogetsym();while(sym!=“;”orsym!=“end”)}發(fā)現(xiàn)錯(cuò)誤立

4、即跳到語句結(jié)尾處(語句右界符;或end),這樣處理較粗糙,將跳過太多;上例中,缺then,就將跳過整個(gè)條件語句,使得then后的語句都被跳過而不分析,其中有錯(cuò)誤就發(fā)現(xiàn)不了(3)提高錯(cuò)誤局部化程度的方法若有錯(cuò),則可跳到then若statement有錯(cuò),則可跳到elseifthen[else];6.3PL/0編譯程序的錯(cuò)誤處理對(duì)于一些易于校正的錯(cuò)誤,如丟了逗號(hào)、分號(hào)等,則指出出錯(cuò)位置,并加以校正。校正的方式就是補(bǔ)上逗號(hào)或分號(hào)。對(duì)某些錯(cuò)誤編譯程序難于確定校正的措施,為了使當(dāng)前的錯(cuò)誤不致影響整個(gè)程序的崩潰,把錯(cuò)誤盡量局

5、限在一個(gè)局部的語法單位中這樣就需跳過一些后面輸入的單詞符號(hào),直到讀入一個(gè)能使編譯程序恢復(fù)正常語法分析工作的單詞為止。通常在它的入口和出口處,調(diào)用一個(gè)測(cè)試程序TEST。當(dāng)語法分析進(jìn)入這樣的語法單元前,可用測(cè)試程序檢查當(dāng)前單詞符號(hào)是否屬于它們開始符號(hào)的集合,若不是則出錯(cuò)。在語法單位分析結(jié)束時(shí),調(diào)用test,檢查當(dāng)前符號(hào)是否屬于調(diào)用該語法單位時(shí)應(yīng)有的后繼符號(hào)集合。若當(dāng)前單詞符號(hào)是屬于所給集合,則語法分析正常進(jìn)行,否則出錯(cuò)。開始符號(hào)集合symset=setofsymbol;declbegsys,statbegsys,facbegsys:symset;開始符號(hào)集合(*主程序*

6、)declbegsys:=[constsym,varsym,procsym];statbegsys:=[beginsym,callsym,ifsym,whilesym,readsym,writesym];facbegsys:=[ident,number,lparen];后繼符號(hào)集合fsys作為參數(shù):proceduretest(s1,s2:symset;n:integer);procedureblock(lev,tx:integer;fsys:symset);procedurestatement(fsys:symset);procedureexpression(fsy

7、s:symset);procedureterm(fsys:symset);procedurefactor(fsys:symset);在進(jìn)入某個(gè)語法單位時(shí)或在語法單位分析結(jié)束時(shí),調(diào)用TEST,檢查當(dāng)前單詞是否屬于該語法單元的開始符號(hào)或后跟符號(hào)集合。╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳TESTTEST開始符號(hào)集合與后繼符號(hào)集合TEST測(cè)試過程流程圖因子的處理過程例:因子的處理過程procedurefactor(fsys:symset);vari:integer;begin入口:test(facbegsys,fsys,24);whilesyminfacbegsysd

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。