编译原理概述
編譯原理是計算機專業的一門重要專業課,旨在介紹編譯程序構造的一般原理和基本方法。學好編譯原理對于我們以后在寫程序的道路上會有很大的幫助,這門課程關注的是編譯器方面的產生原理和技術問題,似乎和計算機的基礎領域不沾邊,可是編譯原理卻一直作為大學本科的必修課程,同時也成為了研究生入學考試的必考內容。編譯原理及技術從本質上來講就是一個算法問題而已,當然由于這個問題十分復雜,其解決算法也相對復雜。 我們學的數據結構與算法分析也是講算法的,不過講的基礎算法,換句話說講的是算法導論,而編譯原理這門課程講的就是比較專注解決一種的算法了。在20世紀 50年代,編譯器的編寫一直被認為是十分困難的事情,第一Fortran的編譯器據說花了18年的時間才完成。在人們嘗試編寫編譯器的同時,誕生了許多跟編譯相關的理論和技術,而這些理論和技術比一個實際的編譯器本身價值更大。就猶如數學家們在解決著名的哥德巴赫猜想一樣,雖然沒有最終解決問題,但是其間 誕生不少名著的相關數論??
編譯程序系統概述
翻譯程序
????編譯程序:較為復雜的翻譯程序,源程序通過翻譯程序變成目標程序,其中源程序就是常見的高級語言程序,例如C++、Java、Python;目標語言通常為機器級語言或者較低級的虛擬機語言,例如匯編語言、機器語言、Bytecode(Java字節碼)
????解釋程序:以源程序作為輸入,但不產生目標代碼,邊解釋邊執行源程序本身,實際上,許多編譯程序的構造與實現技術同樣適用于解釋程序。我們主要學習編譯程序。
?
?
編譯程序在邏輯結構上至少分為倆個階段
????分析階段:理解源程序,挖掘源程序的語意
????綜合階段:生成與源程序語義上等價的目標程序
?
也可以分為三個階段
前端:實現主要的分析任務,通常以第一次生成中間代碼為結束標志
中端:實現各級中間代碼上的操作
后端:實現主要的綜合操作,通常以最后一級中間代碼生成目標代碼為結束標志
?
詳細邏輯過程:
????????詞法分析
????????語法分析
????????語義分析
????????中間代碼生成
????????中間代碼優化
????????目標代碼生成
????????目標代碼優化
詞法分析
掃描源程序字符流,識別出有詞法意義的單詞,返回單詞的類別和單詞的值,或詞法錯誤的信息,
語法分析
在詞法分析的基礎上,根據語言的語法規則,把單詞符號串分解成各類語法單位
語義分析
對語法分析后的程序進行語義分析,不符合語義規則時給出錯誤信息
中間代碼生成
中間代碼的翻譯生成,中間代碼是一種獨立于具體硬件的記號系統,常用的中間代碼:四元式、三元式、間接三元式、逆波蘭記號、樹形表示
中間代碼優化
對于前階段產生的中間代碼進行加工變換,以期在最后階段產生出更為高效的目標代碼
目標代碼生成
將中間代碼變換成特定機器上的低級語言代碼
目標代碼優化
以基本塊內的簡單優化方法、控制流數據流分析基礎等代碼生成和優化相關的基本知識為主線,輔以優化技術的綜述。
符號表管理
編譯程序在工作過程中需要保持一系列的表格,以登記源程序的各類信息和編譯個階段的進展狀況,其中最重要的就是符號表,它用來登記源程序中出現的每個名字以及名字的各個屬性。當掃描器識別出一個名字后,它把該名字填入到符號表中,但這時不能完全確定名字的屬性,它的各種屬性要在后續的各階段才能填入。例如,名字的類型等要在語義分析時才能確定,而名字的地址可能要到目標代碼生成才能確定。
錯誤處理
編譯過程的每一階段都可能檢測出錯誤,其中,絕大多數錯誤可以在編譯的前三階段檢測出來。錯誤通常分為語法錯誤和語義錯誤,語法錯誤是源程序中不符合語法或詞法的規則的錯誤,可以在語法分析和語法分析階段檢測出來,語義錯誤是指源程序中不符合語義規則的錯誤,在語義分析階段能檢測出來,而又得語義錯誤要在運行時才能檢測出來。
書籍推薦
龍書:
英文名:Compilers: Principles,Techniques,and Tools
作者:Alfred V.Aho,Ravi Sethi,Jeffrey D.Ullman
中文名:編譯原理技術和工具
龍書是Alfred V. Aho等人于1986年出版的,由于出版年代較早,其中包含部分過時的技術并且沒有反映一些新的編譯技術。新編的《編譯原理》拋棄諸如算符優先分析等過時技術,增加面向對象編譯、類型檢查等新技術
虎書:
英文名:Modern Compiler Implementation in C?
作者:Andrew W.Appel,with Jens Palsberg?
中文名:現代編譯原理-C語言描述?
虎書出版比較晚,與《編譯原理》的知識點差不多,但增加了數據流分析、循環優化、內存管理等內容。與虎書比,《編譯原理》更適合國內的編譯原理課程教學。這本是C版,還有java版和ML版。
鯨書:
英文名:Advanced Compiler Design and Implementation
作者:Steven S.Muchnick
中文名:高級編譯器設計與實現
鯨書側重在對編譯器后端優化的處理。在本科階段的編譯教學中旨在讓學生對程序設計語言的編譯全過程有系統的理解,因此會介紹編譯器后端的處理技術,但不注重優化技術。鯨書更適合作為研究生的教材或參考書
?
轉載于:https://www.cnblogs.com/gollong/p/9338897.html
總結
- 上一篇: 黄金票据(Golden Ticket)的
- 下一篇: 线性复杂度的素数筛选法