《編譯原理課件(hdu)CHAPTER 8(Error Detection and Repo》由會(huì)員分享,可在線閱讀,更多相關(guān)《編譯原理課件(hdu)CHAPTER 8(Error Detection and Repo(16頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、,單擊此處編輯母版標(biāo)題樣式,單擊此處編輯母版文本樣式,第二級(jí),第三級(jí),第四級(jí),第五級(jí),*,*,*,概 述,詞 法 錯(cuò) 誤 處 理,語 法 錯(cuò) 誤 處 理,語 義 錯(cuò) 誤 處 理,Chapter8 Error Detection and Reporting,*,1,、程序在語法(詞法)上正確,可以得到與源程序等價(jià)的目標(biāo)代碼,8.1,概述,2,、程序在語義上正確,運(yùn)行目標(biāo)代碼可以得到預(yù)期的輸出結(jié)果,3,、程序中錯(cuò)誤的存在是必然的,沒有一個(gè)程序第一次運(yùn)行就能正確地工作,2,錯(cuò)誤的種類:,詞法錯(cuò)誤:源程序中的拼寫錯(cuò)誤,主要在詞法分析階段發(fā)現(xiàn)(單詞符號(hào)不符合詞法規(guī)則),關(guān)鍵字拼寫錯(cuò),分界符錯(cuò),標(biāo)識(shí)符錯(cuò),
2、3,語法錯(cuò)誤:語法分析階段發(fā)現(xiàn)的源程序錯(cuò)誤(語法結(jié)構(gòu)不符合語法規(guī)則),BEGIN,與,END,不匹配,(和)不匹配,IF,與,ELSE,之間缺少,THEN,等,變量未說明或重定義,4,語義錯(cuò)誤:,靜態(tài)語義錯(cuò)誤:編譯時(shí)刻發(fā)現(xiàn)的語義錯(cuò)誤,如類型不一致或不相容,動(dòng)態(tài)語義錯(cuò)誤:運(yùn)行時(shí)刻發(fā)現(xiàn)的語義錯(cuò)誤(邏輯或算法上的錯(cuò)誤),5,一個(gè)好的編譯器應(yīng)具有較強(qiáng)的,查錯(cuò),和,改錯(cuò),的能力,查錯(cuò),:編譯程序能在編譯時(shí)刻準(zhǔn)確及時(shí)地發(fā)現(xiàn)源程序中的錯(cuò)誤,并能以簡(jiǎn)明的方式向用戶(程序書寫者)報(bào)告錯(cuò)誤的,性質(zhì),和出現(xiàn)的確切,位置,不能一發(fā)現(xiàn)問題就停下來,而應(yīng)在一次編譯中發(fā)現(xiàn)盡可能多的錯(cuò)誤,6,株連信息的遏止,:株連信息是因?yàn)?/p>
3、某個(gè)錯(cuò)誤而導(dǎo)致編譯程序向用戶(程序書寫者)發(fā)出的虛假錯(cuò)誤信息,重復(fù)信息的遏止,:重復(fù)信息是指同一個(gè)錯(cuò)誤在源程序的多處發(fā)生,如:一個(gè)未定義的標(biāo)識(shí)符號(hào),在每次引用時(shí)都報(bào)錯(cuò),其實(shí)只需報(bào)錯(cuò)一次即可,如:將,P(a,b),寫為了,P(a.b),,,則有可能報(bào)錯(cuò),,1,、,.,是不合法符號(hào)(假設(shè)刪除,.,);,2,、標(biāo)識(shí)符未定義(,a b,);,3,、,參數(shù)個(gè)數(shù)少,7,改錯(cuò)(校正):是指編譯程序在其翻譯過程中發(fā)現(xiàn)源程序的錯(cuò)誤時(shí)能適當(dāng)?shù)貙?duì)源程序作修正,8,8.2,詞法錯(cuò)誤處理,詞法錯(cuò)誤主要是拼寫錯(cuò)誤,如拼錯(cuò)一個(gè)字符、遺漏一個(gè)字符、多拼一個(gè)字符等,單詞符號(hào)用正規(guī)式表示,用有限自動(dòng)機(jī)識(shí)別,在識(shí)別單詞時(shí),通常采用
4、最長(zhǎng)子串匹配策略,如果當(dāng)前的余留輸入字符序列的任何前綴不能與所有的詞型相匹配,則表明存在錯(cuò)誤,9,詞法錯(cuò)誤的校正:,一般不能在詞法分析階段校正,可在以后的分析階段進(jìn)行校正,如:,IF b THEM,知道在,b,后應(yīng)接關(guān)鍵字,因此到關(guān)鍵字表中去尋找一個(gè)最接近,THEM,的關(guān)鍵字(,THEN,),代替,THEM,又如:,x:=,sim,(a),在符號(hào)表中找不到,sim,,,于是用,sin,代替,sim,10,8.3,語法錯(cuò)誤處理,程序設(shè)計(jì)語言的語法用上下文無關(guān)文法描述,源程序可由基于某種分析技術(shù)的識(shí)別程序來精確地識(shí)別,源程序中的語法錯(cuò)誤總可以自動(dòng)地查出,不同的分析技術(shù),發(fā)現(xiàn)錯(cuò)誤,的手段和方式是不同
5、的,LL,(,1,)、,LR,分析技術(shù)都是當(dāng)棧頂狀態(tài)與當(dāng)前輸入符號(hào)配對(duì)所對(duì)應(yīng)的分析表元素為空白時(shí)發(fā)現(xiàn)錯(cuò)誤,算符優(yōu)先分析,是當(dāng)前棧頂符號(hào)和當(dāng)前輸入符號(hào)之間不存在優(yōu)先關(guān)系時(shí)發(fā)現(xiàn)錯(cuò)誤,11,語法錯(cuò)誤的校正:,在語法分析部分已經(jīng)介紹了預(yù)測(cè)分析法和算符優(yōu)先分析法的出錯(cuò)處理(,P194 P210,),發(fā)現(xiàn)錯(cuò)誤,根據(jù)錯(cuò)誤類別,調(diào)用錯(cuò)誤處理子程序,12,LR,分析的出錯(cuò)處理:,例:,i:=i+);,掃描到,+,時(shí)進(jìn)入狀態(tài),S,k,,,ACTION(,S,k,),為出錯(cuò)(空白),這時(shí)調(diào)用錯(cuò)誤處理子程序,刪除當(dāng)前字符,給出出錯(cuò)信息,“不合法的輸入符號(hào):)”,繼續(xù)掃描,,ACTION,(,S,k,;,),,出錯(cuò),調(diào)用另一錯(cuò)誤處理子程序,將一假想的標(biāo)識(shí)符號(hào),i,及相應(yīng)狀態(tài),S,l,推入棧中,并給出出錯(cuò)信息,“缺少運(yùn)算分量”,語句最終被校正為,i:=i+i;,13,8.4,語義錯(cuò)誤處理,主要考慮在編譯時(shí)發(fā)現(xiàn)的靜態(tài)語義錯(cuò)誤,錯(cuò)誤實(shí)例:,數(shù)組變量進(jìn)行加法運(yùn)算,實(shí)型變量進(jìn)行,MOD,運(yùn)算,實(shí)型變量與字符型變量進(jìn)行加法運(yùn)算,由循環(huán)外控制轉(zhuǎn)移到循環(huán)內(nèi),14,語義錯(cuò)誤檢查:,語義分析采用的是語法制導(dǎo)翻譯,通過語法制導(dǎo)定義和翻譯方案可以實(shí)現(xiàn)類型一致性檢查和某些控制流靜態(tài)語義檢查(見語義分析部分的相關(guān)內(nèi)容),除了類型不一致或不相容,其他語義錯(cuò)誤的校正是非常困難的,15,The End!,16,