現(xiàn)代編譯原理-C語言描述

出版時(shí)間:2006-4  出版社:人民郵電出版社  作者:(美)安佩爾  頁數(shù):385  字?jǐn)?shù):665000  
Tag標(biāo)簽:無  

前言

  本書全面講述了現(xiàn)代編譯器的結(jié)構(gòu)、編譯算法和實(shí)現(xiàn)方法,是Andrew W.Apple的“虎書”——Modern Compiler Implementation——“紅、藍(lán)、綠”三序列之一。這三本書的內(nèi)容基本相同,但是使用不同的語言來實(shí)現(xiàn)書中給出的一個(gè)編譯器。本書使用的是更適合廣大讀者的c語言,而另外兩本書分別采用ML語言和Java語言。. 國(guó)外關(guān)于編譯技術(shù)有三本比較著名的書,分別被譽(yù)為“龍書”、“鯨書”和“虎書”。“虎書”即是本書,它已經(jīng)被國(guó)外許多著名大學(xué)選作編譯原理課程的教材。編譯器的設(shè)計(jì)與實(shí)現(xiàn)是一種實(shí)踐性很強(qiáng)的工程。作為講述編譯器實(shí)現(xiàn)方法的編譯原理課程,既需要講述理論和原理,也離不開具體的實(shí)踐。

內(nèi)容概要

  本書全面講述了現(xiàn)代編譯器的各個(gè)組成部分,包括詞法分析、語法分析、抽象語法、語義檢查、中間代碼表示、指令選擇、數(shù)據(jù)流分析、寄存器分配以及運(yùn)行時(shí)系統(tǒng)等。全書分成兩部分,第一部分是編譯的基礎(chǔ)知識(shí),適用于第一門編譯原理課程(一個(gè)學(xué)期);第二部分是高級(jí)主題,包括面向?qū)ο笳Z言和函數(shù)語言、垃圾收集、循環(huán)優(yōu)化、SSA(靜態(tài)單賦值)形式、循環(huán)調(diào)度、存儲(chǔ)結(jié)構(gòu)優(yōu)化等,適合于后續(xù)課程或研究生教學(xué)。書中專門為學(xué)生提供了一個(gè)用C語言編寫的實(shí)習(xí)項(xiàng)目,包括前端和后端設(shè)計(jì),學(xué)生可以在一學(xué)期內(nèi)創(chuàng)建一個(gè)功能完整的編譯器?! ”緯m用于高等院校計(jì)算機(jī)及相關(guān)專業(yè)的本科生或研究生,也可供科研人員或工程技術(shù)人員參考。

作者簡(jiǎn)介

Andrew W.Appel,美國(guó)普林斯頓大學(xué)計(jì)算機(jī)科學(xué)系教授,第26屆ACM SIGPLAN-SIGACT程序設(shè)計(jì)原理年會(huì)大會(huì)執(zhí)行主席,1998-1999年在貝爾實(shí)驗(yàn)室做研究工作。主要研究方向是計(jì)算機(jī)安全、編譯器設(shè)計(jì)、程序設(shè)計(jì)語言等。

書籍目錄

