版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第九章 錯誤處理9.1 概述9.2 錯誤的分類9.3 錯誤的診察和報(bào)告9.4 錯誤處理技術(shù)19.1 概述1. 錯誤處理是編譯器的必備功能之一一般情況下,用戶開發(fā)源程序都難免出現(xiàn)各種錯誤。一般有語法和語義錯誤,還有鍵入疏忽等。正確的源程序:通過編譯,生成目標(biāo)代碼。錯誤的源程序:通過編譯,發(fā)現(xiàn)并指出錯誤。 編譯程序?qū)τ谡Z法和語義正確的源程序要正確地編譯生成等價(jià)的目標(biāo)代碼;而對于錯誤的源程序不能一發(fā)現(xiàn)就停止,而是要能檢查出錯誤的性質(zhì)和出錯位置,并使編譯能繼續(xù)下去,同時(shí)盡可能多而準(zhǔn)確地發(fā)現(xiàn)錯誤和指出各種錯誤。22. 編譯器的錯誤處理能力(1) 診察錯誤的能力。(2) 報(bào)錯及時(shí)準(zhǔn)確(出錯位置,錯誤性質(zhì))
2、。(3) 一次編譯找出錯誤的多少。(4) 改正錯誤的能力。(5) 遏制重復(fù)錯誤信息的能力。用戶希望使用錯誤處理能力強(qiáng)的編譯器,盡可能快地得到一個語法語義正確的源程序。39.2 錯誤的分類從編譯角度,將錯誤分為兩類:語法錯誤和語義錯誤。語義錯誤:程序不符合語義規(guī)則或超越具體計(jì)算機(jī)系統(tǒng)的限制。超越系統(tǒng)限制:(計(jì)算機(jī)系統(tǒng)和編譯系統(tǒng))1. 數(shù)據(jù)溢出錯誤,常數(shù)太大,計(jì)算結(jié)果溢出。2. 符號表、靜態(tài)存儲分配數(shù)據(jù)區(qū)溢出。3. 動態(tài)存儲分配數(shù)據(jù)區(qū)溢出。語法錯誤:程序結(jié)構(gòu)不符合語法(包括詞法)規(guī)則的錯誤。49.3 錯誤的診察和報(bào)告錯誤診察: 1. 違反語法和語義規(guī)則以及超過編譯系統(tǒng)限制的錯誤。由編譯程序在語法和
3、語義分析過程中診察出來。(語義分析要借助符號表) 2. 下標(biāo)越界、計(jì)算結(jié)果溢出以及動態(tài)存儲數(shù)據(jù)區(qū)溢出等在目標(biāo)程序運(yùn)行時(shí)才能檢測,因此由目標(biāo)程序診察。 對此,編譯程序要生成相應(yīng)的目標(biāo)程序代碼進(jìn)行檢查并處理。5錯誤報(bào)告:1. 出錯位置:即源程序中出現(xiàn)錯誤的位置。實(shí)現(xiàn):設(shè)立行號計(jì)數(shù)器 line-no 設(shè)立單詞序號計(jì)數(shù)器 char-no一旦診察出錯誤,當(dāng)前的計(jì)數(shù)器內(nèi)容就是出錯位置。2. 出錯性質(zhì):可直接顯示文字信息可給出錯誤編碼63. 報(bào)告錯誤:(兩種方式)分析以后再報(bào)告(顯示或者打?。?編譯程序可設(shè)一個保存錯誤信息的數(shù)據(jù)區(qū)(可用記錄型數(shù)組),將語法語義分析所診斷到的錯誤送數(shù)據(jù)區(qū)保存,待源程序分析完以
4、后,統(tǒng)一顯示或打印錯誤信息。例:Ax , y :=B+*C源程序行號 錯誤序號 錯誤性質(zhì) x x 6 缺少“ ” x x 10 表達(dá)式語法錯誤7(2) 邊分析邊報(bào)告在分析一行源程序時(shí)若發(fā)現(xiàn)有錯,可以立即輸出該行源程序,并在其下輸出錯誤信息。Line-no Ax , y :=B + *C缺“”or n錯誤編號表達(dá)式語法錯 m錯誤編號8例如有ALGOL程序段:begin . i := 1 step 1 until n do .end有時(shí)報(bào)錯不一定十分準(zhǔn)確(位置和性質(zhì)),需進(jìn)一步分析。99.4 錯誤處理技術(shù)發(fā)現(xiàn)錯誤后,在報(bào)告錯誤的同時(shí)還要對錯誤進(jìn)行處理,以方便編譯能繼續(xù)進(jìn)行下去。目前有兩種處理辦法:
5、1. 錯誤改正:指編譯診察出錯誤以后,根據(jù)文法進(jìn)行錯誤改正。如:A i , j :=B + * C編譯可根據(jù) A 的定義(聲明),查符號表知道 A 是二維數(shù)據(jù),所以應(yīng)加上“ ”;根據(jù)表達(dá)式定義去掉“ * ”(但也有可能去掉“ + ”)但不是總能做到,如:A := B C * D + E ) 是多一個右括號還是少一個左括號? 如果是少了左括號,應(yīng)該少在何處?所以,要正確地改寫錯誤時(shí)很困難的!102. 錯誤局部化處理:指當(dāng)編譯程序發(fā)現(xiàn)錯誤后,盡可能將把錯誤的影響限制在一個局部的范圍,避免錯誤擴(kuò)散和影響程序其它部分的分析。(1) 一般原則(2) 錯誤局部化處理的實(shí)現(xiàn)(3) 提高錯誤局部化程度的方法1
6、1(1) 一般原則 當(dāng)診斷到錯誤以后,就暫停對后面符號的分析,跳過錯誤所在的語法成分(一旦跳過就認(rèn)為該語法成分是正確的)然后繼續(xù)往下分析。詞法分析:發(fā)現(xiàn)不合法字符,顯示錯誤,并跳過該標(biāo)識符(單詞)繼續(xù)往下分析。語法語義分析:跳過所在的語法成分(短語或語句),一般是跳到語句右界符,然后從新語句繼續(xù)往下分析。12(2) 錯誤局部化處理的實(shí)現(xiàn)(遞歸下降分析法)CX:全局變量,存放錯誤信息。 用遞歸下降分析時(shí),如果發(fā)現(xiàn)錯誤,便將有關(guān)錯誤信息(字符串或者編號)送CX,然后轉(zhuǎn)出錯誤處理程序; 出錯程序先打印或顯示出錯位置以及出錯信息,然后跳出一段源程序,直到跳到語句的右界符(如end、; ),或正在分析的
7、語法成分的合法后繼符號為止,然后再往下分析。13例:條件語句分析if then else ;有如下分析程序:procedure if statement; begin nextsym; /*讀下個單詞符號*/ B;/*調(diào)用布爾表達(dá)式處理程序*/ if not class = then then begin cx := 缺then;/*錯誤性質(zhì)送cx*/ error; /*調(diào)用出錯處理程序*/ end; else begin nextsym; statement; end; if class = else then begin nextsym; statement; end; end if st
8、atement; 14局部化處理的出錯程序?yàn)?procedure error; begin write( cx, 源程序行號, 序號) repeat nextsym; until class = ; or class = end or class = else end error;可以看出,如發(fā)現(xiàn)錯誤就立即跳到語句結(jié)尾處(語句右界符 end , ; 等)。這樣的處理比較粗糙,將跳過太多。上例中缺then,就將跳過整個條件語句,使得then后面的語句都被跳過而不分析,其中若有錯誤就發(fā)現(xiàn)不了。15(3) 提高錯誤局部化程度的方法設(shè) S1: 合法后繼符號集 (某語法成分的后繼符號) S2: 停止符號(跳讀必須停止的符號集)16當(dāng)發(fā)現(xiàn)錯誤時(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 語句中,若有錯,則可跳到then;若statement有錯,則可跳到 else。if then else ;173. 目標(biāo)程序運(yùn)行時(shí)錯誤檢測與處理 對于這類錯誤,要正確地報(bào)告出錯誤位
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 四川省巴中市恩陽區(qū)2025屆中考三模生物試題含解析
- 四川成都市成華區(qū)2025屆中考生物仿真試卷含解析
- 陜西省西安市碑林區(qū)西北工業(yè)大附屬中學(xué)2025屆中考生物適應(yīng)性模擬試題含解析
- 2025屆廣西壯族自治區(qū)南寧市中考押題生物預(yù)測卷含解析
- 2025屆云南省文山市達(dá)標(biāo)名校中考沖刺卷生物試題含解析
- 2025屆江蘇省鎮(zhèn)江外國語學(xué)校中考生物模擬預(yù)測題含解析
- GB/T 45168-2024保健食品中吡啶甲酸鉻的測定
- 廊坊三中重點(diǎn)名校2025屆中考聯(lián)考生物試題含解析2
- A證(企業(yè)負(fù)責(zé)人)-安全員A證考試模擬題練習(xí)
- 滬科版九年級物理全一冊《第十七章從指南針到磁浮列車》章末測試卷含答案
- 電梯維修協(xié)議書
- 礦工睡崗檢查書
- 仁恒江灣城修建幕墻工程監(jiān)理實(shí)施細(xì)則
- 廣東省佛山南海區(qū)四校聯(lián)考2023屆中考試題猜想數(shù)學(xué)試卷含解析
- 2023年江蘇蘇州工業(yè)園區(qū)管委會招聘筆試參考題庫附帶答案詳解
- GB/T 10752-2005船用鋼管對焊接頭
- 酒店婚宴銷售年度工作計(jì)劃4篇
- 健康教育工作考核記錄表
- 裝飾工程施工技術(shù)ppt課件(完整版)
- SJG 05-2020 基坑支護(hù)技術(shù)標(biāo)準(zhǔn)-高清現(xiàn)行
- 汽車維修價(jià)格表
評論
0/150
提交評論