




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第九章 錯(cuò)誤處理9.1 概述9.2 錯(cuò)誤的分類(lèi)9.3 錯(cuò)誤的診察和報(bào)告9.4 錯(cuò)誤處理技術(shù)19.1 概述1. 錯(cuò)誤處理是編譯器的必備功能之一一般情況下,用戶開(kāi)發(fā)源程序都難免出現(xiàn)各種錯(cuò)誤。一般有語(yǔ)法和語(yǔ)義錯(cuò)誤,還有鍵入疏忽等。正確的源程序:通過(guò)編譯,生成目標(biāo)代碼。錯(cuò)誤的源程序:通過(guò)編譯,發(fā)現(xiàn)并指出錯(cuò)誤。 編譯程序?qū)τ谡Z(yǔ)法和語(yǔ)義正確的源程序要正確地編譯生成等價(jià)的目標(biāo)代碼;而對(duì)于錯(cuò)誤的源程序不能一發(fā)現(xiàn)就停止,而是要能檢查出錯(cuò)誤的性質(zhì)和出錯(cuò)位置,并使編譯能繼續(xù)下去,同時(shí)盡可能多而準(zhǔn)確地發(fā)現(xiàn)錯(cuò)誤和指出各種錯(cuò)誤。22. 編譯器的錯(cuò)誤處理能力(1) 診察錯(cuò)誤的能力。(2) 報(bào)錯(cuò)及時(shí)準(zhǔn)確(出錯(cuò)位置,錯(cuò)誤性質(zhì))
2、。(3) 一次編譯找出錯(cuò)誤的多少。(4) 改正錯(cuò)誤的能力。(5) 遏制重復(fù)錯(cuò)誤信息的能力。用戶希望使用錯(cuò)誤處理能力強(qiáng)的編譯器,盡可能快地得到一個(gè)語(yǔ)法語(yǔ)義正確的源程序。39.2 錯(cuò)誤的分類(lèi)從編譯角度,將錯(cuò)誤分為兩類(lèi):語(yǔ)法錯(cuò)誤和語(yǔ)義錯(cuò)誤。語(yǔ)義錯(cuò)誤:程序不符合語(yǔ)義規(guī)則或超越具體計(jì)算機(jī)系統(tǒng)的限制。超越系統(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ǔ)法錯(cuò)誤:程序結(jié)構(gòu)不符合語(yǔ)法(包括詞法)規(guī)則的錯(cuò)誤。49.3 錯(cuò)誤的診察和報(bào)告錯(cuò)誤診察: 1. 違反語(yǔ)法和語(yǔ)義規(guī)則以及超過(guò)編譯系統(tǒng)限制的錯(cuò)誤。由編譯程序在語(yǔ)法和
3、語(yǔ)義分析過(guò)程中診察出來(lái)。(語(yǔ)義分析要借助符號(hào)表) 2. 下標(biāo)越界、計(jì)算結(jié)果溢出以及動(dòng)態(tài)存儲(chǔ)數(shù)據(jù)區(qū)溢出等在目標(biāo)程序運(yùn)行時(shí)才能檢測(cè),因此由目標(biāo)程序診察。 對(duì)此,編譯程序要生成相應(yīng)的目標(biāo)程序代碼進(jìn)行檢查并處理。5錯(cuò)誤報(bào)告:1. 出錯(cuò)位置:即源程序中出現(xiàn)錯(cuò)誤的位置。實(shí)現(xiàn):設(shè)立行號(hào)計(jì)數(shù)器 line-no 設(shè)立單詞序號(hào)計(jì)數(shù)器 char-no一旦診察出錯(cuò)誤,當(dāng)前的計(jì)數(shù)器內(nèi)容就是出錯(cuò)位置。2. 出錯(cuò)性質(zhì):可直接顯示文字信息可給出錯(cuò)誤編碼63. 報(bào)告錯(cuò)誤:(兩種方式)分析以后再報(bào)告(顯示或者打印) 編譯程序可設(shè)一個(gè)保存錯(cuò)誤信息的數(shù)據(jù)區(qū)(可用記錄型數(shù)組),將語(yǔ)法語(yǔ)義分析所診斷到的錯(cuò)誤送數(shù)據(jù)區(qū)保存,待源程序分析完以
4、后,統(tǒng)一顯示或打印錯(cuò)誤信息。例:Ax , y :=B+*C源程序行號(hào) 錯(cuò)誤序號(hào) 錯(cuò)誤性質(zhì) x x 6 缺少“ ” x x 10 表達(dá)式語(yǔ)法錯(cuò)誤7(2) 邊分析邊報(bào)告在分析一行源程序時(shí)若發(fā)現(xiàn)有錯(cuò),可以立即輸出該行源程序,并在其下輸出錯(cuò)誤信息。Line-no Ax , y :=B + *C缺“”or n錯(cuò)誤編號(hào)表達(dá)式語(yǔ)法錯(cuò) m錯(cuò)誤編號(hào)8例如有ALGOL程序段:begin . i := 1 step 1 until n do .end有時(shí)報(bào)錯(cuò)不一定十分準(zhǔn)確(位置和性質(zhì)),需進(jìn)一步分析。99.4 錯(cuò)誤處理技術(shù)發(fā)現(xiàn)錯(cuò)誤后,在報(bào)告錯(cuò)誤的同時(shí)還要對(duì)錯(cuò)誤進(jìn)行處理,以方便編譯能繼續(xù)進(jìn)行下去。目前有兩種處理辦法:
5、1. 錯(cuò)誤改正:指編譯診察出錯(cuò)誤以后,根據(jù)文法進(jìn)行錯(cuò)誤改正。如:A i , j :=B + * C編譯可根據(jù) A 的定義(聲明),查符號(hào)表知道 A 是二維數(shù)據(jù),所以應(yīng)加上“ ”;根據(jù)表達(dá)式定義去掉“ * ”(但也有可能去掉“ + ”)但不是總能做到,如:A := B C * D + E ) 是多一個(gè)右括號(hào)還是少一個(gè)左括號(hào)? 如果是少了左括號(hào),應(yīng)該少在何處?所以,要正確地改寫(xiě)錯(cuò)誤時(shí)很困難的!102. 錯(cuò)誤局部化處理:指當(dāng)編譯程序發(fā)現(xiàn)錯(cuò)誤后,盡可能將把錯(cuò)誤的影響限制在一個(gè)局部的范圍,避免錯(cuò)誤擴(kuò)散和影響程序其它部分的分析。(1) 一般原則(2) 錯(cuò)誤局部化處理的實(shí)現(xiàn)(3) 提高錯(cuò)誤局部化程度的方法1
6、1(1) 一般原則 當(dāng)診斷到錯(cuò)誤以后,就暫停對(duì)后面符號(hào)的分析,跳過(guò)錯(cuò)誤所在的語(yǔ)法成分(一旦跳過(guò)就認(rèn)為該語(yǔ)法成分是正確的)然后繼續(xù)往下分析。詞法分析:發(fā)現(xiàn)不合法字符,顯示錯(cuò)誤,并跳過(guò)該標(biāo)識(shí)符(單詞)繼續(xù)往下分析。語(yǔ)法語(yǔ)義分析:跳過(guò)所在的語(yǔ)法成分(短語(yǔ)或語(yǔ)句),一般是跳到語(yǔ)句右界符,然后從新語(yǔ)句繼續(xù)往下分析。12(2) 錯(cuò)誤局部化處理的實(shí)現(xiàn)(遞歸下降分析法)CX:全局變量,存放錯(cuò)誤信息。 用遞歸下降分析時(shí),如果發(fā)現(xiàn)錯(cuò)誤,便將有關(guān)錯(cuò)誤信息(字符串或者編號(hào))送CX,然后轉(zhuǎn)出錯(cuò)誤處理程序; 出錯(cuò)程序先打印或顯示出錯(cuò)位置以及出錯(cuò)信息,然后跳出一段源程序,直到跳到語(yǔ)句的右界符(如end、; ),或正在分析的
7、語(yǔ)法成分的合法后繼符號(hào)為止,然后再往下分析。13例:條件語(yǔ)句分析if then else ;有如下分析程序:procedure if statement; begin nextsym; /*讀下個(gè)單詞符號(hào)*/ B;/*調(diào)用布爾表達(dá)式處理程序*/ if not class = then then begin cx := 缺then;/*錯(cuò)誤性質(zhì)送cx*/ error; /*調(diào)用出錯(cuò)處理程序*/ end; else begin nextsym; statement; end; if class = else then begin nextsym; statement; end; end if st
8、atement; 14局部化處理的出錯(cuò)程序?yàn)?procedure error; begin write( cx, 源程序行號(hào), 序號(hào)) repeat nextsym; until class = ; or class = end or class = else end error;可以看出,如發(fā)現(xiàn)錯(cuò)誤就立即跳到語(yǔ)句結(jié)尾處(語(yǔ)句右界符 end , ; 等)。這樣的處理比較粗糙,將跳過(guò)太多。上例中缺then,就將跳過(guò)整個(gè)條件語(yǔ)句,使得then后面的語(yǔ)句都被跳過(guò)而不分析,其中若有錯(cuò)誤就發(fā)現(xiàn)不了。15(3) 提高錯(cuò)誤局部化程度的方法設(shè) S1: 合法后繼符號(hào)集 (某語(yǔ)法成分的后繼符號(hào)) S2: 停止符號(hào)(跳讀必須停止的符號(hào)集)16當(dāng)發(fā)現(xiàn)錯(cuò)誤時(shí): error( S1, S2 )procedure error( S1, S2 ) begin write( line-no, char-no, cx); repeat nextsym until( class in S1 or class in S2 ); end error;上面例題中的 if 語(yǔ)句中,若有錯(cuò),則可跳到then;若statement有錯(cuò),則可跳到 else。if then else ;173. 目標(biāo)程序運(yùn)行時(shí)錯(cuò)誤檢測(cè)與處理 對(duì)于這類(lèi)錯(cuò)誤,要正確地報(bào)告出錯(cuò)誤位
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 江蘇南京秦淮中學(xué)2024~2025學(xué)年高二下冊(cè)期末調(diào)研數(shù)學(xué)試題學(xué)生卷
- 江蘇常州高級(jí)中學(xué)2024~2025學(xué)年高一下冊(cè)期末質(zhì)量檢查數(shù)學(xué)試題學(xué)生卷
- 2024~2025學(xué)年山東泰安新泰七年級(jí)下冊(cè)4月期中數(shù)學(xué)試題【帶答案】
- 過(guò)敏原特異性免疫治療研究考核試卷
- 災(zāi)害影響下的公共設(shè)施應(yīng)急恢復(fù)計(jì)劃考核試卷
- 醫(yī)藥研發(fā)外包服務(wù)市場(chǎng)分析考核試卷
- 部編道德與法治三年級(jí)下冊(cè)教案
- 2025年中國(guó)PET薄膜帶數(shù)據(jù)監(jiān)測(cè)報(bào)告
- 2025年中國(guó)DVD沖壓件數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025年中國(guó)6-16防區(qū)擴(kuò)展防盜報(bào)警系統(tǒng)數(shù)據(jù)監(jiān)測(cè)報(bào)告
- 氟骨癥課件教學(xué)課件
- 腳手架知識(shí)試題集及答案
- 宣城宣州區(qū)“政聘企培”人才引進(jìn)筆試真題2024
- 成都東方廣益投資有限公司下屬企業(yè)招聘筆試真題2024
- 2024年湖南省公安廳招聘警務(wù)輔助人員筆試真題
- 中國(guó)鄉(xiāng)村建設(shè)運(yùn)動(dòng)課件
- 弘揚(yáng)中國(guó)精神的課件
- 2025至2030年中國(guó)高純氮化硅行業(yè)市場(chǎng)全景評(píng)估及發(fā)展策略分析報(bào)告
- 2025江蘇揚(yáng)州寶應(yīng)縣“鄉(xiāng)村振興青年人才”招聘67人筆試備考題庫(kù)及完整答案詳解一套
- 2024年四川省高校畢業(yè)生“三支一扶”計(jì)劃真題
- 云南省玉溪市2023-2024學(xué)年高二下學(xué)期期末教學(xué)質(zhì)量檢測(cè)語(yǔ)文試卷(含答案)
評(píng)論
0/150
提交評(píng)論