第一部分 編譯基本原理第1章 緒論 11.1 模塊與接口 11.2 工具和軟件 31.3 樹語言的數(shù)據(jù)結(jié)構(gòu) 3程序設(shè)計(jì):直線式程序解釋器 7推薦閱讀 9習(xí)題 9第2章 詞法分析 102.1 詞法單詞 102.2 正則表達(dá)式 112.3 有限自動(dòng)機(jī) 132.4 非確定有限自動(dòng)機(jī) 152.4.1 將正則表達(dá)式轉(zhuǎn)換為NFA 162.4.2 將NFA轉(zhuǎn)換為DFA 182.5 Lex:詞法分析器的生成器 20程序設(shè)計(jì):詞法分析 22推薦閱讀 23習(xí)題 23第3章 語法分析 273.1 上下文無關(guān)文法 283.1.1 推導(dǎo) 293.1.2 語法分析樹 293.1.3 二義性文法 303.1.4 文件結(jié)束符 313.2 預(yù)測(cè)分析 323.2.1 FIRST集合和FOLLOW集合 333.2.2 構(gòu)造一個(gè)預(yù)測(cè)分析器 353.2.3 消除左遞歸 363.2.4 提取左因子 373.2.5 錯(cuò)誤恢復(fù) 373.3 LR分析 393.3.1 LR分析引擎 403.3.2 LR(0)分析器生成器 413.3.3 SLR分析器的生成 443.3.4 LR(1)項(xiàng)和LR(1)分析表 453.3.5 LALR(1)分析表 463.3.6 各類文法的層次 473.3.7 二義性文法的LR分析 473.4 使用分析器的生成器 483.4.1 沖突 493.4.2 優(yōu)先級(jí)指導(dǎo) 503.4.3 語法和語義 533.5 錯(cuò)誤恢復(fù) 543.5.1 用error符號(hào)恢復(fù) 543.5.2 全局錯(cuò)誤修復(fù) 55程序設(shè)計(jì):語法分析 57推薦閱讀 58習(xí)題 58第4章 抽象語法 624.1 語義動(dòng)作 624.1.1 遞歸下降 624.1.2 Yacc生成的分析器 624.1.3 語義動(dòng)作的解釋器 644.2 抽象語法分析樹 654.2.1 位置 674.2.2 Tiger的抽象語法 68程序設(shè)計(jì):抽象語法 71推薦閱讀 71習(xí)題 72第5章 語義分析 735.1 符號(hào)表 735.1.1 多個(gè)符號(hào)表 745.1.2 高效的命令式風(fēng)格符號(hào)表 755.1.3 高效的函數(shù)式符號(hào)表 765.1.4 Tiger編譯器的符號(hào) 775.1.5 函數(shù)式風(fēng)格的符號(hào)表 795.2 Tiger編譯器的綁定 795.3 表達(dá)式的類型檢查 825.4 聲明的類型檢查 845.4.1 變量聲明 845.4.2 類型聲明 855.4.3 函數(shù)聲明 855.4.4 遞歸聲明 86程序設(shè)計(jì):類型檢查 87習(xí)題 87第6章 活動(dòng)記錄 896.1 棧幀 906.1.1 幀指針 916.1.2 寄存器 926.1.3 參數(shù)傳遞 926.1.4 返回地址 946.1.5 棧幀內(nèi)的變量 946.1.6 靜態(tài)鏈 956.2 Tiger編譯器的棧幀 966.2.1 棧幀描述的表示 986.2.2 局部變量 986.2.3 計(jì)算逃逸變量 996.2.4 臨時(shí)變量和標(biāo)號(hào) 1006.2.5 兩層抽象 1006.2.6 管理靜態(tài)鏈 1026.2.7 追蹤層次信息 102程序設(shè)計(jì):棧幀 103推薦閱讀 103習(xí)題 103第7章 翻譯成中間代碼 1067.1 中間表示樹 1067.2 翻譯為樹中間語言 1087.2.1 表達(dá)式的種類 1087.2.2 簡(jiǎn)單變量 1117.2.3 追隨靜態(tài)鏈 1127.2.4 數(shù)組變量 1137.2.5 結(jié)構(gòu)化的左值 1147.2.6 下標(biāo)和域選擇 1147.2.7 關(guān)于安全性的勸告 1157.2.8 算術(shù)操作 1167.2.9 條件表達(dá)式 1167.2.10 字符串 1177.2.11 記錄和數(shù)組的創(chuàng)建 1187.2.12 while循環(huán) 1197.2.13 for循環(huán) 1197.2.14 函數(shù)調(diào)用 1207.3 聲明 1207.3.1 變量定義 1207.3.2 函數(shù)定義 1207.3.3 片段 121程序設(shè)計(jì):翻譯成樹 122習(xí)題 123第8章 基本塊和軌跡 1258.1 規(guī)范樹 1268.1.1 ESEQ的轉(zhuǎn)換 1268.1.2 一般重寫規(guī)則 1268.1.3 將CALL移到頂層 1308.1.4 線性語句表 1318.2 處理?xiàng)l件分支 1318.2.1 基本塊 1318.2.2 軌跡 1328.2.3 完善 1338.2.4 最優(yōu)軌跡 133推薦閱讀 134習(xí)題 134第9章 指令選擇 1369.1 指令選擇算法 1389.1.1 Maximal Munch算法 1389.1.2 動(dòng)態(tài)規(guī)劃 1409.1.3 樹文法 1419.1.4 快速匹配 1439.1.5 覆蓋算法的效率 1439.2 CISC機(jī)器 1449.3 Tiger編譯器的指令選擇 1469.3.1 抽象的匯編語言指令 1469.3.2 生成匯編指令 1489.3.3 過程調(diào)用 1519.3.4 無幀指針的情形 151程序設(shè)計(jì):指令選擇 152推薦閱讀 153習(xí)題 154第10章 活躍分析 15510.1 數(shù)據(jù)流方程的解 15610.1.1 活躍性計(jì)算 15610.1.2 集合的表示 15810.1.3 時(shí)間復(fù)雜度 15810.1.4 最小不動(dòng)點(diǎn) 15910.1.5 靜態(tài)活躍性與動(dòng)態(tài)活躍性 16010.1.6 沖突圖 16110.2 Tiger編譯器的活躍分析 16210.2.1 圖 16210.2.2 控制流圖 16310.2.3 活躍分析 164程序設(shè)計(jì):構(gòu)造流圖 164程序設(shè)計(jì):活躍分析模塊 165習(xí)題 165第11章 寄存器分配 16611.1 通過簡(jiǎn)化進(jìn)行著色 16611.2 合并 16811.3 預(yù)著色的結(jié)點(diǎn) 17111.3.1 機(jī)器寄存器的臨時(shí)副本 17111.3.2 調(diào)用者保護(hù)的寄存器和被調(diào)用者保護(hù)的寄存器 17211.3.3 含預(yù)著色結(jié)點(diǎn)的例子 17211.4 圖著色的實(shí)現(xiàn) 17511.4.1 傳送指令工作表的管理 17611.4.2 數(shù)據(jù)結(jié)構(gòu) 17611.4.3 程序代碼 17711.5 針對(duì)樹的寄存器分配 181程序設(shè)計(jì):圖著色 184推薦閱讀 185習(xí)題 185第12章 整合為一體 188程序設(shè)計(jì):過程入口/出口 189程序設(shè)計(jì):創(chuàng)建一個(gè)可運(yùn)行的編譯器 191第二部分高級(jí)主題第13章 垃圾收集 19313.1 標(biāo)記-清掃式收集 19413.2 引用計(jì)數(shù) 19713.3 復(fù)制式收集 19813.4 分代收集 20113.5 增量式收集 20313.6 Baker算法 20513.7 編譯器接口 20513.7.1 快速分配 20513.7.2 數(shù)據(jù)布局的描述 20613.7.3 導(dǎo)出指針 207程序設(shè)計(jì):描述字 208程序設(shè)計(jì):垃圾收集 208推薦閱讀 208習(xí)題 210第14章 面向?qū)ο蟮恼Z言 21114.1 類 21114.2 數(shù)據(jù)域的單繼承性 21314.3 多繼承 21414.4 測(cè)試類成員關(guān)系 21614.5 私有域和私有方法 21814.6 無類語言 21914.7 面向?qū)ο蟪绦虻膬?yōu)化 219程序設(shè)計(jì):OBJECT-Tiger 220推薦閱讀 220習(xí)題 221第15章 函數(shù)式程序設(shè)計(jì)語言 22215.1 一個(gè)簡(jiǎn)單的函數(shù)式語言 22215.2 閉包 22415.3 不變的變量 22515.3.1 基于延續(xù)的I/O 22615.3.2 語言上的變化 22715.3.3 純函數(shù)式語言的優(yōu)化 22815.4 內(nèi)聯(lián)擴(kuò)展 22915.5 閉包變換 23315.6 高效的尾遞歸 23515.7 懶惰計(jì)算 23615.7.1 傳名調(diào)用計(jì)算 23715.7.2 按需調(diào)用 23815.7.3 懶惰程序的計(jì)算 23915.7.4 懶惰函數(shù)式程序的優(yōu)化 23915.7.5 嚴(yán)格性分析 241推薦閱讀 243程序設(shè)計(jì):編譯函數(shù)式語言 244習(xí)題 244第16章 多態(tài)類型 24616.1 參數(shù)多態(tài)性 24616.1.1 顯式帶類型的多態(tài)語言 24716.1.2 多態(tài)類型的檢查 24816.2 類型推論 25316.2.1 一個(gè)隱式類型的多態(tài)語言 25416.2.2 類型推論算法 25516.2.3 遞歸的數(shù)據(jù)類型 25716.2.4 Hindley-Milner類型的能力 25916.3 多態(tài)變量的表示 25916.3.1 多態(tài)函數(shù)的擴(kuò)展 26016.3.2 完全的裝箱轉(zhuǎn)換 26116.3.3 基于強(qiáng)制的表示分析 26216.3.4 將類型作為運(yùn)行時(shí)參數(shù)傳遞 26416.4 靜態(tài)重載的解決方法 265推薦閱讀 266習(xí)題 266第17章 數(shù)據(jù)流分析 26917.1 流分析使用的中間表示 27017.2 各種數(shù)據(jù)流分析 27117.2.1 到達(dá)定值 27117.2.2 可用表達(dá)式 27317.2.3 到達(dá)表達(dá)式 27417.2.4 活躍分析 27417.3 使用數(shù)據(jù)流分析結(jié)果的幾種轉(zhuǎn)換 27417.3.1 公共子表達(dá)式刪除 27417.3.2 常數(shù)傳播 27517.3.3 復(fù)寫傳播 27517.3.4 死代碼刪除 27517.4 加快數(shù)據(jù)流分析 27617.4.1 位向量 27617.4.2 基本塊 27617.4.3 結(jié)點(diǎn)排序 27717.4.4 使用-定值鏈和定值-使用鏈 27717.4.5 工作表算法 27817.4.6 增量式數(shù)據(jù)流分析 27817.5 別名分析 28117.5.1 基于類型的別名分析 28217.5.2 基于流的別名分析 28317.5.3 使用可能別名信息 28417.5.4 嚴(yán)格的純函數(shù)式語言中的別名分析 285推薦閱讀 285習(xí)題 285第18章 循環(huán)優(yōu)化 28718.1 必經(jīng)結(jié)點(diǎn) 28918.1.1 尋找必經(jīng)結(jié)點(diǎn)的算法 28918.1.2 直接必經(jīng)結(jié)點(diǎn) 28918.1.3 循環(huán) 29018.1.4 循環(huán)前置結(jié)點(diǎn) 29118.2 循環(huán)不變量計(jì)算 29218.3 歸納變量 29318.3.1 發(fā)現(xiàn)歸納變量 29418.3.2 強(qiáng)度削弱 29518.3.3 刪除 29618.3.4 重寫比較 29618.4 數(shù)組邊界檢查 29718.5 循環(huán)展開 300推薦閱讀 301習(xí)題 301第19章 靜態(tài)單賦值形式 30319.1 轉(zhuǎn)化為SSA形式 30519.1.1 插入φ函數(shù)的標(biāo)準(zhǔn) 30619.1.2 必經(jīng)結(jié)點(diǎn)邊界 30619.1.3 插入φ函數(shù) 30819.1.4 變量重命名 30919.1.5 邊分割 31019.2 必經(jīng)結(jié)點(diǎn)樹的高效計(jì)算 31019.2.1 深度優(yōu)先生成樹 31019.2.2 半必經(jīng)結(jié)點(diǎn) 31119.2.3 Lengauer-Tarjan算法 31219.3 使用SSA的優(yōu)化算法 31519.3.1 死代碼刪除 31519.3.2 簡(jiǎn)單的常數(shù)傳播 31619.3.3 條件常數(shù)傳播 31719.3.4 保持必經(jīng)結(jié)點(diǎn)性質(zhì) 31919.4 數(shù)組、指針和存儲(chǔ)器 32019.5 控制依賴圖 32119.6 從SSA形式轉(zhuǎn)變回來 32319.7 函數(shù)式中間形式 324推薦閱讀 327習(xí)題 328第20章 流水和調(diào)度 33120.1 沒有資源約束時(shí)的循環(huán)調(diào)度 33220.2 有資源約束的循環(huán)流水 33620.2.1 模調(diào)度 33720.2.2 尋找最小的啟動(dòng)間距 33820.2.3 其他控制流 34020.2.4 編譯器應(yīng)該調(diào)度指令嗎 34020.3 分支預(yù)測(cè) 34120.3.1 靜態(tài)分支預(yù)測(cè) 34220.3.2 編譯器應(yīng)該預(yù)測(cè)分支嗎 342推薦閱讀 343習(xí)題 343第21章 存儲(chǔ)層次 34621.1 cache的組織結(jié)構(gòu) 34621.2 cache塊對(duì)齊 34921.3 預(yù)取 35021.4 循環(huán)交換 35421.5 分塊 35521.6 垃圾收集和存儲(chǔ)層次 357推薦閱讀 358習(xí)題 358附錄 Tiger語言參考手冊(cè) 360參考文獻(xiàn) 368索引 376

