編譯器可以生成用來在與編譯器本身所在的計算機和操作系統(tǒng)(平臺)相同的環(huán)境下運行的目標(biāo)代碼,這種編譯器又叫做“本地”編譯器。另外,編譯器也可以生成用來在其它平臺上運行的目標(biāo)代碼,這種編譯器又叫做交叉編譯器。交叉編譯器在生成新的硬件平臺時非常有用。“源碼到源碼編譯器”是指用一種高級語言作為輸入,輸出也是高級語言的編譯器。例如: 自動并行化編譯器經(jīng)常采用一種高級語言作為輸入,轉(zhuǎn)換其中的代碼,并用并行代碼注釋對它進行注釋(如OpenMP)或者用語言構(gòu)造進行注釋(如FORTRAN的DOALL指令)。
處理器
作用是通過代入預(yù)定義等程序段將源程序補充完整。
前端
前端主要負責(zé)解析(parse)輸入的源代碼,由語法分析器和語意分析器協(xié)同工作。語法分析器負責(zé)把源代碼中的‘單詞’(Token)找出來,語意分析器把這些分散的單詞按預(yù)先定義好的語法組裝成有意義的表達式,語句 ,函數(shù)等等。 例如“a = b + c;”前端語法分析器看到的是“a, =, b , +, c;”,語意分析器按定義的語法,先把他們組裝成表達式“b + c”,再組裝成“a = b + c”的語句。 前端還負責(zé)語義(semantic checking)的檢查,例如檢測參與運算的變量是否是同一類型的,簡單的錯誤處理。最終的結(jié)果常常是一個抽象的語法樹(abstract syntax tree,或 AST),這樣后端可以在此基礎(chǔ)上進一步優(yōu)化,處理。
后端
編譯器后端主要負責(zé)分析,優(yōu)化中間代碼(Intermediate representation)以及生成機器代碼(Code Generation)。
一般說來所有的編譯器分析,優(yōu)化,變型都可以分成兩大類: 函數(shù)內(nèi)(intraprocedural)還是函數(shù)之間(interprocedural)進行。很明顯,函數(shù)間的分析,優(yōu)化更準(zhǔn)確,但需要更長的時間來完成。