編譯器

編譯器

電腦術語
編譯器能夠識别代碼中的詞彙、句子以及各種特定的格式,并将他們轉換成計算機能夠識别的二進制形式,這個過程稱為編譯(Compile)。[1]編譯器将源程序作為輸入,翻譯産生使用目标語言的等價程序。
    中文名:編譯器 外文名:Compiler 适用領域: 所屬學科: 别 稱:譯碼器 提出者:葛麗絲·霍普 提出時間:20世紀50年代末 适用領域:計算機、單片機、編程語言

基本概述

一個現代編譯器的主要工作流程如下:

源代碼(sourcecode)→預處理器(preprocessor)→編譯器(compiler)→彙編程序(assembler)→目标代碼(objectcode)→連接器(Linker)→可執行程序(executables)。

編譯語言與解釋語言對比:

許多人将高級程序語言分為兩類:編譯型語言和解釋型語言。然而,實際上,這些語言中的大多數既可用編譯型實現也可用解釋型實現,分類實際上反映的是那種語言常見的實現方式。

編譯器是一種特殊的程序,它可以把以特定編程語言寫成的程序變為機器可以運行的機器碼。

把一個程序寫好,這時利用的環境是文本編輯器。這時我程序把程序稱為源程序。在此以後程序員可以運行相應的編譯器,通過指定需要編譯的文件的名稱就可以把相應的源文件(通過一個複雜的過程)轉化為機器碼了。

工作原理

翻譯是從源代碼(通常為高級語言)到能直接被計算機或虛拟機執行的目标代碼(通常為低級語言或機器言)。

然而,也存在從低級語言到高級語言的編譯器,這類編譯器中用來從由高級語言生成的低級語言代碼重新生成高級語言代碼的又被叫做反編譯器。

也有從一種高級語言生成另一種高級語言的編譯器,或者生成一種需要進一步處理的的中間代碼的編譯器(又叫級聯)。

典型的編譯器輸出是由包含入口點的名字和地址以及外部調用(到不在這個目标文件中的函數調用)的機器代碼所組成的目标文件。

一組目标文件,不必是同一編譯器産生,但使用的編譯器必需采用同樣的輸出格式,可以鍊接在一起并生成可以由用戶直接執行的可執行程序。

種類概述

編譯器可以生成用來在與編譯器本身所在的計算機和操作系統(平台)相同的環境下運行的目标代碼,這種編譯器又叫做“本地”編譯器。

另外,編譯器也可以生成用來在其它平台上運行的目标代碼,這種編譯器又叫做交叉編譯器。交叉編譯器在生成新的硬件平台時非常有用。

“源碼到源碼編譯器”是指用一種高級語言作為輸入,輸出也是高級語言的編譯器。

預處理器:預處理器作用是通過代入預定義等程序段将源程序補充完整。

編譯器前端:編譯器前端,前端主要負責解析輸入的源程序,由詞法分析器和語法分析器協同工作。

詞法分析器負責把源程序中的‘單詞’找出來,語法分析器把這些分散的單詞按預先定義好的語法組裝成有意義的表達式,語句,函數等等。

編譯器後端:編譯器後端編譯器後端主要負責分析,優化中間代碼以及生成機器代碼。

編譯器分析,優化,變型都可以分成兩大類:函數内還是函數之間進行。很明顯,函數間的分析,優化更準确,但需要更長的時間來完成。

對于函數内的優化,有可以根據優化施加的範圍分為,全局的和局部的。其中全局的優化是指該優化需要使用到全局的數據流和控制流信息。而局部的優化是指指導優化的信息來自基本快。

代碼分析

編譯器分析的對象是前端生成并傳遞過來的中間代碼,現代的優化型編譯器常常用好幾種層次的中間代碼來表示程序,高層的中間代碼接近輸入的源程序的格式,與輸入語言相關,包含更多的全局性的信息,和源程序的結構。

中層的中間代碼與輸入語言無關,低層的中間代碼與機器語言類似。不同的分析,優化發生在最适合的那一層中間代碼上。

常見的編譯分析有函數調用樹,控制流程圖,以及在此基礎上的變量定義-使用,使用-定義鍊,變量别名分析,指針分析,數據依賴分析等。

程序分析結果是編譯器優化和程序變形的前提條件。常見的優化和變新有:函數内嵌,無用代碼删除,标準化循環結構,循環體展開,循環體合并,分裂,數組填充,等等。

優化和變形的目的是減少代碼的長度,提高内存,緩存的使用率,減少讀寫磁盤,訪問網絡數據的頻率。更高級的優化甚至可以把序列化的代碼變成并行運算,多線程的代碼。

機器代碼的生成是優化變型後的中間代碼轉換成機器指令的過程。現代編譯器主要采用生成彙編代碼的策略,而不直接生成二進制的目标代碼。

即使在代碼生成階段,高級編譯器仍然要做很多分析,優化,變形的工作。例如如何分配寄存器,如何選擇合适的機器指令,如何合并幾句代碼成一句等等。

工作方法

首先編譯器進行語法分析,也就是要把那些字符串分離出來。

然後進行語義分析,就是把各個由語法分析分析出的語法單元的意義搞清楚。

最後生成的是目标文件,也稱為obj文件。

再經過鍊接器的鍊接就可以生成最後的可執行代碼了。

有些時候需要把多個文件産生的目标文件進行鍊接,産生最後的代碼。這一過程稱為交叉鍊接。

上一篇:二進制文件

下一篇:功率放大電路

相關詞條

相關搜索

其它詞條