王佳林 張美玲 高涵
【摘要】? ? 編譯原理是研究如何將各種編程語言轉換為機器語言的一門科學。本文主要介紹了編譯原理中編譯工作的基本流程,以及各個流程在整個編譯工作過程中起到的作用,同時本文對編譯工作在實際的應用中是如何實現(xiàn)的這一問題進行了探討。
【關鍵詞】? ? 編譯技術? ? 機器語言? ? 詞法分析? ? 語法分析
一、編譯技術的產(chǎn)生
最早期的計算機編程是用機器語言編程,這種直接跟計算機硬件進行信息溝通的方式有很大的局限性。雖然機器語言能夠被計算機硬件直接識別并執(zhí)行,具有靈活速度快的特點,但是機器語言對編程人員的要求門檻太高,它不容易被理解接受,并且記憶困難,極易出錯。編程人員使用機器語言編程往往要花費大量的時間和精力在編寫程序上,這大大影響了編程效率。為了提高程序的編寫效率,增強程序的可讀性,匯編語言和高級語言隨著科技的發(fā)展?jié)u漸出現(xiàn)。匯編語言較為基礎,是高級語言形成過程中的中間產(chǎn)物。高級語言封裝性更強,在操作上更加簡便,在編寫和理解上也有更好的可讀性。高級語言和匯編語言都需要進行加工才能被計算機識別,這就需要一個能將這些指令轉化成機器指令的翻譯程序——編譯器。因為計算機能夠識別的只有二進制代碼,如何讓計算機識別并執(zhí)行這些語言呢,這就是編譯原理所要研究的問題。
二、編譯的基本流程
(一)詞法分析階段。首先是詞法分析階段。在詞法分析階段中源程序按照從左到右的順序被依次掃描,掃描過程中源程序的字符流會按照規(guī)定好的構詞規(guī)則被識別成單詞符號,這一工作由詞法分析程序完成。此外,在詞法分析階段,詞法分析器除了能完成單詞符號的識別工作,還能夠對程序中的一些信息進行過濾,同時詞法分析程序可以將編譯時產(chǎn)生的錯誤信息對應到源程序的具體位置,便于程序修改。(二)語法分析階段。在語法分析階段,語法分析程序會將詞法分析中產(chǎn)生的單詞序列劃分成各類語法短語,并對源程序的結構進行正確性的判斷,檢查源程序中是否存在語法錯誤。根據(jù)語法分析中采用的方法的不同,語法分析在具體實現(xiàn)時又分為好多方法,其中每一種方法都有各自的適用情況和特點。(三)語義分析和中間代碼產(chǎn)生階段。在語義分析和中間代碼生成階段中,首先要進行的是語義分析工作。顧名思義語義分析主要進行語義審查,編譯器會審查程序中語法結構的靜態(tài)語義。程序中可能存在一些語法正確但是在規(guī)定限制下沒有意義的語句。語義分析的分析范圍有確定類型、類型檢查等。在完成語義分析并且分析無誤后,進入中間代碼產(chǎn)生階段,生成中間代碼,根據(jù)實際情況的不同中間代碼又分為逆波蘭式、三元式、四元式等形式,這些都是在具體程序內(nèi)部涉及到的內(nèi)容。(四)優(yōu)化。所謂中間代碼優(yōu)化指的是在不改變源程序運行結果的前提下,對中間代碼或目標代碼進行等價替換。優(yōu)化后所產(chǎn)生的目標代碼運行時間更短,占用空間更小、效率更加高效。在整個編譯過程中都可以增加優(yōu)化過程,但最突出的還是體現(xiàn)在中間代碼的優(yōu)化上。(五)目標代碼生成。目標代碼生成是編譯的最后一個階段,在這一階段中,主要完成的任務是將前面產(chǎn)生的中間代碼轉化成特定機器上的機器語言或匯編語言。因為計算機只能識別機器語言,如果生成的目標代碼是匯編語言的形式,要將匯編代碼再轉化成機器代碼才能讓計算機運行。
三、編譯的實現(xiàn)
(一)預處理。預處理是指在對源程序進行編譯之前,要對程序中的一些特殊命令進行處理的工作。c語言中,編譯預處理命令以#開頭,這些預處理的命令被預處理程序處理替換后由編譯程序進行進一步加工。以c語言為例,編譯預處理有宏定義、文件包含、條件編譯等,程序人員編寫的*.c源程序文件經(jīng)過預處理程序處理后,隨后進入編譯程序進行編譯最后生成目標程序*.obj。編譯預處理完成了標識符的替代工作,為編譯的順利進行打下基礎。(二)編譯。在編譯階段中對經(jīng)過了預處理的源文件進行一連串的編譯工作,包括詞法分析,語法分析,語義分析以及優(yōu)化等操作,最后生成相應的匯編代碼。編譯是通過編譯器實現(xiàn)的,在編譯器中會進行上述一系列的操作。(三)匯編。匯編工作由匯編器實現(xiàn),匯編器負責匯編代碼向機器代碼的轉化工作,根據(jù)匯編指令和機器指令的對應關系表,將匯編代碼轉化成可執(zhí)行文件,只有轉化成計算機能夠識別的二進制代碼,才可以交給計算機執(zhí)行。(四)鏈接。最后就是鏈接操作,雖然在匯編階段源程序已經(jīng)轉化成了計算機能夠識別的二進制代碼的形式,但是還要完成一些其他工作。因為在源程序中可能引用了其他頭文件中的函數(shù),或者調(diào)用了其他庫中已有的函數(shù),只有將這些全部鏈接在一起,才能保證程序的正確執(zhí)行,這就是鏈接操作。很多時候開發(fā)人員不用自己去實現(xiàn)一些函數(shù),而可以直接調(diào)用現(xiàn)有庫中的函數(shù),既節(jié)省了時間,又可以減小出錯率。鏈接技術的實現(xiàn)大大降低了代碼的復寫率,提高了程序的開發(fā)效率。
結語:編譯技術像是在高級語言和計算機硬件系統(tǒng)之間架起了一座橋梁,它將高級語言進行編譯處理使其能夠在計算機上執(zhí)行。自從有了編譯技術,程序編寫的效率明顯提升,計算機編程的門檻大大降低,使得更多的學者能夠投身于計算機編程領域。可以說編譯技術是計算機領域中的核心技術,研究編譯技術對計算機技術的發(fā)展有著重要意義。
參? 考? 文? 獻
[1]徐紅,陸紅陽.編譯原理實驗動態(tài)演示系統(tǒng)的設計與實現(xiàn)[J].電腦知識與技術,2005(27):86-88.