內容介紹
基本信息
| 書名: | 程序設計語言編譯原理(D3版) |
| 作者: | 陳火旺//劉春林//譚慶平//趙剋佳//劉越 | 開本: | |
| YJ: | 39 | 頁數: | |
| 現價: | 見1;CY=CY部 | 齣版時間 | 2014-12-01 |
| 書號: | 9787118022070 | 印刷時間: | |
| 齣版社: | 國防工業齣版社 | 版次: | |
| 商品類型: | 正版圖書 | 印次: | |
內容提要 作者簡介 精彩導讀 D一章引論
1.1什麼叫編譯程序
使用過現代計算機的人都知道,多數用戶是應用GJ語言來實現他們所需要的計算的。現代計算機係統一般都含有不止一個的GJ語言編譯程序,對有些GJ語言甚至配置瞭幾個不同性能的編譯程序,供用戶按不同需要進行選擇。GJ語言編譯程序是計算機係統軟件Z重要的組成部分之一,也是用戶Z直接關心的工具之一。
在計算機上執行一個GJ語言程序一般要分為兩步:D一步,用一個編譯程序把GJ語言翻譯成機器語言程序;D二步,運行所得的機器語言程序求得計算結果。
通常所說的翻譯程序是指這樣的一個程序,它能夠把某一種語言程序(稱為源語言程序)轉換成另一種語言程序(稱為目標語言程序),而後者與前者在邏輯上是等價的。如果源語言是諸如FORTRAN、Pascal、C、Ada、Smalhalk或Java這樣的“GJ語言”,而目標語言是諸如匯編語言或機器語言之類的“低級語言”,這樣的一個翻譯程序J稱為編譯程序。
GJ語言程序除瞭像上麵所說的先編譯後執行外,有時也可“解釋’’執行。一個源語言的解釋程序是這樣的程序,它以該語言寫的源程序作為輸入,但不産生目標程序,而是邊解釋邊執行源程序本身。本書將不對解釋程序作專門的討論。實際上,許多編譯程序的構造與實現技術同樣適用於解釋程序。
根據不同的用途和側重,編譯程序還可進一步分類。專門用於幫助程序開發和調試的編譯程序稱為診斷編譯程序(DiagDsticCompiler),著重於提高目標代碼效率的編譯程序”4優化編譯程序(0ptiIIlizingCompiler)。現在很多編譯程序同時提供瞭調試、優化等多種功能,用戶可以通過“開關”進行選擇。運行編譯程序的計算機稱宿主機,運行編譯程序所産生目標代碼的計算機稱目標機。如果一個編譯程序産生不同於其宿主機的機器代碼,則稱它為交叉編譯程序(CrossCompiler)。如果不需重寫編譯程序中與機器無關的部分J能改變目標機,則稱該編譯程序為可變目標編譯程序(RetargetableCompile,)。
SJ上D一個編譯程序——FORrⅡ認N編譯程序是20世紀50年代中期研製成功的。D時,人們普遍認為設計和實現編譯程序是一件十分睏難、令人生畏的事情。經過40年的努力,編譯理論與技術得到迅速發展,現在已形成瞭一套比較成熟的、係統化的理論與方法,並且開發齣瞭一些好的編譯程序的實現語言、環境與工具。在此基礎上設計並實現一個編譯程序不再是高不可攀的事情。
本書主要介紹設計和構造編譯程序的基本原理和方法。我們不想羅列太多細節性的材料,著重講一些原理性的東西,但將反映一些ZX的進展。
…… 目錄 D一章 引論 1.1 什麼叫編譯程序 1.2 編譯過程概述 1.3 編譯程序的結構 1.3.1 編譯程序總框 1.3.2 錶格與錶格管理 I.3.3 齣錯處理 1.3.4 遍 1.3.5 編譯前端與後端 1.4 編譯程序與程序設計環境 1.5 編譯程序的生成 D二章 GJ語言及其語法描述 2.1 程序語言的定義 2.1.1 語法 2.1.2 語義 2.2 GJ語言的一般特性 2.2.1 GJ語言的分類 2.2.2 程序結構 2.2.3 數據類型與操作 2.2.4 語句與控製結構 2.3 程序語言的語法描述 2.3.1 上下文無關文法 2.3.2 語法分析樹與二義性 2.3.3 形式語言鳥瞰 練 習 D三章 詞法分析 3.1 對於詞法分析器的要求 3.1.1 詞法分析器的功能和輸齣形式 3.1.2 詞法分析器作為一個D立子程序 3.2 詞法分析器的設計 3.2.1 輸入、預處理 3.2.2 單詞符號的識彆:超前搜索 3.2.3 狀態轉換圖 3.2.4 狀態轉換圖的實現 3.3 正規錶達式與有限自動機 3.3.1 正規式與正規集 3.3.2 確定有限自動機(DFA) 3.3.3 非確定有限自動機(NFA) 3.3.4 正規文法與有限自動機的等價性 3.3.5 正規式與有限自動機的等價性 3.3.6 確定有限自動機的化簡 3.4 詞法分析器的自動産生 3.4.1 語言LEX的一般描述 3.4.2 超前搜索 3.4.3 LEX的實現 練 習 D四章 語法分析——自上而下分析 4.1 語法分析器的功能 4.2 自上而下分析麵臨的問題 4.3 LL(1)分析法 4.3.1 左遞歸的消除 4.3.2 消除迴溯、提左因子 4.3.3 LL(1)分析條件 4.4 遞歸下降分析程序構造 4.5 預測分析程序 4.5.1 預測分析程序工作過程 4.5.2 預測分析錶的構造 4.6 LL(1)分析中的錯誤處理 練 習 D五章 語法分析——自下而上分析 5.1 自下而上分析基本問題 5.1.1 歸約 5.1.2 規範歸約簡述 5.1.3 符號棧的使用與語法樹的錶示 5.2 算符優先分析 5.2.1 算符優先文法及優先錶構造 5.2.2 算符優先分析算法 5.2.3 優先函數 5.2.4 算符優先分析中的齣錯處理 *5.3 LR分析法 5.3.1 LR分析器 5.3.2 LR(0)項目集族和LR(0)分析錶的構造 5.3.3 SLR分析錶的構造 5.3.4 規範LR分析錶的構造 5.3.5 LALR分析錶的構造 5.3.6 二義文法的應用 5.3.7 LR分析中的齣錯處理 5.4 語法分析器的自動産生工具YAcc 練 習 D六章 屬性文法和語法製導翻譯 6.1 屬性文法 6.2 基於屬性文法的處理方法 6.2.1 依賴圖 6.2.2 樹遍曆的屬性計算方法 6.2.3 一遍掃描的處理方法 6.2.4 抽象語法樹 6.3 S一屬性文法的自下而上計算 6.4 L一屬性文法和自1;CY=CY嚮下翻譯 6.4.1 翻譯模式 6.4.2 自1;CY=CY嚮下翻譯 6.4.3 遞歸下降翻譯器的設計 6.5 自下而上計算繼承屬性 6.5.1 從翻譯模式中去掉嵌入在産生式中間的動作一 6.5.2 分析棧中的繼承屬性 6.5.3 模擬繼承屬性的計算 6.5.4 用綜閤屬性代替繼承屬性 練 習 D七章 語義分析和中間代碼産生 7.1 中間語言 7.1.1 後綴式 7.1.2 圖錶示法 7.1.3 三地址代碼 7.2 說明語句 7.2.1 過程中的說明語句 7.2.2 保留作用域信息 7.2.3 記錄中的域名 7.3 賦值語句的翻譯 7.3.1 簡單算術錶達式及賦值語句 7.3.2 數組元素的引用 7.3.3 記錄中域的引用 7.4 布爾錶達式的翻譯 7.4.1 數值錶示法 7.4.2 作為條件控製的布爾式翻譯 7.5 控製語句的翻譯 7.5.1 控製流語句 7.5.2 標號與got語句 7.5.3 CASE語句的翻譯 7.6 過程調用的處理 7.7 類型檢查 7.7.1 類型係統 7.7.2 類型檢查器的規格說明 7.7.3 函數和運算符的重載 7.7.4 多態函數 練 習 D八章 符號錶 8.1 符號錶的組織與作用 8.1.1 符號錶的作用 8.1.2 符號錶的組織方式 8.2 整理與查找 8.2.1 綫性錶 8.2.2 對摺查找與二叉樹 8.2.3 雜湊技術 8.3 名字的作用範圍 8.3.1 FORTRAN的符號錶組織 8.3.2 Pascal的符號錶組織 8.4 符號錶的內容 練 習 D九章 運行時存儲空間組織 9.1 目標程序運行時的活動 9.1.1 過程的活動 9.1.2 參數傳遞 9.2 運行時存儲器的劃分 9.2.1 運行時存儲器的劃分 9.2.2 活動記錄 9.2.3 存儲分配策略 9.3 靜態存儲分配 9.3.1 數據區 *9.3.2 公用語句的處理 *9.3.3 等價語句的處理 *9.3.4 地址分配 9.3.5 臨時變量的地址分配 9.4 簡單的棧式存儲分配 9.4.1 C的活動記錄 9.4.2 C的過程調用、過程進入、數組空間分配和過程返迴 9.5 嵌套過程語言的棧式實現 9.5.1 非局部名字的訪問的實現 9.5.2 參數傳遞的實現 9.6 堆式動態存儲分配 9.6.1 堆式動態存儲分配的實現 9.6.2 隱式存儲迴收 練 習 D十章 優化 10.1 概述 10.2 局部優化 10.2.1 基本塊及流圖 10.2.2 基本塊的DAG錶示及其應用. 10.3 循環優化 10.3.1 代碼外提 10.3.2 強度削弱 10.3.3 刪除歸納變量 *10.4 數據流分析 10.4.1 任意路徑數據流分析 10.4.2 全路徑數據流分析 10.4.3 數據流問題的分類 10.4.4 其它主要的數據流問題 10.4.5 利用數據流信息進行全局優化 練 習 D十一章 目標代碼生成 11.1 基本問題 11.2 目標機器模型 11.3 一個簡單的代碼生成器 11.3.1 待用信息 11.3.2 寄存器描述和地址描述 11.3.3 代碼生成算法 11.4 寄存器分配 11.5 DAG的目標代碼 11.6 窺孔優化 練 習 D十二章 並行編譯基礎 12.1 並行計算機及其編譯係統. 12.1.1 嚮量計算機 12.1.2 共享存儲器多處理機 12.1.3 分布存儲器大規模並行計算機 12.1.4 並行編譯係統的結構 12.2 基本概念 12.2.1 嚮量與嚮量的次序 12.2.2 循環模型與索引空間 12.2.3 輸入與輸齣集閤 12.2.4 語句的執行順序 12.3 依賴關係 12.3.1 依賴關係定義 12.3.2 語句依賴圖 12.3.3 依賴距離、依賴方嚮與依賴層次 12.4 依賴關係問題 12.5 依賴關係測試 12.6 循環的嚮量化與並行化 12.7 循環變換技術 練 習 參考文獻
目錄
。。。。。。。。。。
《算法藝術與程序設計:從原理到實踐》 在信息技術飛速發展的今天,理解和掌握高效的程序設計能力是每一位開發者必備的核心技能。本書《算法藝術與程序設計:從原理到實踐》並非聚焦於特定編程語言的編譯過程,而是緻力於深入探索算法設計的精妙之處,並輔以豐富的實戰案例,幫助讀者構建堅實的計算機科學基礎,提升解決復雜問題的能力。 本書涵蓋瞭從基礎到高級的各類經典算法,並係統地講解瞭算法分析的理論框架。我們首先從“算法的本質”這一哲學高度齣發,闡釋算法在解決計算問題中的核心地位,介紹算法的時間復雜度和空間復雜度等基本度量標準,讓讀者對算法的效率有初步的認知。 隨後,我們將進入數據結構的廣闊領域。本書詳細剖析瞭數組、鏈錶、棧、隊列等基礎數據結構,並深入講解瞭樹(如二叉樹、平衡二叉搜索樹、B樹)和圖(如鄰圖、鄰接錶錶示法)等更復雜的數據結構。對於每一種數據結構,我們都會從其內部構造、操作方式(插入、刪除、查找)以及在實際問題中的應用場景進行詳細分析,並輔以清晰的圖示和僞代碼,幫助讀者理解其核心思想和實現細節。 接著,本書將筆觸轉嚮排序算法。從簡單的冒泡排序、選擇排序、插入排序,到更高效的快速排序、歸並排序、堆排序,再到桶排序、基排序等非比較排序,我們不僅會逐一講解它們的實現原理,還會深入探討它們的穩定性、時間復雜度、空間復雜度以及各自的優缺點。通過對比分析,讀者將能夠根據具體問題選擇最適閤的排序算法。 查找算法也是本書的重要組成部分。除瞭順序查找,我們將重點介紹二分查找及其變種,並探討哈希錶查找的原理和實現,理解其常數平均時間復雜度的優勢。對於在樹和圖中的查找,如二叉搜索樹查找、深度優先搜索(DFS)和廣度優先搜索(BFS),本書也進行瞭詳盡的闡述,並展示瞭它們在迷宮求解、網絡遍曆等問題中的應用。 在圖算法方麵,本書將帶領讀者領略圖的魅力。除瞭DFS和BFS,我們還將深入講解最短路徑算法(如Dijkstra算法、Floyd-Warshall算法)、最小生成樹算法(如Prim算法、Kruskal算法)以及拓撲排序等。這些算法在網絡路由、資源分配、任務調度等領域有著廣泛的應用,本書將通過具體的實例,幫助讀者理解算法的設計思路和實現技巧。 本書還關注字符串匹配問題,介紹瞭樸素匹配算法、KMP算法以及Boyer-Moore算法,分析瞭它們的效率差異,並講解瞭在實際文本處理中的應用。 此外,本書還將觸及一些高級算法的概念,例如動態規劃、貪心算法、迴溯算法等。這些算法設計範式能夠解決許多看似復雜但具有特定結構的問題。對於動態規劃,我們將通過經典的背包問題、最長公共子序列問題等,闡釋其“最優子結構”和“重疊子問題”的特點,以及如何構建狀態轉移方程。貪心算法則側重於局部最優選擇的纍積,本書將通過活動選擇問題、霍夫曼編碼等案例進行說明。迴溯算法則通過“試探”和“剪枝”來搜索解空間,本書將以N皇後問題、數獨求解為例,展示其解決組閤搜索問題的威力。 本書的另一大特色在於其實踐導嚮。在每個算法章節的末尾,我們都會提供精心設計的編程練習,鼓勵讀者動手實現算法,並通過調試和測試來加深理解。這些練習從簡單到復雜,覆蓋瞭算法在各種實際場景中的應用,例如數據分析、圖形學、人工智能初步等。本書還推薦瞭多種編程語言(如Python, Java, C++)的實現方式,讓讀者能夠根據自己的喜好和項目需求進行選擇。 除瞭算法本身,本書還強調算法思維的培養。我們鼓勵讀者在麵對問題時,首先思考其本質,嘗試將其抽象為計算模型,然後設計齣最優的算法解決方案。通過大量的例題分析和解題思路的引導,本書旨在鍛煉讀者的邏輯思維能力、抽象思維能力和創新思維能力。 本書的語言風格力求清晰、準確、易懂,避免使用過於晦澀的術語,同時保留瞭必要的嚴謹性。我們相信,《算法藝術與程序設計:從原理到實踐》將成為您在算法世界中探索和實踐的得力助手,助您在程序設計的道路上走得更遠、更穩。