1. 【詞法分析】 詞法分析器根據詞法規則識別出源程式中的各個記號(token),每個記號代表一類單詞(lexeme)。源程式中常見的記號可以歸為幾大類:關鍵字、識別符號、字面量和特殊符號。詞法分析器的輸入是源程式,輸出是識別的記號流。詞法分析器的任務是把原始檔的字元流轉換成記號流。本質上它檢視連續的字元然後把它們識別為“單詞”。
2. 【語法分析】 語法分析器根據語法規則識別出記號流中的結構(短語、句子),並構造一棵能夠正確反映該結構的語法樹。
3. 【語義分析】 語義分析器根據語義規則對語法樹中的語法單元進行靜態語義檢查,如果型別檢查和轉換等,其目的在於保證語法正確的結構在語義上也是合法的。
4. 【中間程式碼生成】 中間程式碼生成器根據語義分析器的輸出生成中間程式碼。中間程式碼可以有若干種形式,它們的共同特徵是與具體機器無關。最常用的一種中間程式碼是三地址碼,它的一種實現方式是四元式。三地址碼的優點是便於閱讀、便於最佳化。
5. 【中間程式碼最佳化】 最佳化是編譯器的一個重要組成部分,由於編譯器將源程式翻譯成中間程式碼的工作是機械的、按固定模式進行的,因此,生成的中間程式碼往往在時間和空間上有很大浪費。當需要生成高效目的碼時,就必須進行最佳化。
6. 【目的碼生成】 目的碼生成是編譯器的最後一個階段。在生成目的碼時要考慮以下幾個問題:計算機的系統結構、指令系統、暫存器的分配以及記憶體的組織等。編譯器生成的目標程式程式碼可以有多種形式:組合語言、可重定位二進位制程式碼、記憶體形式。
7 【符號表管理】 符號表的作用是記錄源程式中符號的必要資訊,並加以合理組織,從而在編譯器的各個階段能對它們進行快速、準確的查詢和操作。符號表中的某些內容甚至要保留到程式的執行階段。
8 【出錯處理】使用者編寫的源程式中往往會有一些錯誤,可分為靜態錯誤和動態錯誤兩類。所謂動態錯誤,是指源程式中的邏輯錯誤,它們發生在程式執行的時候,也被稱作動態語義錯誤,如變數取值為零時作為除數,陣列元素引用時下標出界等。靜態錯誤又可分為語法錯誤和靜態語義錯誤。語法錯誤是指有關語言結構上的錯誤,如單詞拼寫錯、表示式中缺少運算元、begin和end不匹配等。靜態語義錯誤是指分析源程式時可以發現的語言意義上的錯誤,如加法的兩個運算元中一個是整型變數名,而另一個是陣列名等。
1. 【詞法分析】 詞法分析器根據詞法規則識別出源程式中的各個記號(token),每個記號代表一類單詞(lexeme)。源程式中常見的記號可以歸為幾大類:關鍵字、識別符號、字面量和特殊符號。詞法分析器的輸入是源程式,輸出是識別的記號流。詞法分析器的任務是把原始檔的字元流轉換成記號流。本質上它檢視連續的字元然後把它們識別為“單詞”。
2. 【語法分析】 語法分析器根據語法規則識別出記號流中的結構(短語、句子),並構造一棵能夠正確反映該結構的語法樹。
3. 【語義分析】 語義分析器根據語義規則對語法樹中的語法單元進行靜態語義檢查,如果型別檢查和轉換等,其目的在於保證語法正確的結構在語義上也是合法的。
4. 【中間程式碼生成】 中間程式碼生成器根據語義分析器的輸出生成中間程式碼。中間程式碼可以有若干種形式,它們的共同特徵是與具體機器無關。最常用的一種中間程式碼是三地址碼,它的一種實現方式是四元式。三地址碼的優點是便於閱讀、便於最佳化。
5. 【中間程式碼最佳化】 最佳化是編譯器的一個重要組成部分,由於編譯器將源程式翻譯成中間程式碼的工作是機械的、按固定模式進行的,因此,生成的中間程式碼往往在時間和空間上有很大浪費。當需要生成高效目的碼時,就必須進行最佳化。
6. 【目的碼生成】 目的碼生成是編譯器的最後一個階段。在生成目的碼時要考慮以下幾個問題:計算機的系統結構、指令系統、暫存器的分配以及記憶體的組織等。編譯器生成的目標程式程式碼可以有多種形式:組合語言、可重定位二進位制程式碼、記憶體形式。
7 【符號表管理】 符號表的作用是記錄源程式中符號的必要資訊,並加以合理組織,從而在編譯器的各個階段能對它們進行快速、準確的查詢和操作。符號表中的某些內容甚至要保留到程式的執行階段。
8 【出錯處理】使用者編寫的源程式中往往會有一些錯誤,可分為靜態錯誤和動態錯誤兩類。所謂動態錯誤,是指源程式中的邏輯錯誤,它們發生在程式執行的時候,也被稱作動態語義錯誤,如變數取值為零時作為除數,陣列元素引用時下標出界等。靜態錯誤又可分為語法錯誤和靜態語義錯誤。語法錯誤是指有關語言結構上的錯誤,如單詞拼寫錯、表示式中缺少運算元、begin和end不匹配等。靜態語義錯誤是指分析源程式時可以發現的語言意義上的錯誤,如加法的兩個運算元中一個是整型變數名,而另一個是陣列名等。