編譯原理知識(2)--編譯過程

本文轉載自:http://blog.chinaunix.net/uid-27004869-id-3330076.html 尊重原創

在計算機上執行一個高級語言的程序的一般步驟:
1)用一個編譯程序把高級語言翻譯成機器語言程序;
2)運行所得的機器語言程序求得計算結果。

編譯程序的工作過程一般可以劃分爲五個階段:
1)詞法分析:輸入源程序,對構成源程序的字符串進行掃描和分解,識別出一個個的單詞
(如基本字、標識 符、常量、運算符、標點符、左右括號等)
描述詞法規則通常用:正規式 和 有限自動機
依循的原則:詞法規則。。。線性分析。。。

2)語法分析:在詞法分析的基礎上,根據語言的語法規則,把單詞符號串分解成各類語法單位(語法範疇) (如,“短語”、“子句”、“句子”、“程序段”等)
描述語法規則通常用:上下文無關文法
依循的原則:語法規則。。。層次結構分析。。。。。

3)語義分析與中間代碼產生:對語法分析所識別出的各類語法範疇,分析其含義,並進行初步翻譯(產生中間代碼)。
描述語義規則通常用:屬性文法
依循的原則:語義規則。。。

4)優化:對前段產生的中間代碼進行加工變換,以便在最後階段能產生出更高效的目標代碼。
依循的原則:程序的等價不變換規則。

5)目標代碼生成:把中間代碼(或經優化處理後)變換成特定機器上的第幾語言代碼。
這一階段實現了最後的翻譯。

(並非所有編譯程序都分成這五個階段。)

編譯器前端(frontend)
主要負責 解析輸入的源代碼 及 語義檢查,有 語法分析器 和 語義分析器 協同工作。
1)主要負責把源碼中的單詞(token)找出來,
2)主要負責把這些分散的單詞按預先定義好的語法組裝成有意義的表達式。
3)最終,形成一個抽象的語法樹。

編譯器後端(backend)
主要負責分析,優化中間代碼 及 生成機器代碼。
每當規則匹配到一條語句時,它調用相應的例程來創建合適的抽象語法樹節點。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章