章節(jié)摘錄

  近十余年來,編譯器的構(gòu)建方法出現(xiàn)了一些新的變化。一些新的程序設(shè)計(jì)語言已經(jīng)得到應(yīng)用,例如,具有動(dòng)態(tài)方法的面向?qū)ο笳Z言、具有嵌套作用域和一階函數(shù)閉包(first-class function closure)的函數(shù)式語言等,這些語言中有許多都需要垃圾收集技術(shù)的支持。另一方面,新的計(jì)算機(jī)都有較大的寄存器集合,且存儲(chǔ)器訪問成為了影響性能的主要因素,這類機(jī)器在具有指令調(diào)度能力,并能對(duì)指令和數(shù)據(jù)高速緩存(cache)進(jìn)行局部性優(yōu)化的編譯器輔助下,常常能運(yùn)行得更快。. 本書可作為一到兩個(gè)學(xué)期編譯課程的教材。

編輯推薦

  《現(xiàn)代編譯原理:C語言描述》適用于高等院校計(jì)算機(jī)及相關(guān)專業(yè)的本科生或研究生,也可供科研人員或工程技術(shù)人員參考。

圖書封面

圖書標(biāo)簽Tags

評(píng)論、評(píng)分、閱讀與下載


    現(xiàn)代編譯原理-C語言描述 PDF格式下載


