編譯原理知識點總結

編譯原理是大學計算機專業的必修科目,也是計算機的基礎知識,學好編譯原理,有助於更好的進行編程的操作,下面是編譯原理知識點總結,一起來看看吧!

編譯原理知識點總結

編譯原理知識點總結

一 編譯器

簡單講,編譯器就是將“高級語言”翻譯爲“機器語言(低級語言)”的程序。一個現代編譯器的主要工作流程:源代碼 (source code) → 預處理器

(preprocessor) → 編譯器 (compiler) → 彙編程序 (assembler) → 目標代碼 (object code) → 鏈接器(Linker) → 可執行程序 (executables)

二 工作原理

編譯是從源代碼(通常爲高階語言)到能直接被計算機或虛擬機執行的目標代碼(通常爲低階語言或機器語言)的翻譯過程。然而,也存在從低階語言到高階語言的編譯器,這類編譯器中用來從由高階語言生成的低階語言代碼重新生成高階語言代碼的又被叫做反編譯器。

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

典型的編譯器輸出是由包含入口點的名字和地址, 以及外部調用(到不在這個目標文件中的函數調用)的機器代碼所組成的目標文件。一組目標文件,不必是同一編譯器產生,但使用的編譯器必需採用同樣的輸出格式,可以鏈接在一起並生成可以由用戶直接執行的可執行程序

三 編譯器的發展史

(1) 20世紀50年代

IBM的John Backus帶領一個研究小組對FORTRAN語言及其編譯器進行開發。但由於當時人們對編譯理論瞭解不多,開發工作變得既複雜又艱苦。與此同時,Noam Chomsky開始了他對自然語言結構的研究。他的發現最終使得編譯器的結構異常簡單,甚至還帶有了一些自動化。Chomsky的研究導致了根據語言文法的難易程度以及識別它們所需要的算法來對語言分類。正如現在所稱的Chomsky架構(Chomsky Hierarchy),它包括了文法的四個層次:0型文法、1型文法、2型文法和3型文法,且其中的每一個都是其前者的特殊情況。2型文法(或上下文無關文法)被證明是程序設計語言中最有用的,而且今天它已代表着程序設計語言結構的標準方式。分析問題(parsing problem,用於上下文無關文法識別的有效算法)的研究是在60年代和70年代,它相當完善的解決了這個問題。現在它已是編譯原理中的一個標準部分。

有限狀態自動機(Finite Automaton)和正則表達式(Regular Expression)同上下文無關文法緊密相關,它們與Chomsky的3型文法相對應。對它們的研究與Chomsky的研究幾乎同時開始,並且引出了表示程序設計語言的單詞的符號方式。

人們接着又深化了生成有效目標代碼的方法,這就是最初的編譯器,它們被一直使用至今。人們通常將其稱爲優化技術(Optimization Technique),但因其從未真正地得到過被優化了的目標代碼而僅僅改進了它的有效性,因此實際上應稱作代碼改進技術(Code Improvement Technique)。

當分析問題變得好懂起來時,人們就在開發程序上花費了很大的功夫來研究這一部分的編譯器自動構造。這些程序最初被稱爲編譯器的編譯器(Compiler-compiler),但更確切地應稱爲分析程序生成器(Parser Generator),這是因爲它們僅僅能夠自動處理編譯的一部分。這些程序中最著名的是Yacc(Yet Another Compiler-compiler),它是由Steve Johnson在1975年爲Unix系統編寫的。類似的,有限狀態自動機的研究也發展了一種稱爲掃描程序生成器(Scanner Generator)的工具,Lex(與Yacc同時,由Mike Lesk爲Unix系統開發)是這其中的佼佼者。

在70年代後期和80年代早期,大量的項目都貫注於編譯器其它部分的生成自動化,這其中就包括了代碼生成。這些嘗試並未取得多少成功,這大概是因爲操作太複雜而人們又對其不甚瞭解。

(2) 國內編譯器的研發歷史

我國編譯器研發工作起步並不算晚,早在60年代初期,董韞美院士和楊芙清院士就分別在中科院和北大領導研究組開發編譯器,那時面向的高級語言是ALGOL和FORTRAN,目標機是國產機。

在改革開放前,由於國家需要,中科院、國防科大、江南計算所、北大等單位一直在研製國產計算機,包括大型機和高性能計算機(如向量機、並行機),相應的也在研製高級語言編譯器。中科院計算所以董韞美院士領導的研究組先後開發了119機、109機的類 ALGOL語言編譯器BCY。國防科大開發了向量編譯器和向量識別器。

70年代中科院計算所張兆慶教授研究組(以後稱ACTGroup)開始在國產機上研製FORTRAN語言編譯器,先後參與了衆多的院級和國家級科研攻關項目,主持開發了013,757,KJ8920等國產大型機系統中的FORTRAN語言編譯器,所研製的編譯器支持了數百萬行應用軟件的運行。

90年代以來ACTGroup承擔科學院重大項目,國家攻關項目,863項目,以及國際合作項目,先後開發了共享內存多處理機的並行識別器,分佈式內存多處理機的並行識別器, SIMD芯片和VLIW芯片的並行優化C編譯器。將編譯技術與圖形學結合,ACTGroup還推出了集成化、可視化的並行編程環境。ACTGroup在先進編譯技術和並行編程環境方面的研究工作獲國內外專家高度評價,國際著名學者評價此研究組居編譯領域的世界先進行列。

(3) 研究現狀

編譯器設計最近的發展包括:首先,編譯器包括了更加複雜算法的應用程序它用於推斷或簡化程序中的信息;這又與更爲複雜的程序設計語言的發展結合在一起。其中典型的有用於函數語言編譯的'Hindley-Milner類型檢查的統一算法。其次,編譯器已越來越成爲基於窗口的交互開發環境(Interactive Development Environment,IDE)的一部分,它包括了編輯器、連接程序、調試程序以及項目管理程序。這樣的IDE標準並沒有多少,但是對標準的窗口環境進行開發已成爲方向。另一方面,儘管近年來在編譯原理領域進行了大量的研究,但是基本的編譯器設計原理在近20年中都沒有多大的改變,它現在正迅速地成爲計算機科學課程中的中心環節。

在九十年代,作爲GNU項目或其它開放源代碼項目的一部分,許多免費編譯器和編譯器開發工具被開發出來。這些工具可用來編譯所有的計算機程序語言。它們中的一些項目被認爲是高質量的,而且對現代編譯理論感性趣的人可以很容易的得到它們的免費源代碼。

大約在1999年,SGI公佈了他們的一個工業化的並行化優化編譯器Pro64的源代碼,後被全世界多個編譯器研究小組用來做研究平臺,並命名爲Open64。Open64的設計結構好,分析優化全面,是編譯器高級研究的理想平臺。

(4)國內編譯器開發的現狀

90年代以來,國內主要以研製並行機爲主,相應的並行編譯器研製也在國內開展起來。代表性的成果有:上海復旦大學朱傳琪教授研究組研製的面向共享存儲並行機的並行優化編譯器AFT達到世界領先水平。

清華大學湯志忠教授研究組在軟流水優化技術上做了很優秀的研究工作。清華大學鄭緯民教授研究組開發了交互式並行化系統 TIPSExplorer,北京大學許卓羣教授、李曉明教授研究組在HPF(High Performance Fortran)編譯器方面做了多年工作,取得很好的研究成果。此外,國防科大、江南計算所等單位也都有從事並行編譯技術研究。隨着芯片研製,國內還有若干單位也在開展基於GCC生成面向特定芯片的編譯器工作。