圖 1.3 編譯的各個階段
詞法分析: 從左到右乙個乙個字元地讀入源程式,對構成源程式的字元進行掃瞄和分解,從而識別出乙個個單詞。
語法分析: 在詞法分析的基礎上將單詞序列分解成各類語法短語,這些語法短語也稱為語法單位,可以表示成語法樹。
語法分析依據的是語言的語法規則,即描述程式結構的規則例如 id1 := id2 + id3 * 10
圖 1.5 語句 id1:=id2+id3*10的語法樹
語義分析: 審查源程式有無語義錯誤,為**生成階段收集型別資訊。
中間**生成: 有的編譯程式將源**變成一種內部表示形式,是一種結構簡單、含義明確的記號系統,具有容易生成、容易翻譯成目標**的特點。
例如 id1 := id2 + id3 * 10 可以表示為如下表
num運算子運算物件1
運算物件2結果1
inttoreal10-
t
1t_1
t12
*id3
t
1t_1
t1t
2t_2
t23
+id2
t
2t_2
t2t
3t_3
t34:=t
3t_3
t3-
id1**優化: 對前一階段的中間**進行變幻或進行改造,目的是使生成的目標**更為高效,以省時間和空間。
上面的表可以優化為下面的表
num運算子運算物件1
運算物件2結果1
*id3
10.0
t
1t_1
t12
+id2
t
1t_1
t1id1
目標**生成: 把中間**變換成特定機器上的絕對指令**或可重定位的指令**或彙編指令**。
編譯最後階段,它的工作與硬體系統結構和指令含義有關
並不是所有過程都是必須的,有的不需要中間**,有的不需要優化,不一而足
前端: 主要依賴於源語言而與目標機器無關
通常包括 詞法分析,語法分析, 語義分析,中間**生成,**優化後端: 主要值依賴於目標機器而一般不依賴與源語言
只與中間**有關的那些階段的工作,即目標**生成,以及相關出錯處理和符號表操作遍或者趟 : 乙個編譯過程可由一遍、兩遍或多遍完成,是對源程式或其等價的中間語言程式從頭到尾掃瞄並完成規定任務的過程。
優點: 1.編譯程式少佔記憶體,2程式設計程式的邏輯結構更加清晰;編譯程式是乙個語言處理程式,它把乙個高階語言程式翻譯成某個機器的組合語言程式或者二進位制**程式,這個二進位制**程式在機器上執行以生成結果。缺點: 增加編譯過程時間
pl/0 語言編譯系統由編譯程式和解釋程式兩部分組成。
使用t形圖來表示乙個編譯程式設計的三個方面的語言
pl/0
+-----------------------------+
|pl/0 類 p-code|
+----+ +----------+
|c/pascal/ja^a|
+-------------+
GCC編譯程式
gcc gnu compiler collection 是linux下最主要的一種編譯工具。gcc編譯格式 gcc 選項 源檔名 選項 目標檔名 採用預設得方式編譯原始檔,系統會生成a.out可執行檔案 採用顯式編譯成目標檔案,在編譯成可執行檔案 gcc c hello.c 生成hello.o gc...
編譯程式的工作過程
編譯程式的工作過程一般劃分為五個階段 詞法分析 語法分析 語義分析與中間 產生 優化 目標 生成。詞法分析 也就是從左到右乙個乙個的讀入源程式,識別乙個單詞或符號,並進行歸類。語法分析 在詞法分析的基礎上,將單詞序列分解成各類語法短語,如 程式 語句 表示式 等。語義分析 審查源程式是否有語義的錯誤...
mysql 編譯程式 mysql安裝編譯
mysql 安裝前確認以下包已經裝好 gcc gcc c ncurses devel usr sbin groupadd mysql usr sbin useradd g mysql mysql tar zxvf mysql 5.4.0 beta.tar.gz cd mysql 5.4.0 beta...