一.預(yù)編譯
1.宏定義展開
#define
#include
#indef
等
2.刪除注釋 (/* */
和//
)
3.保留#pragma
懂鸵,給后續(xù)編譯用
4.添加行號,方便追查
二.詞法分析
通過
有限狀態(tài)機(jī)算法
把你寫的字符串分割成一個個的記號token
對這些token進(jìn)行簡單的歸類
三.生成抽象語法樹
1.語法分析
把token流,按順序輸入語法分析器去解讀,最終將我們希望表達(dá)的自然語義,構(gòu)建成了一個邏輯上的計算機(jī)能識別,能執(zhí)行申钩,能遍歷的結(jié)構(gòu)–樹狀結(jié)構(gòu)-----抽象語法樹 。
2.語義分析
對整個語法樹進(jìn)行遍歷瘪阁,靜態(tài)分析典蜕,把每個節(jié)點的表達(dá)式都標(biāo)識類型,并且驗證是否合法罗洗。
四.生成中間碼
中間碼就是ATS和匯編代碼之間的一層愉舔。它不直接生成匯編,而是在中間碼的設(shè)計里打平了平臺和硬件的差異伙菜。
五.生成最終的匯編代碼
1.目標(biāo)代碼生成
由中間碼生成匯編碼
2.目標(biāo)代碼優(yōu)化
對匯編代碼進(jìn)行優(yōu)化