用戶評(píng)論 (總計(jì)25條)

 
 

  •   這本書相當(dāng)不錯(cuò),是編譯原理三劍客中內(nèi)容相對(duì)最新的了吧,并且很全面
  •   這是虎書,強(qiáng)烈推薦!如果你已經(jīng)從編譯原理龍書入門,那么再看此書猶如如虎添翼
  •   書的質(zhì)量還不錯(cuò),書的內(nèi)容大家都知道,沒話說
  •   書是不錯(cuò),印刷的質(zhì)量很好~結(jié)果老師就講了四章,唉……
  •   好東西!!
  •   牛!??!
  •   好書,以一種比較簡(jiǎn)單的方式講編譯器的構(gòu)造。跟另外兩本相比,是最薄的了。
  •   書中省略沒提很多基礎(chǔ)的東西,一看書的架勢(shì)就是把讀者定位到高點(diǎn),雖然是本科教材,但是我還是覺得,這個(gè)開始就適合研究生用吧,個(gè)人之見
  •   建議有經(jīng)驗(yàn)的開發(fā)人員看,初學(xué)者就不要看了,還是有很大的難度的哈
  •   書的結(jié)構(gòu)不錯(cuò),比較詳細(xì)
  •   書很好,只是自學(xué)起來難度大了些。
  •   一本專業(yè)性很強(qiáng)的書,值得學(xué)習(xí)。
  •   書內(nèi)部的封皮爛了一頁
  •   內(nèi)容不錯(cuò)啊,就是有點(diǎn)難度,一定要有離散數(shù)學(xué)的基礎(chǔ)
  •   很好很強(qiáng)大啊
  •   書本身內(nèi)容不錯(cuò),這這一系列的經(jīng)典書籍,我們是當(dāng)作教材來用的。
  •   不錯(cuò),很高深
  •   感覺很有用,就是內(nèi)容太難了
  •   這是我們老師推薦的,看完之后感覺很抽象,跟其他翻譯過來的教材一樣,沒有主線的感覺
  •   好書,好書,可惜就是太難懂了,不適合初學(xué)者
  •   感覺排版的不太好,字體也太小了,感覺沒有層次感?。。∷缘浆F(xiàn)在這本書還沒有看完。。。。
  •   源代碼少了點(diǎn).
  •   還不錯(cuò)就是有些細(xì)節(jié)不怎么了解
  •   現(xiàn)在還看不怎么懂的不過以后我的水平高了相信應(yīng)該可以給我很大的好處的哦
  •   不錯(cuò)就是速度太慢了
 

250萬本中文圖書簡(jiǎn)介、評(píng)論、評(píng)分,PDF格式免費(fèi)下載。 第一圖書網(wǎng) 手機(jī)版

京ICP備13047387號(hào)-7