編輯推薦
適讀人群 :高等學校計算機類專業學生,軟件工程技術人員 《編譯技術》重點介紹瞭編譯器基礎軟件框架LLVM及相關工具的使用實例。書中給齣瞭大量代碼,以幫助讀者掌握編譯器構造的相關技術。以提高學生的動手實踐能力為重點,鼓勵學生嘗試設計並實現一個新的語言編譯器。
內容簡介
《編譯技術》主要內容編排如下:第1章介紹編譯器整體結構;第2章介紹一個簡單的編譯程序構造過程;第3章至第6章分彆介紹詞法分析、語法解析、語義分析、代碼生成等過程中所麵臨的技術問題及解決方案;第7章介紹運行時存儲空間的組織與分配;第8章介紹LCC(Learning Compiler with C)語言編譯程序的C語言實現。本書在強調基礎理論的同時,力求反映編譯技術方麵的最新成果,書中給齣瞭大量代碼,以幫助讀者掌握編譯器構造的相關技術。
本書文字簡潔易懂,內容循序漸進、深入淺齣,便於自學,適閤作為高等學校計算機類專業的教材,也可作為軟件工程技術人員的參考書。
本書配套授課電子課件,需要的教師可登錄www.cmpedu.com免費注冊,審核通過後下載,或聯係編輯索取。
目錄
齣版說明
前言
第1章編譯概述
1.1編譯器與解釋器
1.2編譯器的組織與結構
1.2.1詞法分析
1.2.2語法分析
1.2.3語義分析
1.2.4代碼生成與優化
1.2.5符號錶管理及錯誤處理
1.3總結與展望
1.4習題
第2章實現一個簡單編譯器
2.1語言定義
2.1.1詞法定義
2.1.2語法定義
2.2簡單編譯器的結構
2.3詞法分析
2.4遞歸下降語法解析
2.4.1規則的程序實現
2.4.2預測所選的規則
2.5抽象語法樹
2.6語義分析
2.6.1符號錶
2.6.2類型檢查與轉換
2.7中間代碼生成
2.7.1三地址代碼
2.7.2樹的遍曆與代碼生成
2.8習題
第3章詞法分析器
3.1詞法分析器概述
3.2單詞的識彆
3.3狀態轉換圖
3.4正則錶達式
3.4.1字母錶的概念
3.4.2正則錶達式的形式化定義
3.5有限狀態自動機與詞法分析器
3.5.1確定的有限狀態自動機
3.5.2正則錶達式到有限狀態自動機的轉換
3.5.3詞法分析器的自動機實現
3.6詞法分析器的自動生成
3.6.1Lex中的單詞符號定義
3.6.2Lex中的字符處理
3.6.3其他工具簡介
3.7習題
第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.3自下而上的語法分析
4.3.1LR分析過程
4.3.2LR(0)分析錶的構造
4.3.3SLR(1)分析錶的構造
4.4語法解析相關工具
4.4.1YACC
4.4.2ANTLR
4.5習題
第5章語義分析
5.1語義分析概況
5.1.1語義分析的功能
5.1.2語義分析方法
5.2構建抽象語法樹
5.2.1單一類型語法樹的設計
5.2.2多類型語法樹的設計
5.2.3多類型語法樹的遍曆
5.3符號錶
5.3.1符號錶的數據結構
5.3.2哈希符號錶的實現
5.3.3分程序結構的作用域
5.3.4分程序結構符號錶的實現
5.4說明語句分析
5.4.1簡單變量聲明
5.4.2結構類型的聲明
5.5賦值語句分析
5.6控製語句分析
5.6.1if語句
5.6.2while語句
5.6.3for語句
5.6.4過程調用語句
5.7習題
第6章LLVM代碼生成與優化
6.1LLVM係統
6.1.1LLVM框架設計理念
6.1.2LLVM中間代碼錶示
6.1.3LLVM代碼示例分析
6.1.4LLVM工具集
6.2LLVM代碼生成
6.2.1常量、局部變量的代碼生成
6.2.2錶達式的代碼生成
6.2.3函數聲明與調用
6.3優化概述
6.4基本塊與流圖
6.4.1基本塊
6.4.2程序流圖
6.5基本塊內的優化
6.6循環優化
6.6.1必經結點
6.6.2迴邊及循環的查找
6.6.3循環的優化
6.7習題
第7章運行時存儲空間的組織與分配
7.1存儲組織
7.1.1運行時內存的劃分
7.1.2活動記錄
7.1.3存儲分配策略
7.1.4變量的存儲分配
7.2棧式分配
7.2.1隻含半靜態變量的棧式分配
7.2.2半動態變量的棧式分配
7.3嵌套子程序的存儲組織
7.4參數傳遞方式
7.4.1參數傳遞的語義模型
7.4.2參數傳遞的實現模型
7.5習題
第8章LCC語言編譯程序的實現
8.1LCC語言簡介
8.2詞法分析
8.3語法分析
8.3.1LCC語言文法說明
8.3.2YACC與Lex之間的約定
8.3.3抽象語法樹結點設計
8.3.4構建抽象語法樹
8.3.5文法動作說明
8.4語義分析
8.4.1符號錶的實現
8.4.2語義檢查
8.4.3數組設計與檢查
8.5中間代碼生成
8.5.1LLVM代碼生成接口
8.5.2LCC語言的代碼生成框架
8.5.3錶達式的代碼生成
8.5.4輸入輸齣語句的代碼生成
8.6LCC語言代碼運行測試
8.6.1變量作用域測試
8.6.2控製語句測試
8.6.3整型數組測試
8.6.4字符串數組測試
8.7習題
附錄縮略語
參考文獻
前言/序言
“編譯原理”課程是計算機專業一門重要的專業基礎課,也是計算機係統軟件課程中非常重要的一個分支。在眾多的原理性學習課程中,編譯原理主要承擔瞭語言實現原理、方法和技術的介紹。該課程內容有一定深度和難度,且綜閤性比較強,對學生專業知識掌握情況要求也比較高,學生在學習過程中會感到內容抽象、算法復雜,是一門公認的比較難學、比較難教的課程。很多學生也認為“編譯原理”隻能應用在實現程序語言的編譯器上,而他們以後可能不會在編譯器及其相關領域方麵鑽研,所以學習興趣不高。
其實這是一種誤解。通過學習編譯程序的構造原理和技術,將有助於深刻理解和正確使用程序設計語言。如正規式和有窮自動機在文本編輯器中的廣泛應用。有窮自動機在字符串查找中的運用、必經結點算法在網絡中的運用,以及由文法來定義網絡協議等。
此外,雖然編譯原理基本內容已相對比較成熟,算法相對固定,但編譯技術作為計算機語言發展的支柱,是計算機科學中發展最迅速、最成熟的一個分支,特彆是近幾年大量編譯輔助工具應運而生,大大簡化瞭編譯器的實現過程。
基於以上因素,本書在編排時以提高學生的動手實踐能力為重點,在選擇性講解必要的理論及算法的同時,鼓勵學生嘗試設計並實現一個新的語言編譯器,在此基礎上將編譯程序中的各種算法和技術應用到各個領域,從而激發學生的創造性思維,培養學生的創新能力,為今後的學習、工作打下堅實的基礎。
本書在總體上介紹現代編譯係統構造過程中的基本實現技術和一些自動構造工具,旨在讓學生掌握編譯器構造技術的最新進展,並在此基礎上能夠根據實際需求快速而高效地實現特定語言的編譯器。
全書章節安排如下:第1章是編譯器的總體介紹,即現代編譯器是如何組織的,其典型結構是什麼。第2章給齣瞭一個比較簡單的例子,其目的是使學生對編譯器各組成部分有一個感性的認識,使其理解不光停留在理論層麵,而是付諸於實踐。第3章至第6章則分彆對典型編譯器的各組成部分的實現細節及最新技術進行瞭介紹。第7章從理論的角度對運行時存儲空間的組織與分配進行瞭介紹。作為總結,第8章給齣瞭一個編譯器設計與構造的完整實例,即以C語言為基礎,設計並實現瞭LCC(LearningCompilerwithC)語言的編譯程序,以幫助學生從整體上理解並掌握編譯器構造相關技術,能夠獨立地完成編譯器開發任務。作為教材,每章後均附有習題。書中除介紹瞭LEX、YACC使用方法外,還重點介紹瞭編譯器基礎軟件框架LLVM及相關工具的使用實例。
本書作為高等院校編譯技術的教材,體現瞭編譯課程改革的方嚮。本課程建議授課學時為64學時,其中實驗學時不少於20學時,並要求先修C語言、數據結構及匯編語言等課程。
本書由周爾強、周帆、韓濛、陳文宇編寫;全書由陳文宇組織與審閱。
對於書中存在的不足之處,懇請讀者批評指正。
編譯技術 下載 mobi epub pdf txt 電子書