編譯過程通常能夠分爲6步:掃描、語法分析、語義分析、源代碼優化、代碼生成和目標代碼優化。數組
- 詞法分析:首先源代碼程序被輸入到掃描器,掃描器的任務很簡單,它只是簡單地進行詞法分析,運用一種相似於有限狀態機的算法能夠很輕鬆地將源代碼的字符序列分割成一系列的記號。
- 語法分析:接下來語法分析器將對由掃描器產生的記號進行語法分析,從而產生語法樹(以表達式爲節點的樹)。
- 語義分析:編譯器所能分析的語義是靜態語義,所謂靜態語義是指在編譯期能夠肯定的語義,靜態語義一般包括聲明和類型的匹配,類型的轉換。
- 中間語言生成:現代的編譯器有着不少層次的優化,每每在源代碼級別會有一個優化過程。源代碼優化器每每將整個語法樹轉換成中間代碼,它是語法樹的順序表示,其實它已經很是接近目標代碼了。
- 目標代碼生成與優化:代碼生成器將中間代碼轉換成目標機器代碼,這個過程十分依賴於目標機器,由於不一樣的機器有着不一樣的字長、寄存器、整數數據類型和浮點數數據類型等。最後目標代碼優化器對上述的目標代碼進行優化,好比選擇合適的尋址方式、使用位移來代替乘法運算、刪除多餘的指令等。