《編譯技術(shù)》主要內(nèi)容編排如下:第1章介紹編譯器整體結(jié)構(gòu);第2章介紹一個簡單的編譯程序構(gòu)造過程;第3章至第6章分別介紹詞法分析、語法解析、語義分析、代碼生成等過程中所面臨的技術(shù)問題及解決方案;第7章介紹運行時存儲空間的組織與分配;第8章介紹LCC(Learning Compiler with C)語言編譯程序的C語言實現(xiàn)。本書在強調(diào)基礎(chǔ)理論的同時,力求反映編譯技術(shù)方面的最新成果,書中給出了大量代碼,以幫助讀者掌握編譯器構(gòu)造的相關(guān)技術(shù)。
本書文字簡潔易懂,內(nèi)容循序漸進(jìn)、深入淺出,便于自學(xué),適合作為高等學(xué)校計算機類專業(yè)的教材,也可作為軟件工程技術(shù)人員的參考書。
本書配套授課電子課件,需要的教師可登錄www.cmpedu.com免費注冊,審核通過后下載,或聯(lián)系編輯索取。
《編譯技術(shù)》重點介紹了編譯器基礎(chǔ)軟件框架LLVM及相關(guān)工具的使用實例。書中給出了大量代碼,以幫助讀者掌握編譯器構(gòu)造的相關(guān)技術(shù)。以提高學(xué)生的動手實踐能力為重點,鼓勵學(xué)生嘗試設(shè)計并實現(xiàn)一個新的語言編譯器。
“編譯原理”課程是計算機專業(yè)一門重要的專業(yè)基礎(chǔ)課,也是計算機系統(tǒng)軟件課程中非常重要的一個分支。在眾多的原理性學(xué)習(xí)課程中,編譯原理主要承擔(dān)了語言實現(xiàn)原理、方法和技術(shù)的介紹。該課程內(nèi)容有一定深度和難度,且綜合性比較強,對學(xué)生專業(yè)知識掌握情況要求也比較高,學(xué)生在學(xué)習(xí)過程中會感到內(nèi)容抽象、算法復(fù)雜,是一門公認(rèn)的比較難學(xué)、比較難教的課程。很多學(xué)生也認(rèn)為“編譯原理”只能應(yīng)用在實現(xiàn)程序語言的編譯器上,而他們以后可能不會在編譯器及其相關(guān)領(lǐng)域方面鉆研,所以學(xué)習(xí)興趣不高。
其實這是一種誤解。通過學(xué)習(xí)編譯程序的構(gòu)造原理和技術(shù),將有助于深刻理解和正確使用程序設(shè)計語言。如正規(guī)式和有窮自動機在文本編輯器中的廣泛應(yīng)用。有窮自動機在字符串查找中的運用、必經(jīng)結(jié)點算法在網(wǎng)絡(luò)中的運用,以及由文法來定義網(wǎng)絡(luò)協(xié)議等。
此外,雖然編譯原理基本內(nèi)容已相對比較成熟,算法相對固定,但編譯技術(shù)作為計算機語言發(fā)展的支柱,是計算機科學(xué)中發(fā)展最迅速、最成熟的一個分支,特別是近幾年大量編譯輔助工具應(yīng)運而生,大大簡化了編譯器的實現(xiàn)過程。
基于以上因素,本書在編排時以提高學(xué)生的動手實踐能力為重點,在選擇性講解必要的理論及算法的同時,鼓勵學(xué)生嘗試設(shè)計并實現(xiàn)一個新的語言編譯器,在此基礎(chǔ)上將編譯程序中的各種算法和技術(shù)應(yīng)用到各個領(lǐng)域,從而激發(fā)學(xué)生的創(chuàng)造性思維,培養(yǎng)學(xué)生的創(chuàng)新能力,為今后的學(xué)習(xí)、工作打下堅實的基礎(chǔ)。
出版說明
前言
第1章編譯概述
1.1編譯器與解釋器
1.2編譯器的組織與結(jié)構(gòu)
1.2.1詞法分析
1.2.2語法分析
1.2.3語義分析
1.2.4代碼生成與優(yōu)化
1.2.5符號表管理及錯誤處理
1.3總結(jié)與展望
1.4習(xí)題
第2章實現(xiàn)一個簡單編譯器
2.1語言定義
2.1.1詞法定義
2.1.2語法定義
2.2簡單編譯器的結(jié)構(gòu)
2.3詞法分析
2.4遞歸下降語法解析
2.4.1規(guī)則的程序?qū)崿F(xiàn)
2.4.2預(yù)測所選的規(guī)則
2.5抽象語法樹
2.6語義分析
2.6.1符號表
2.6.2類型檢查與轉(zhuǎn)換
2.7中間代碼生成
2.7.1三地址代碼
2.7.2樹的遍歷與代碼生成
2.8習(xí)題
第3章詞法分析器
3.1詞法分析器概述
3.2單詞的識別
3.3狀態(tài)轉(zhuǎn)換圖
3.4正則表達(dá)式
3.4.1字母表的概念
3.4.2正則表達(dá)式的形式化定義
3.5有限狀態(tài)自動機與詞法分析器
3.5.1確定的有限狀態(tài)自動機
3.5.2正則表達(dá)式到有限狀態(tài)自動機的轉(zhuǎn)換
3.5.3詞法分析器的自動機實現(xiàn)
3.6詞法分析器的自動生成
3.6.1Lex中的單詞符號定義
3.6.2Lex中的字符處理
3.6.3其他工具簡介
3.7習(xí)題
第4章文法與語法解析
4.1文法和語法的定義
4.1.1文法的定義
4.1.2上下文無關(guān)文法
4.1.3推導(dǎo)與規(guī)約
4.1.4語法樹
4.2自上而下的語法分析
4.2.1左遞歸的消除
4.2.2提取公共左因子
4.2.3遞歸下降分析法
4.2.4表驅(qū)動的預(yù)測分析法
4.3自下而上的語法分析
4.3.1LR分析過程
4.3.2LR(0)分析表的構(gòu)造
4.3.3SLR(1)分析表的構(gòu)造
4.4語法解析相關(guān)工具
4.4.1YACC
4.4.2ANTLR
4.5習(xí)題
第5章語義分析
5.1語義分析概況
5.1.1語義分析的功能
5.1.2語義分析方法
5.2構(gòu)建抽象語法樹
5.2.1單一類型語法樹的設(shè)計
5.2.2多類型語法樹的設(shè)計
5.2.3多類型語法樹的遍歷
5.3符號表
5.3.1符號表的數(shù)據(jù)結(jié)構(gòu)
5.3.2哈希符號表的實現(xiàn)
5.3.3分程序結(jié)構(gòu)的作用域
5.3.4分程序結(jié)構(gòu)符號表的實現(xiàn)
5.4說明語句分析
5.4.1簡單變量聲明
5.4.2結(jié)構(gòu)類型的聲明
5.5賦值語句分析
5.6控制語句分析
5.6.1if語句
5.6.2while語句
5.6.3for語句
5.6.4過程調(diào)用語句
5.7習(xí)題
第6章LLVM代碼生成與優(yōu)化
6.1LLVM系統(tǒng)
6.1.1LLVM框架設(shè)計理念
6.1.2LLVM中間代碼表示
6.1.3LLVM代碼示例分析
6.1.4LLVM工具集
6.2LLVM代碼生成
6.2.1常量、局部變量的代碼生成
6.2.2表達(dá)式的代碼生成
6.2.3函數(shù)聲明與調(diào)用
6.3優(yōu)化概述
6.4基本塊與流圖
6.4.1基本塊
6.4.2程序流圖
6.5基本塊內(nèi)的優(yōu)化
6.6循環(huán)優(yōu)化
6.6.1必經(jīng)結(jié)點
6.6.2回邊及循環(huán)的查找
6.6.3循環(huán)的優(yōu)化
6.7習(xí)題
第7章運行時存儲空間的組織與分配
7.1存儲組織
7.1.1運行時內(nèi)存的劃分
7.1.2活動記錄
7.1.3存儲分配策略
7.1.4變量的存儲分配
7.2棧式分配
7.2.1只含半靜態(tài)變量的棧式分配
7.2.2半動態(tài)變量的棧式分配
7.3嵌套子程序的存儲組織
7.4參數(shù)傳遞方式
7.4.1參數(shù)傳遞的語義模型
7.4.2參數(shù)傳遞的實現(xiàn)模型
7.5習(xí)題
第8章LCC語言編譯程序的實現(xiàn)
8.1LCC語言簡介
8.2詞法分析
8.3語法分析
8.3.1LCC語言文法說明
8.3.2YACC與Lex之間的約定
8.3.3抽象語法樹結(jié)點設(shè)計
8.3.4構(gòu)建抽象語法樹
8.3.5文法動作說明
8.4語義分析
8.4.1符號表的實現(xiàn)
8.4.2語義檢查
8.4.3數(shù)組設(shè)計與檢查
8.5中間代碼生成
8.5.1LLVM代碼生成接口
8.5.2LCC語言的代碼生成框架
8.5.3表達(dá)式的代碼生成
8.5.4輸入輸出語句的代碼生成
8.6LCC語言代碼運行測試
8.6.1變量作用域測試
8.6.2控制語句測試
8.6.3整型數(shù)組測試
8.6.4字符串?dāng)?shù)組測試
8.7習(xí)題
附錄縮略語
參考文獻(xiàn)