編譯原理學習筆記(十一)錯誤處理

2022-04-12 07:26:09 字數 850 閱讀 7074

1.目標:編譯程式對於語法和語義正確的源程式要正確地編譯生成等價的目標**;而對於錯誤的源程式不能一發現就停止,而是要能檢查出錯誤的性質和出錯位置,並使編譯能繼續下去,同時盡可能多而準確地發現錯誤和指出各種錯誤。

2.編譯器的錯誤處理能力

3.錯誤分類:語法錯誤、語義錯誤。

語法錯誤:程式結構不符合語法(包括詞法)規則的錯誤。如漏掉分號、小數點寫成逗號等錯誤。

語義錯誤:程式不符合語義規則或超越具體計算機系統的限制。如識別符號先宣告再使用、溢位錯誤等。

4.錯誤診察

(1)違反語法和語義規則以及超過編譯系統限制的錯誤。由編譯程式在語法和語義分析過程中診察出來。(語義分析要借助符號表)

(2)下標越界、計算結果溢位以及動態儲存資料區溢位等在目標程式執行時才能檢測,因此由目標程式診察。

對此,編譯程式要生成相應的目標程式**進行檢查並處理。

5.錯誤報告

(1)報告內容

(2)報告方式

6.錯誤處理

(1)錯誤改正:指編譯診察出錯誤以後,根據文法進行錯誤改正。實際做起來很難,盡量改正如缺少分號這樣的小錯誤。

(2)錯誤區域性化處理:發現錯誤後吧錯誤控制在區域性範圍,避免錯誤擴散,影響其他部分分析。

7.目標程式執行時錯誤檢測與處理

一般處理方法:呼叫異常處理,列印錯誤資訊和執行現場(暫存器和儲存器中的值)等,然後停止程式執行。

引用說明

編譯原理學習筆記 9 4 錯誤處理技術

前言 更新中。跳過目錄 發現錯誤後,在報告錯誤的同時還要對錯誤進行處理,以便編譯能繼續進行下去。目前有兩種處理辦法 指編譯診察出錯誤以後,根據語言的文法和對程式意圖作某種猜測,進行錯誤改正。例 a i,j b c但不是總能做到改正錯誤 例 a b c d e 所以,要正確地改寫錯誤是很困難的。指當編...

C 學習一錯誤處理

c 中的錯誤處理,涉及到try.catch throw來實現。最簡單的是 void fun int main catch int return 0 這裡只是遇到丟擲整型的值就進入對應的int型的錯誤處理。如果要獲取到丟擲的值就要使用引用。void fun int main catch int e r...

編譯原理學習筆記 9 2 錯誤的分類

前言 更新中。跳過目錄 從編譯程式角度,將源程式中錯誤分為兩類 程式結構不符合語法 包括詞法 規則的錯誤。例 乙個具有三處語法錯誤的賦值語句 a x,y 3 1416 t t h 對語法錯誤大家都很熟悉,它可以在編譯過程的詞法分析階段或語法分析階段查詢出來。一般來說,對於語法錯誤,編譯程式能比較準確...