編譯原理知識點(diǎn)總結
編譯原理是大學(xué)計算機專(zhuān)業(yè)的必修科目,也是計算機的基礎知識,學(xué)好編譯原理,有助于更好的進(jìn)行編程的操作,下面是編譯原理知識點(diǎn)總結,一起來(lái)看看吧!
編譯原理知識點(diǎn)總結
一 編譯器
簡(jiǎn)單講,編譯器就是將“高級語(yǔ)言”翻譯為“機器語(yǔ)言(低級語(yǔ)言)”的程序。一個(gè)現代編譯器的主要工作流程:源代碼 (source code) → 預處理器
(preprocessor) → 編譯器 (compiler) → 匯編程序 (assembler) → 目標代碼 (object code) → 鏈接器(Linker) → 可執行程序 (executables)
二 工作原理
編譯是從源代碼(通常為高階語(yǔ)言)到能直接被計算機或虛擬機執行的目標代碼(通常為低階語(yǔ)言或機器語(yǔ)言)的翻譯過(guò)程。然而,也存在從低階語(yǔ)言到高階語(yǔ)言的編譯器,這類(lèi)編譯器中用來(lái)從由高階語(yǔ)言生成的低階語(yǔ)言代碼重新生成高階語(yǔ)言代碼的又被叫做反編譯器。
也有從一種高階語(yǔ)言生成另一種高階語(yǔ)言的編譯器,或者生成一種需要進(jìn)一步處理的的中間代碼的編譯器(又叫級聯(lián))。
典型的編譯器輸出是由包含入口點(diǎn)的名字和地址, 以及外部調用(到不在這個(gè)目標文件中的函數調用)的機器代碼所組成的目標文件。一組目標文件,不必是同一編譯器產(chǎn)生,但使用的編譯器必需采用同樣的輸出格式,可以鏈接在一起并生成可以由用戶(hù)直接執行的可執行程序
三 編譯器的發(fā)展史
(1) 20世紀50年代
IBM的John Backus帶領(lǐng)一個(gè)研究小組對FORTRAN語(yǔ)言及其編譯器進(jìn)行開(kāi)發(fā)。但由于當時(shí)人們對編譯理論了解不多,開(kāi)發(fā)工作變得既復雜又艱苦。與此同時(shí),Noam Chomsky開(kāi)始了他對自然語(yǔ)言結構的研究。他的發(fā)現最終使得編譯器的結構異常簡(jiǎn)單,甚至還帶有了一些自動(dòng)化。Chomsky的`研究導致了根據語(yǔ)言文法的難易程度以及識別它們所需要的算法來(lái)對語(yǔ)言分類(lèi)。正如現在所稱(chēng)的Chomsky架構(Chomsky Hierarchy),它包括了文法的四個(gè)層次:0型文法、1型文法、2型文法和3型文法,且其中的每一個(gè)都是其前者的特殊情況。2型文法(或上下文無(wú)關(guān)文法)被證明是程序設計語(yǔ)言中最有用的,而且今天它已代表著(zhù)程序設計語(yǔ)言結構的標準方式。分析問(wèn)題(parsing problem,用于上下文無(wú)關(guān)文法識別的有效算法)的研究是在60年代和70年代,它相當完善的解決了這個(gè)問(wèn)題,F在它已是編譯原理中的一個(gè)標準部分。
有限狀態(tài)自動(dòng)機(Finite Automaton)和正則表達式(Regular Expression)同上下文無(wú)關(guān)文法緊密相關(guān),它們與Chomsky的3型文法相對應。對它們的研究與Chomsky的研究幾乎同時(shí)開(kāi)始,并且引出了表示程序設計語(yǔ)言的單詞的符號方式。
人們接著(zhù)又深化了生成有效目標代碼的方法,這就是最初的編譯器,它們被一直使用至今。人們通常將其稱(chēng)為優(yōu)化技術(shù)(Optimization Technique),但因其從未真正地得到過(guò)被優(yōu)化了的目標代碼而僅僅改進(jìn)了它的有效性,因此實(shí)際上應稱(chēng)作代碼改進(jìn)技術(shù)(Code Improvement Technique)。
當分析問(wèn)題變得好懂起來(lái)時(shí),人們就在開(kāi)發(fā)程序上花費了很大的功夫來(lái)研究這一部分的編譯器自動(dòng)構造。這些程序最初被稱(chēng)為編譯器的編譯器(Compiler-compiler),但更確切地應稱(chēng)為分析程序生成器(Parser Generator),這是因為它們僅僅能夠自動(dòng)處理編譯的一部分。這些程序中最著(zhù)名的是Yacc(Yet Another Compiler-compiler),它是由Steve Johnson在1975年為Unix系統編寫(xiě)的。類(lèi)似的,有限狀態(tài)自動(dòng)機的研究也發(fā)展了一種稱(chēng)為掃描程序生成器(Scanner Generator)的工具,Lex(與Yacc同時(shí),由Mike Lesk為Unix系統開(kāi)發(fā))是這其中的佼佼者。
在70年代后期和80年代早期,大量的項目都貫注于編譯器其它部分的生成自動(dòng)化,這其中就包括了代碼生成。這些嘗試并未取得多少成功,這大概是因為操作太復雜而人們又對其不甚了解。
(2) 國內編譯器的研發(fā)歷史
我國編譯器研發(fā)工作起步并不算晚,早在60年代初期,董韞美院士和楊芙清院士就分別在中科院和北大領(lǐng)導研究組開(kāi)發(fā)編譯器,那時(shí)面向的高級語(yǔ)言是ALGOL和FORTRAN,目標機是國產(chǎn)機。
在改革開(kāi)放前,由于國家需要,中科院、國防科大、江南計算所、北大等單位一直在研制國產(chǎn)計算機,包括大型機和高性能計算機(如向量機、并行機),相應的也在研制高級語(yǔ)言編譯器。中科院計算所以董韞美院士領(lǐng)導的研究組先后開(kāi)發(fā)了119機、109機的類(lèi) ALGOL語(yǔ)言編譯器BCY。國防科大開(kāi)發(fā)了向量編譯器和向量識別器。
70年代中科院計算所張兆慶教授研究組(以后稱(chēng)ACTGroup)開(kāi)始在國產(chǎn)機上研制FORTRAN語(yǔ)言編譯器,先后參與了眾多的院級和國家級科研攻關(guān)項目,主持開(kāi)發(fā)了013,757,KJ8920等國產(chǎn)大型機系統中的FORTRAN語(yǔ)言編譯器,所研制的編譯器支持了數百萬(wàn)行應用軟件的運行。
90年代以來(lái)ACTGroup承擔科學(xué)院重大項目,國家攻關(guān)項目,863項目,以及國際合作項目,先后開(kāi)發(fā)了共享內存多處理機的并行識別器,分布式內存多處理機的并行識別器, SIMD芯片和VLIW芯片的并行優(yōu)化C編譯器。將編譯技術(shù)與圖形學(xué)結合,ACTGroup還推出了集成化、可視化的并行編程環(huán)境。ACTGroup在先進(jìn)編譯技術(shù)和并行編程環(huán)境方面的研究工作獲國內外專(zhuān)家高度評價(jià),國際著(zhù)名學(xué)者評價(jià)此研究組居編譯領(lǐng)域的世界先進(jìn)行列。
(3) 研究現狀
編譯器設計最近的發(fā)展包括:首先,編譯器包括了更加復雜算法的應用程序它用于推斷或簡(jiǎn)化程序中的信息;這又與更為復雜的程序設計語(yǔ)言的發(fā)展結合在一起。其中典型的有用于函數語(yǔ)言編譯的Hindley-Milner類(lèi)型檢查的統一算法。其次,編譯器已越來(lái)越成為基于窗口的交互開(kāi)發(fā)環(huán)境(Interactive Development Environment,IDE)的一部分,它包括了編輯器、連接程序、調試程序以及項目管理程序。這樣的IDE標準并沒(méi)有多少,但是對標準的窗口環(huán)境進(jìn)行開(kāi)發(fā)已成為方向。另一方面,盡管近年來(lái)在編譯原理領(lǐng)域進(jìn)行了大量的研究,但是基本的編譯器設計原理在近20年中都沒(méi)有多大的改變,它現在正迅速地成為計算機科學(xué)課程中的中心環(huán)節。
在九十年代,作為GNU項目或其它開(kāi)放源代碼項目的一部分,許多免費編譯器和編譯器開(kāi)發(fā)工具被開(kāi)發(fā)出來(lái)。這些工具可用來(lái)編譯所有的計算機程序語(yǔ)言。它們中的一些項目被認為是高質(zhì)量的,而且對現代編譯理論感性趣的人可以很容易的得到它們的免費源代碼。
大約在1999年,SGI公布了他們的一個(gè)工業(yè)化的并行化優(yōu)化編譯器Pro64的源代碼,后被全世界多個(gè)編譯器研究小組用來(lái)做研究平臺,并命名為Open64。Open64的設計結構好,分析優(yōu)化全面,是編譯器高級研究的理想平臺。
(4)國內編譯器開(kāi)發(fā)的現狀
90年代以來(lái),國內主要以研制并行機為主,相應的并行編譯器研制也在國內開(kāi)展起來(lái)。代表性的成果有:上海復旦大學(xué)朱傳琪教授研究組研制的面向共享存儲并行機的并行優(yōu)化編譯器AFT達到世界領(lǐng)先水平。
清華大學(xué)湯志忠教授研究組在軟流水優(yōu)化技術(shù)上做了很優(yōu)秀的研究工作。清華大學(xué)鄭緯民教授研究組開(kāi)發(fā)了交互式并行化系統 TIPSExplorer,北京大學(xué)許卓群教授、李曉明教授研究組在HPF(High Performance Fortran)編譯器方面做了多年工作,取得很好的研究成果。此外,國防科大、江南計算所等單位也都有從事并行編譯技術(shù)研究。隨著(zhù)芯片研制,國內還有若干單位也在開(kāi)展基于GCC生成面向特定芯片的編譯器工作。
【編譯原理知識點(diǎn)總結】相關(guān)文章:
內經(jīng)養生原理11-14
勒夏特列原理是什么10-12
河中石獸的原理08-23
河中石獸物理原理11-29
《化石吟》知識點(diǎn)總結11-11
初中物理功的原理課件05-10
靜電屏蔽是什么原理?10-12