編譯原理是大學計算機專業(yè)的必修科目,也是計算機的基礎(chǔ)知識,學好編譯原理,有助于更好的進行編程的操作,下面是編譯原理知識點總結(jié),一起來看看吧!
編譯原理知識點總結(jié)
一 編譯器
簡單講,編譯器就是將“高級語言”翻譯為“機器語言(低級語言)”的程序。一個現(xiàn)代編譯器的主要工作流程:源代碼 (source code) → 預(yù)處理器
(preprocessor) → 編譯器 (compiler) → 匯編程序 (assembler) → 目標代碼 (object code) → 鏈接器(Linker) → 可執(zhí)行程序 (executables)
二 工作原理
編譯是從源代碼(通常為高階語言)到能直接被計算機或虛擬機執(zhí)行的目標代碼(通常為低階語言或機器語言)的翻譯過程。然而,也存在從低階語言到高階語言的編譯器,這類編譯器中用來從由高階語言生成的低階語言代碼重新生成高階語言代碼的又被叫做反編譯器。
也有從一種高階語言生成另一種高階語言的編譯器,或者生成一種需要進一步處理的的中間代碼的編譯器(又叫級聯(lián))。
典型的編譯器輸出是由包含入口點的名字和地址, 以及外部調(diào)用(到不在這個目標文件中的函數(shù)調(diào)用)的機器代碼所組成的目標文件。一組目標文件,不必是同一編譯器產(chǎn)生,但使用的編譯器必需采用同樣的輸出格式,可以鏈接在一起并生成可以由用戶直接執(zhí)行的可執(zhí)行程序
三 編譯器的發(fā)展史
(1) 20世紀50年代
IBM的John Backus帶領(lǐng)一個研究小組對FORTRAN語言及其編譯器進行開發(fā)。但由于當時人們對編譯理論了解不多,開發(fā)工作變得既復(fù)雜又艱苦。與此同時,Noam Chomsky開始了他對自然語言結(jié)構(gòu)的研究。他的發(fā)現(xiàn)最終使得編譯器的結(jié)構(gòu)異常簡單,甚至還帶有了一些自動化。Chomsky的研究導(dǎo)致了根據(jù)語言文法的難易程度以及識別它們所需要的算法來對語言分類。正如現(xiàn)在所稱的Chomsky架構(gòu)(Chomsky Hierarchy),它包括了文法的四個層次:0型文法、1型文法、2型文法和3型文法,且其中的每一個都是其前者的特殊情況。2型文法(或上下文無關(guān)文法)被證明是程序設(shè)計語言中最有用的,而且今天它已代表著程序設(shè)計語言結(jié)構(gòu)的標準方式。分析問題(parsing problem,用于上下文無關(guān)文法識別的有效算法)的研究是在60年代和70年代,它相當完善的解決了這個問題。現(xiàn)在它已是編譯原理中的一個標準部分。
有限狀態(tài)自動機(Finite Automaton)和正則表達式(Regular Expression)同上下文無關(guān)文法緊密相關(guān),它們與Chomsky的3型文法相對應(yīng)。對它們的研究與Chomsky的研究幾乎同時開始,并且引出了表示程序設(shè)計語言的單詞的符號方式。
人們接著又深化了生成有效目標代碼的方法,這就是最初的編譯器,它們被一直使用至今。人們通常將其稱為優(yōu)化技術(shù)(Optimization Technique),但因其從未真正地得到過被優(yōu)化了的目標代碼而僅僅改進了它的有效性,因此實際上應(yīng)稱作代碼改進技術(shù)(Code Improvement Technique)。
當分析問題變得好懂起來時,人們就在開發(fā)程序上花費了很大的功夫來研究這一部分的編譯器自動構(gòu)造。這些程序最初被稱為編譯器的編譯器(Compiler-compiler),但更確切地應(yīng)稱為分析程序生成器(Parser Generator),這是因為它們僅僅能夠自動處理編譯的一部分。這些程序中最著名的是Yacc(Yet Another Compiler-compiler),它是由Steve Johnson在1975年為Unix系統(tǒng)編寫的。類似的,有限狀態(tài)自動機的研究也發(fā)展了一種稱為掃描程序生成器(Scanner Generator)的工具,Lex(與Yacc同時,由Mike Lesk為Unix系統(tǒng)開發(fā))是這其中的佼佼者。
在70年代后期和80年代早期,大量的項目都貫注于編譯器其它部分的生成自動化,這其中就包括了代碼生成。這些嘗試并未取得多少成功,這大概是因為操作太復(fù)雜而人們又對其不甚了解。
本文來源:http://www.nvnqwx.com/shiyongwen/zongjie/417598.htm