官术网_书友最值得收藏!

前言

掌握程序在內存中的運行時結構對提高程序設計水平的重要性再怎么強調都不過分,將程序員編寫的源代碼轉化為可執行程序是由編譯器完成的,編譯器對運行時結構的形成起著非常重要的作用。如果你想提高自己的編程水平,了解編譯器怎么將你編寫的源代碼轉換為可執行程序的,那么本書就是為你而寫的!如果你對編譯原理很感興趣,也很愿意閱讀編譯器的源代碼,卻苦于代碼量龐大,不知從何下手,那么你必將從本書中得到巨大的收獲。

對程序員來說,提高編程水平最關鍵的因素之一就是了解程序的運行時結構,只有了解了自己編寫的源代碼運行的時候在內存中是什么樣的(運行時結構),才能真正寫出高質量的代碼。編譯器是將源代碼轉化為最終運行時結構的工具,如何實現運行時結構正是本書最重要的一條主線。編譯器是一個非常經典的程序,其中包含的很多技術已廣泛應用于其他軟件(如文字處理軟件、數據庫、Web開發程序等)。讀懂編譯器的源代碼,對計算機軟件的很多方面來說都會有借鑒作用。

一般介紹編譯原理的書籍通常都是空泛地講一些抽象的概念,甚至夾雜不少晦澀的數學公式,脫離了具體的編譯器,基本上沒有編譯器的源代碼,初學者很難理解。

而本書則是以一個真實、具體、商用GCC編譯器的源代碼為藍本,以幾個案例程序的實際編譯為線索,詳細講解編譯案例程序的源代碼的具體過程。

本書先對讀者最難理解的復雜過程、關系和數據結構以動畫視頻的方式進行直觀、形象的講解??催^這些視頻,讀者就會對編譯原理有一個概略、直觀、整體的理解,從而很容易掌握更深的內容。紙質內容再將編譯原理與GCC編譯器的源代碼有機聯系起來,用了大量直觀的圖示、源代碼、文字做詳細講解。

本書沒有用一個數學公式,力爭用最簡單易懂的語言把深奧的理論講明白。讀者在看完本書后會真正了解一個編譯器是如何運行的,以及為什么要這么設計,更重要的是知道編譯完的程序執行時在內存中的運行時結構是什么樣的。

我們還為讀者提供了一個縮減版的GCC源代碼。原版的GCC源代碼大約有600萬行,是一個適用于多種計算機語言的編譯器,體量過于龐大,幾乎無法在短時間內閱讀、理解,甚至很難記憶。我們只保留了C語言的相關部分,并去掉了錯誤分析、處理和優化的相關部分,大約只有130萬行,其中約50萬行是為了與具體指令集相關,由機器生成的代碼,僅涉及后端;在剩下的80萬行代碼中,與編譯本質相關的核心代碼大約有60萬行。此外,我們還提供了與之相對應的匯編器和鏈接器的源代碼,這些代碼雖然不是編譯器的一部分,但卻是生成完整的可執行程序必不可少的。我們還提供了一整套的開發調試環境,既有適用于Linux的,也有適用于Windows的。讀者可以在一個比較小的范圍內隨著本書的講解跟蹤調試,這樣效率更高。讀者在閱讀的時候始終都能與真實的編譯過程、真實的編譯器源代碼緊密相連。本書的編譯原理不再像一門“數學課”,而是一個可以調試、可以接觸、可以真切感受的理論體系。

讀者只要了解C語言的語法規則,會使用C語言編寫一些簡單的程序,就能看懂本書。

本書內容安排

第1章的前半部分先講解程序的運行時結構。如我們一再強調,運行時是程序執行的關鍵,編譯器正是將源代碼轉化為可執行程序并形成運行時結構的工具。對于只是想提高開發能力的程序員,這部分幾乎起到了90%的作用。

第1章的后半部分對整體的編譯過程做了一個綜述。當讀者對整體有概念的時候,再去看每個章節的具體內容,會更容易理解。

第2章用一個簡單案例講解詞法分析。詞法分析是把源文件中的內容讀出并識別出符號的過程。

第3章繼續用詞法分析時的簡單案例講解語法分析。語法分析是在詞法分析的結果中識別出語句的過程。

第4章仍用前面的簡單案例生成中間結構及目標代碼。

第5章和第6章用幾個更為復雜的案例來分析語法和生成中間結構及目標代碼的過程。

至此,嚴格意義上的編譯過程已經講解完畢。為了讓讀者對最終生成的可執行程序有一個完整的了解,我們專門安排了匯編器、鏈接器的內容,這就是第7章。

第7章詳細講解如何將目標代碼轉變為可執行程序,包括文件格式、匯編器和鏈接器的內容。

第8章講預處理。從編譯器的執行順序來看,預處理器的執行是比較靠前的,之所以把預處理放在最后講,是因為預處理比較獨立,在介紹完整個編譯過程之后再講解,讀者更容易理解。

其中第1~3章都配了相應的視頻,建議在看紙質內容之前先看視頻。

致謝

首先,依然要感謝機械工業出版社華章公司的副總經理溫莉芳女士以及其他領導,他們數年來一如既往的支持,是本書能夠順利出版的前提。

其次,特別感謝機械工業出版社華章公司的副總編輯楊福川,他對事業的追求、對工作認真負責的態度以及與作者團隊的密切配合,使得本書能夠以常規條件下難以置信的速度走上出版流程,與讀者見面。

還要感謝機械工業出版社華章公司的版權輸出團隊和CRC Press的賀瑞君先生,他們的不懈努力、扎實工作和高效溝通,使得本書能夠成功版權輸出。

最后,感謝我們的家人和朋友,是他們的堅定支持才使得團隊能夠拒絕方方面面、形形色色的誘惑,放棄普遍追求的短期利益,踏踏實實地做一點實在、深入的工作。這是本書的基礎。

主站蜘蛛池模板: 根河市| 裕民县| 嵊泗县| 高台县| 永康市| 黑水县| 巴东县| 广东省| 武穴市| 和平县| 上虞市| 当涂县| 荃湾区| 黎川县| 灵台县| 通许县| 石渠县| 昔阳县| 砚山县| 潮州市| 黄大仙区| 苍山县| 吉木萨尔县| 禄丰县| 柳河县| 汽车| 新蔡县| 兰坪| 五河县| 温宿县| 新建县| 罗江县| 柞水县| 杭锦后旗| 南安市| 武隆县| 云南省| 武乡县| 潜山县| 高碑店市| 遵义市|