1、編譯過程概述編程
計算機語言之因此能由單一的機器語言發展到今天的數千種高級語言,就是由於有了編譯技術。數據結構
1.用到編譯原理和技術的軟件工具編輯器
2.編譯程序工具
程序設計語言分爲:機器語言、彙編語言、高級語言測試
翻譯程序:將某一種語言(源語言)程序轉換爲與其邏輯上等價的另外一種語言(目標語言)程序;優化
編譯程序:源語言爲高級語言,目標語言爲彙編語言或機器語言的翻譯程序;翻譯
彙編程序:源語言爲彙編語言,目標語言爲機器語言的翻譯程序;設計
解釋程序:源語言程序做爲輸入,但不產生目標程序,而是邊解釋邊執行源程序自己。調試
3.編譯程序的結構對象
詞法分析器、語法分析器、語義分析和中間代碼生成、優化器、目標代碼生成
2、編譯系統的基本過程
1.詞法分析
從左到右一個字符一個字符的讀入源程序,對構成源程序的字符串進行掃描和分解,從而識別出一個個單詞
2.語法分析
在詞法分析的基礎上將單詞序列分解成各種語法、短語,如程序、表達式、語句等,並構造語法分析樹(描述了句子的語法結構)。
3.語義分析
語義分析是在語法分析程序肯定出語法短語後,審查有無語義錯誤(語義檢查),併爲代碼收集標識符的屬性信息;
符號表是用於存放標識符的屬性信息的數據結構。
4.中間代碼生成
完成語法分析和語義分析後,編譯程序將源程序變成一種內部表示形式,這種內部表示形式叫作中間語言或中間代碼。它是一種結構簡單、含義明確的記號系統。三元式、中間三元式、四元式
四元式的形式爲:(運算符,運算對象1,運算對象2,結果)
5.代碼優化
爲了使生成的目標代碼更加高效,能夠對產生的中間代碼進行等價變換改造,這就是代碼優化。使其運行的快一些,佔用空間少一些
機器無關代碼優化、機器相關代碼優化
6.目標代碼生成
把中間代碼變化成特定機器上的絕對指令代碼或可重定位的二進制指令代碼或彙編指令代碼
彙編語言形式
可重定位二進制代碼形式
內存形式
7.符號表
表格中記錄着源程序的各類信息,以便須要時能夠隨時查詢或修改。
做用:做爲進行語法合法性檢查的依據、做爲目標代碼生成階段地址分配的依據。
8.錯誤檢測
對於源程序錯誤處理的程度是衡量一個編譯程序良莠的標準。
表格管理和錯誤檢測是貫穿整個編譯過程的
3、編譯程序的開發方法
1.自編譯
編寫源程序和編寫編譯程序的語言是同一種高級語言。
2.交叉編譯
交叉編譯是指用A機器上的編譯程序來產生在B機器上運行的目標代碼。例如,若A機器上已有C語言能夠運行,則可用A機器中的C語言編寫一個編譯程序,它的源程序是C語言程序,而產生的目標程序則是基於B機器的,即可以在B機器上執行的低級語言程序。
3.自展
自展的方法是:首先肯定一個很是簡單的核心語言L0,而後用機器語言或彙編語言編寫出它的編譯程序T0;再把語言L0擴充到L1,此時有L0⊂L1,並用L0編寫L1的編譯程序T1(即自編譯);而後再把語言L1擴充爲L2,此時有L1⊂L2,並用L1編寫L2的編譯程序T2……這樣不斷擴展下去,直到完成所要求的編譯程序爲止。
4.移植
移植是指A機器上的某種高級語言的編譯程序稍加改動後可以在B機器上運行。一個程序若能較容易地從A機器搬到B機器上運行,則稱該程序是可移植的。移植具備必定的侷限性。