錯誤處理
說明:以老師PPT為標准,借鑒部分教材內容,AlvinZH學習筆記。
1. 目標:編譯程序對於語法和語義正確的源程序要正確地編譯生成等價的目標代碼;而對於錯誤的源程序不能一發現就停止,而是要能檢查出錯誤的性質和出錯位置,並使編譯能繼續下去,同時盡可能多而准確地發現錯誤和指出各種錯誤。
2. 編譯器的錯誤處理能力
- 診察各類錯誤的能力。
- 報錯及時准確(出錯位置,錯誤性質)。
- 一次編譯找出錯誤的多少。
- 改正錯誤的能力。
- 遏制重復錯誤信息的能力。
3. 錯誤分類:語法錯誤、語義錯誤。
語法錯誤:程序結構不符合語法(包括詞法)規則的錯誤。如漏掉分號、小數點寫成逗號等錯誤。
語義錯誤:程序不符合語義規則或超越具體計算機系統的限制。如標識符先聲明再使用、溢出錯誤等。
4. 錯誤診察
(1)違反語法和語義規則以及超過編譯系統限制的錯誤。由編譯程序在語法和語義分析過程中診察出來。(語義分析要借助符號表)
(2)下標越界、計算結果溢出以及動態存儲數據區溢出等在目標程序運行時才能檢測,因此由目標程序診察。
對此,編譯程序要生成相應的目標程序代碼進行檢查並處理。
5. 錯誤報告
(1)報告內容
- 出錯位置:即源程序中出現錯誤的位置。
- 出錯性質:可直接顯示文字信息或者可給出錯誤編碼。
(2)報告方式
- 分析以后在報告
- 邊分析邊報告
6. 錯誤處理
(1)錯誤改正:指編譯診察出錯誤以后,根據文法進行錯誤改正。實際做起來很難,盡量改正如缺少分號這樣的小錯誤。
(2)錯誤局部化處理:發現錯誤后吧錯誤控制在局部范圍,避免錯誤擴散,影響其他部分分析。
- 一般原則:直接跳過。
- 錯誤局部化處理的實現:遞歸下降分析法。
- 提高錯誤局部化程度的方法:合法后繼符號集與定制符號集。
7. 目標程序運行時錯誤檢測與處理
- 下標變量下標值越界
- 計算結果溢出
- 動態存儲分配數據區溢出
一般處理方法:調用異常處理,打印錯誤信息和運行現場(寄存器和存儲器中的值)等,然后停止程序運行。
引用說明
- 邵老師課堂PDF
- 《編譯原理級編譯程序構造》
