編輯推薦
《編譯原理(本科教學版第2版)》是編譯領域無可替代的經典著作,被廣大計算機專業人士譽為“龍書”。《編譯原理(本科教學版第2版)》上一版自1986年齣版以來,被世界各地的著名高等院校和研究機構(包括美國哥倫比亞大學、斯坦福大學、哈佛大學、普林斯頓大學、貝爾實驗室)作為本科生和研究生的編譯原理課程的教材。該書對我國高等計算機教育領域也産生瞭重大影響。編譯領域裏程碑式的經典著作——龍書,20年後終於齣版新版!這是一個延綿30年的故事,這是一部關於龍書的傳奇!新版本,增添兩章節內容,使龍書地位更專業!
第2版對每一章都進行瞭全麵的修訂,以反映自上一版齣版20多年來軟件工程。程序設計語言和計算機體係結構方麵的發展對編譯技術的影響。《編譯原理(本科教學版第2版)》全麵介紹瞭編譯器的設計,並強調編譯技術在軟件設計和開發中的廣泛應用。每章中都包含大量的習題和豐富的參考文獻。
《編譯原理(本科教學版第2版)》適閤作為高等院校計算機專業本科生和研究生的編譯原理與技術課程的教材,也可供廣大計算機技術人員參考。
1977年,Alfred V.Aho和Jeffrey D.Ullman閤作齣版瞭《Principies of Compilet Design》,封麵是一位騎士和一隻恐龍,那恐龍是綠色的,因此被稱為龍書或綠龍書。
1986年,原來的兩位作者加上Ravi Sethi,升級瞭前一《編譯原理(本科教學版第2版)》,書名改為《compiIers:Principles,Techniques and Tools》,封麵依然沿用騎士和恐龍,那恐龍是紅色的,因此被稱為龍書二或者紅龍書。
又過瞭一個9年又一個9年,編譯領域的巨無霸——龍書始終都沒有升級。
終於在2006年底,龍書升級瞭。作者又增加瞭Monica S.Lam,名字與龍書二相同,封麵依然沿用恐龍和武士的設計,這次的龍是紫色的,因此被稱為龍書三或者紫龍書。
內容簡介
《編譯原理》是編譯原理課程方麵的經典教材,全麵、深入地探討瞭編譯器設計方麵的重要主題,包括詞法分析、語法分析、語法製導定義和語法製導翻譯、運行時刻環境、目標代碼生成、代碼優化技術、並行性檢測以及過程間分析技術,並在相關章節中給齣大量的實例。與上一版相比,本書進行瞭全麵修訂,涵蓋瞭編譯器開發方麵新進展。每章中都提供瞭大量的實例及參考文獻。
本書基於該書第2版進行改編,內容更加精練和實用,體係更加符閤國內教學情況,適閤作為高等院校計算機及相關專業本科生的編譯原理課程的教材,也是廣大研究人員和技術人員的極好參考讀物。
本書是編譯領域無可替代的經典著作,被廣大計算機專業人士譽為“龍書”。本書上一版自1986年齣版以來,被世界各地的著名高等院校和研究機構(包括美國哥倫比亞大學。斯坦福大學、哈佛大學、普林斯頓大學。貝爾實驗室)作為本科生和研究生的編譯原理課程的教材。該書對我國高等計算機教育領域也産生瞭重大影響。
第2版對每一章都進行瞭全麵的修訂,以反映自上一版齣版20多年來軟件工程、程序設計語言和計算機體係結構方麵的發展對編譯技術的影響。第2版全麵介紹瞭編譯器的設計,並強調編譯技術在軟件設計和開發中的廣泛應用。每章中都包含大量的習題和豐富的參考文獻。
本書基於該書第2版進行改編,保留其中的基本內容,壓縮或刪除瞭一些高級內容,更適閤作為國內高校計算機及相關專業本科生編譯原理課程教材。
作者簡介
Alfred V.Aho,博士是哥倫比亞大學計算機科學係主管本科生教學的副主任,tEEEFe,10w,美國科學與藝術學院及國傢工程學院院士,曾獲得IEEE的馮·諾伊曼奬。他是《編譯原理》(Compiler:Principles,Techniques,andTools)的第一作者。他目前的研究方嚮為量子計算、程式設計語言.編譯器和算法等。
Ravi Sethi,Avaya實驗室總裁,曾任貝爾實驗室高級副總裁和Lucent Technologies通信軟件的CTO。他曾在賓夕法尼亞州立大學,亞利桑那州立大學和普林斯頓大學任教,是ACM會士。
Monica S.Lam,斯坦福大學計算機科學係教授,曾任Tensilica的首席科學傢,也是Moka5的首任CEO。曾經主持SUIF項目,該項目産生瞭最流行的研究用編譯器之一。
內頁插圖
目錄
齣版者的話
改編者序
前言
第1章 引論
1.1 語言處理器
1.2 一個編譯器的結構
1.2.1 詞法分析
1.2.2 語法分析
1.2.3 語義分析
1.2.4 中間代碼生成
1.2.5 代碼優化
1.2.6 代碼生成
1.2.7 符號錶管理
1.2.8 將多個步驟組閤成趟
1.2.9 編譯器構造工具
1.3 程序設計語言的發展曆程
1.3.1 走嚮高級程序設計語言
1.3.2 對編譯器的影響
1.3.3 1.3節的練習
1.4 構建一個編譯器的相關科學
1.4.1 編譯器設計和實現中的建模
1.4.2 代碼優化的科學
1.5 編譯技術的應用
1.5.1 高級程序設計語言的實現
1.5.2 針對計算機體係結構的優化
1.5.3 新計算機體係結構的設計
1.5.4 程序翻譯
1.5.5 軟件生産率工具
1.6 程序設計語言基礎
1.6.1 靜態和動態的區彆
1.6.2 環境與狀態
1.6.3 靜態作用域和塊結構
1.6.4 顯式訪問控製
1.6.5 動態作用域
1.6.6 參數傳遞機製
1.6.7 彆名
1.6.8 1.6節的練習
1.7 第1章總結
1.8 第1章參考文獻
第2章 一個簡單的語法製導翻譯器
2.1 引言
2.2 語法定義
2.2.1 文法定義
2.2.2 推導
2.2.3 語法分析樹
2.2.4 二義性
2.2.5 運算符的結閤性
2.2.6 運算符的優先級
2.2.7 2.2節的練習
2.3 語法製導翻譯
2.3.1 後綴錶示
2.3.2 綜閤屬性
2.3.3 簡單語法製導定義
2.3.4 樹的遍曆
2.3.5 翻譯方案
2.3.6 2.3節的練習
2.4 語法分析
2.4.1 自頂嚮下分析方法
2.4.2 預測分析法
2.4.3 何時使用産生式
2.4.4 設計一個預測分析器
2.4.5 左遞歸
2.4.6 2.4節的練習
2.5 簡單錶達式的翻譯器
2.5.1 抽象語法和具體語法
2.5.2 調整翻譯方案
2.5.3 非終結符號的過程
2.5.4 翻譯器的簡化
2.5.5 完整的程序
2.6 詞法分析
2.6.1 剔除空白和注釋
2.6.2 預讀
2.6.3 常量
2.6.4 識彆關鍵字和標識符
2.6.5 詞法分析器
2.6.6 2.6節的練習
2.7 符號錶
2.7.1 為每個作用域設置一個符號錶
2.7.2 符號錶的使用
2.8 生成中間代碼
2.8.1 兩種中間錶示形式
2.8.2 語法樹的構造
2.8.3 靜態檢查
2.8.4 三地址碼
2.8.5 2.8節的練習
2.9 第2章總結
2.5.5 完整的程序
2.6 詞法分析
2.6.1 剔除空白和注釋
2.6.2 預讀
2.6.3 常量
2.6.4 識彆關鍵字和標識符
2.6.5 詞法分析器
2.6.6 2.6節的練習
2.7 符號錶
2.7.1 為每個作用域設置—個符號錶
2.7.2 符號錶的使用
2.8 生成中間代碼
2.8.1 兩種中間錶示形式
2.8.2 語法樹的構造
2.8.3 靜態檢查
2.8.4 三地址碼
2.8.5 2.8節的練習
2.9 第2章總結
第3章 詞法分析
3.1 詞法分析器的作用
3.1.1 詞法分析及語法分析
3.1.2 詞法單元、模式和詞素
3.1.3 詞法單元的屬性
3.1.4 詞法錯誤
3.1.5 3.1節的練習
3.2 詞法單元的規約
3.2.1 串和語言
3.2.2 語言上的運算
3.2.3 正則錶達式
3.2.4 正則定義
3.2.5 正則錶達式的擴展
3.2.6 3.2 節的練習
3.3 詞法單元的識彆
3.3.1 狀態轉換圖
3.3.2 保留字和標識符的識彆
3.3.3 完成我們的例子
3.3.4 基於狀態轉換圖的詞法分析器的體係結構
3.3.5 3.3 節的練習
3.4 詞法分析器生成工具Lex
3.4.1 Lex的使用
3.4.2 Lex程序的結構
3.4.3 Lex中的衝突解決
3.4.4 嚮前看運算符
3.4.5 3.4節的練習
3.5 有窮自動機
3.5.1 不確定的有窮自動機
3.5.2 轉換錶
3.5.3 自動機中輸入字符串的接受
3.5.4 確定的有窮自動機
3.5.5 3.5節的練習
3.6 從正則錶達式到自動機
3.6.1 從NFA到DFA的轉換
3.6.2 最小化一個DFA的狀態數
3.6.3 從正則錶達式構造NFA
3.6.4 字符串處理算法的效率
3.6.5 3.6節的練習
3.7 詞法分析器生成工具的設計
3.7.1 生成的詞法分析器的結構
3.7.2 詞法分析器使用的DFA
3.7.3 詞法分析器的狀態最小化
3.7.4 實現嚮前看運算符
3.7.5 3.7節的練習
3.8 第3章總結
3.9 第3章參考文獻
夥4章 語法分析
4.1 引論
4.1.1 語法分析器的作用
4.1.2 代錶性的文法
4.1.3 語法錯誤的處理
4.1.4 錯誤恢復策略
4.2 上下文無關文法
4.2.1 上下文無關文法的正式定義
4.2.2 符號錶示的約定
4.2.3 推導
4.2.4 語法分析樹和推導
4.2.5 二義性
4.2.6 驗證文法生成的語言
4.2.7 上下文無關文法和正則錶達式
4.2.8 4.2節的練習
4.3 設計文法
4.3.1 詞法分析和語法分析
4.3.2 消除二義性
4.3.3 左遞歸的消除
4.3.4 提取左公因子
4.3.5 非上下文無關語言的構造
4.3.6 4.3節的練習
4.4 自頂嚮下的語法分析
4.4.1 遞歸下降的語法分析
4.4.2 FIRST和FOLLOW
4.4.3 LL(1)文法
4.4.4 非遞歸的預測分析
4.4.5 預測分析中的錯誤恢復
4.4.6 4.4節的練習
4.5 自底嚮上的語法分析
4.5.1 歸約
4.5.2 句柄剪枝
4.5.3 移人一歸約語法分析技術
4.5.4 移入一歸約語法分析中的衝突
4.5.5 4.5節的練習
4.6 LR語法分析技術介紹:簡單LR技術
4.6.1 為什麼使用LR語法分析器
4.6.2 項和LR(0)自動機
4.6.3 LR語法分析算法
4.6.4 構造SLR語法分析錶
4.6.5 可行前綴
4.6.6 4.6節的練習
4.7 更強大的LR語法分析器
4.7.1 規範LR(1)項
4.7.2 構造LR(1)項集
4.7.3 規範LR(1)語法分析錶
4.7.4 構造LALR語法分析錶
4.7.5 高效構造LALR語法分析錶的方法
4.7.6 4.7節的練習
4.8 使用二義性文法
4.8.1 用優先級和結閤性解決衝突
4.8.2 “懸空=else”的二義性
4.8.3 LR語法分析中的錯誤恢復
4.8.4 4.8節的練習
4.9 語法分析器生成工具
4.9.1 語法分析器生成工具Yacc
4.9.2 使用帶有二義性文法的Yacc規約
4.9.3 用Lex創建Yacc的詞法分析器
4.9.4 Yacc中的錯誤恢復
4.9.5 4.9節的練習
4.10 第4章總結
4.11 第4章參考文獻
第5章 語法製導的翻譯
第6章 中間代碼生成
第7章 運行時刻環境
第8章 代碼生成
第9章 機器無關優化
附錄 一個完整的編譯器前端
精彩書摘
第1章 引論
程序設計語言是嚮人以及計算機描述計算過程的記號。如我們所知,這個世界依賴於程序設計語言,因為在所有計算機上運行的所有軟件都是用某種程序設計語言編寫的。但是,在一個程序可以運行之前,它首先需要被翻譯成一種能夠被計算機執行的形式。
完成這項翻譯工作的軟件係統稱為編譯器(compiler)。
本書介紹的是設計和實現編譯器的方法。我們將介紹用於構建麵嚮多種語言和機器的翻譯器的一些基本思想。編譯器設計的原理和技術還可以用於編譯器設計之外的眾多領域。因此,這些原理和技術通常會在一個計算機科學傢的職業生涯中多次被用到。研究編譯器的編寫將涉及程序設計語言、計算機體係結構、形式語言理論、算法和軟件工程。
在本章中,我們將介紹語言翻譯器的不同形式,在高層次上概述一個典型編譯器的結構,並討論瞭程序設計語言和硬件體係結構的發展趨勢。這些趨勢將影響編譯器的形式。我們還將介紹關於編譯器設計和計算機科學理論的關係的一些事實,並給齣編譯技術在編譯領域之外的一些應用。最後,我們將簡單論述在我們研究編譯器時需要用到的重要的程序設計語言概念。
前言/序言
構造編譯器的原理和技術是計算機科學技術領域中一個非常重要的組成部分,指導人們構造能夠生成正確。高效的代碼的編譯器。現在的絕大部分軟件都是使用高級程序設計語言編寫的,需要使用編譯器來得到可運行代碼,因此編譯原理和技術對於構造正確。可靠。高效的軟件是非常重要的。經過瞭50年的研究發展,編譯技術已經使得人們可以為各種高級編程機製生成高效的代碼,使得人們可以使用更加抽象的語言來編寫高效的軟件。但硬件技術的進步仍然對編譯技術提齣瞭新的挑戰。比如多核PU的廣泛應用要求更優秀的程序分析技術和並行編譯器。因此,編譯原理和技術在將來仍然是一個重要的研究課題。
Aho等人編寫的《編譯原理》是一本經典的教材。這本書不僅包含瞭編譯器構造的基本原理和技術,還包含瞭很多和編譯相關的高級技術。對於專業技術人員來說,這是一本很全麵的參考書目。但是書中的很多內容超齣瞭本科教學的要求,不符閤中國的本科教材的習慣。因此,齣版社委托我們對這本書進行改編,主要的工作是刪減一些不需要在本科教學過程中講授的內容。保留下的內容包括詞法分析。語法分析。語義分析。中間代碼生成,以及運行時刻環境。優化和代碼生成方法的基本技術。
我們刪去瞭原書的第十章。第十一章和第十二章。這三章的內容是關於並行性和程序分析的高級議題,一般不對本科生講授。此外,我們對原書第九章機器無關優化的內容進行瞭刪減,保留瞭一些基本的數據流優化算法。我們還刪減瞭一些高級的算法和技術,包括運行時刻環境中的短停頓垃圾收集算法。類型檢查中的類型推導和閤一算法,高效構造DF算法等。另外,我們還刪去瞭一些與實現細節有關的技術,比如詞法分析中緩衝區的管理。語法分析中LR分析錶的壓縮技術等。刪去瞭這些高級內容之後,保留部分已經可以在一個學期的本科生課程中講完。當然,考慮到不同學校有不同的專業要求,任課教師仍然可以考慮捨棄一些內容,比如第八章中關於代碼生成的高級議題編譯原理是一門比較難學的課程。主要原因在於它包含瞭很多理論性的東西,抽象程度比較高,而且還包含瞭很多復雜的算法和用於編譯器構造的抽象數學概念。我建議學生學習的時候可以先閱讀本書的第二章。第二章的內容可以幫助大傢瞭解編譯器的基本構造和功能,然後在學習後續各章節的時候加深理解。自己動手編寫一個小型語言的編譯器也是一個很好的學習方法。使用Y和Lex等工具之後,編寫一個這樣的編譯器並不需要很大的工作量,卻可以有效幫助大傢深入理解各種編譯技術。
編譯原理(本科教學版)(第2版) [Compilers:Principles,Techniques and Tools,Second Edition] 下載 mobi epub pdf txt 電子書 格式
編譯原理(本科教學版)(第2版) [Compilers:Principles,Techniques and Tools,Second Edition] 下載 mobi pdf epub txt 電子書 格式 2024
編譯原理(本科教學版)(第2版) [Compilers:Principles,Techniques and Tools,Second Edition] mobi epub pdf txt 電子書 格式下載 2024