編譯器設計中的錯誤處理是什麼?


檢測和報告源程式中的錯誤是編譯器的主要功能。錯誤可能發生在編譯的任何階段。一個好的編譯器必須準確地確定程式中發生錯誤的行號。在編譯的不同級別可能發生各種錯誤,如下所示:

  • 首先是詞法(掃描器)錯誤 - 這裡最常見的一些型別包括非法或無法識別的字元,主要由輸入錯誤引起。一種常見的情況是程式設計師輸入的字元在該語言中任何情況下都是非法的,並且從未使用過。掃描器可以檢測到的另一種錯誤是未終止的字元或字串常量。每當程式設計師在引號中鍵入內容並忘記尾隨引號時,就會發生這種情況。

  • 第二類錯誤是語法錯誤 - 這些錯誤由解析器捕獲。這些錯誤是最常見的錯誤之一。困難的部分是決定在發現錯誤後從哪裡繼續語法分析。如果解析器編寫不仔細,或者錯誤檢測和恢復方案不完善,解析器將遇到一個錯誤並在之後“混亂”,並在程式的其餘部分給出錯誤的錯誤訊息。

如果發生錯誤,人們希望看到的是編譯器跳過任何不正確的標記,並繼續檢測錯誤,而不會生成不是錯誤而是第一個錯誤的結果的錯誤訊息。這個方面非常重要,以至於一些編譯器根據其錯誤檢測系統的優劣進行分類。

  • 第三類錯誤是語義錯誤 - 計算機語言中使用的語義遠比口語中使用的語義簡單。這是因為在計算機語言中,一切都是非常明確定義的。程式中可能出現的語義錯誤與以下事實有關:某些語句從語法的角度來看可能是正確的,但它們毫無意義,並且無法生成任何程式碼來執行語句的含義。

  • 第四類錯誤可能在程式碼最佳化期間遇到 - 在控制流分析期間,可能存在一些永遠無法到達的語句。

  • 第五類錯誤可能發生在程式碼生成期間 - 在程式碼生成中,計算機的體系結構也起著重要作用。

  • 第六類錯誤可能在編譯器嘗試建立符號表條目時遇到 - 在此過程中,可能存在具有相互矛盾屬性的多個宣告的識別符號。

更新於:2021年10月23日

5K+ 次瀏覽

啟動您的職業生涯

完成課程獲得認證

開始學習
廣告