編譯器設計 - 編譯器的階段



編譯過程是一系列不同階段的序列。每個階段都從其之前的階段獲取輸入,具有自己的源程式表示,並將輸出饋送到編譯器的下一階段。讓我們瞭解編譯器的各個階段。

Phases of compiler

詞法分析

掃描程式的第一階段充當文字掃描程式。此階段將原始碼掃描為字元流,並將其轉換為有意義的詞素。詞法分析器以標記的形式表示這些詞素,例如

<token-name, attribute-value>

語法分析

下一階段稱為語法分析或解析。它以詞法分析生成的標記作為輸入,並生成一個解析樹(或語法樹)。在此階段,會根據原始碼語法檢查標記的排列,即解析器檢查標記構成的表示式在語法上是否正確。

語義分析

語義分析檢查所構建的解析樹是否遵循語言規則。例如,值的賦值是在相容的資料型別之間,以及將字串新增到整數。此外,語義分析器跟蹤識別符號、它們的型別和表示式;識別符號是否在使用前宣告等等。語義分析器產生一個帶註釋的語法樹作為輸出。

中間程式碼生成

語義分析之後,編譯器為目標機器生成原始碼的中間程式碼。它表示某個抽象機器的程式。它位於高階語言和機器語言之間。應以易於轉換為目標機器程式碼的方式生成此中間程式碼。

程式碼最佳化

下一階段對中間程式碼進行程式碼最佳化。最佳化可以理解為刪除不必要的程式碼行,並安排語句的順序以加快程式執行速度,而不會浪費資源(CPU、記憶體)。

程式碼生成

在此階段,程式碼生成器獲取中間程式碼的最佳化表示,並將其對映到目標機器語言。程式碼生成器將中間程式碼轉換為(通常)可重定位機器程式碼的序列。機器程式碼指令序列執行與中間程式碼相同的任務。

符號表

它是在編譯器的所有階段都維護的一種資料結構。所有識別符號的名稱及其型別都儲存在此處。符號表使編譯器能夠輕鬆快速地搜尋識別符號記錄並檢索它。符號表也用於作用域管理。

廣告