編譯原理概述

  編譯原理是計算機專業的一門重要專業課,旨在介紹編譯程序構造的通常原理和基本方法。學好編譯原理對於咱們之後在寫程序的道路上會有很大的幫助,這門課程關注的是編譯器方面的產生原理和技術問題,彷佛和計算機的基礎領域不沾邊,但是編譯原理卻一直做爲大學本科的必修課程,同時也成爲了研究生入學考試的必考內容。編譯原理及技術從本質上來說就是一個算法問題而已,固然因爲這個問題十分複雜,其解決算法也相對複雜。 咱們學的數據結構與算法分析也是講算法的,不過講的基礎算法,換句話說講的是算法導論,而編譯原理這門課程講的就是比較專一解決一種的算法了。在20世紀 50年代,編譯器的編寫一直被認爲是十分困難的事情,第一Fortran的編譯器聽說花了18年的時間才完成。在人們嘗試編寫編譯器的同時,誕生了許多跟編譯相關的理論和技術,而這些理論和技術比一個實際的編譯器自己價值更大。就猶如數學家們在解決著名的哥德巴赫猜測同樣,雖然沒有最終解決問題,可是其間 誕生很多名著的相關數論  前端

編譯程序系統概述

翻譯程序java

    編譯程序:較爲複雜的翻譯程序,源程序經過翻譯程序變成目標程序,其中源程序就是常見的高級語言程序,例如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

  中文名:高級編譯器設計與實現

  鯨書側重在對編譯器後端優化的處理。在本科階段的編譯教學中旨在讓學生對程序設計語言的編譯全過程有系統的理解,所以會介紹編譯器後端的處理技術,但不注重優化技術。鯨書更適合做爲研究生的教材或參考書

相關文章
相關標籤/搜索