編譯方法、技術(shù)與實踐 7許暢 馮洋 鄭艷偉 陳鄞
定 價:69 元
- 作者:許暢 馮洋 鄭艷偉 陳鄞
- 出版時間:2024/7/1
- ISBN:9787111745310
- 出 版 社:機械工業(yè)出版社
- 中圖法分類:TP314
- 頁碼:
- 紙張:膠版紙
- 版次:
- 開本:16開
本書是在計算機領(lǐng)域本科教育教學(xué)改革試點工作計劃“編譯原理”課程組的組織下編寫的理論教材之一。本書從理論和實踐兩個方面指導(dǎo)與幫助學(xué)生深刻理解編譯器的工作原理。其中,理論方法的教學(xué)使得學(xué)生能夠理解編譯器運行過程中的核心算法,而實踐技術(shù)則幫助學(xué)生掌握理論方法及算法在代碼實現(xiàn)層面的設(shè)計與編碼要點,最后結(jié)合實踐內(nèi)容對理論方法與實踐技術(shù)進行鞏固。本書適合作為高校計算機及相關(guān)專業(yè)編譯原理課程的教材,也適合作為研發(fā)人員了解編譯技術(shù)的參考書。
本書是在計算機領(lǐng)域本科教育教學(xué)改革試點工作計劃“編譯原理”課程組的組織下編寫的理論教材之一。本書從理論和實踐兩個方面指導(dǎo)與幫助學(xué)生深刻理解編譯器的工作原理。其中,理論方法的教學(xué)使得學(xué)生能夠理解編譯器運行過程中的核心算法,而實踐技術(shù)則幫助學(xué)生掌握理論方法及算法在代碼實現(xiàn)層面的設(shè)計與編碼要點,最后結(jié)合實踐內(nèi)容對理論方法與實踐技術(shù)進行鞏固。本書適合作為高校計算機及相關(guān)專業(yè)編譯原理課程的教材,也適合作為研發(fā)人員了解編譯技術(shù)的參考書。
前 言
本書是在計算機領(lǐng)域本科教育教學(xué)改革試點工作計劃(簡稱“101計劃”)“編譯原理”課程組的組織下編寫的理論教材之一。與其他同類理論教材相比,本書在介紹編譯理論和方法的同時,更強調(diào)實踐技術(shù),并注重編譯理論與實踐的結(jié)合。在內(nèi)容方面,本書的理論部分涵蓋了當(dāng)前主流編譯器編譯過程中的核心技術(shù)要點,實踐部分則引導(dǎo)學(xué)生基于理論知識構(gòu)建一個能夠?qū)⒁灶怌語言編寫的源程序編譯為MIPS目標(biāo)語言代碼的完整編譯器。在教學(xué)中,教師能夠參考本書完整地進行理論教學(xué)和實踐指導(dǎo),其內(nèi)容已經(jīng)包括了相關(guān)資料。
一方面,當(dāng)前許多“編譯原理”課程理論教材以傳授理論知識為主,其中的內(nèi)容離編譯器具體實踐尚有一定的距離。這可能使學(xué)生偏重學(xué)習(xí)理論和方法,而對編譯器實現(xiàn)缺乏更為深刻的理解。另一方面,常規(guī)的“編譯原理”實踐課程大多基于一門相對簡易的編程語言,要求學(xué)生實現(xiàn)支持該語言語法和語義處理部分的編譯器。由于缺乏規(guī)范化的實踐指導(dǎo),有時會降低教學(xué)要求,不得不允許學(xué)生“靈活”(較為隨意)地實現(xiàn)編譯器的功能;又或者由于教學(xué)要求過高,學(xué)生在無實踐指導(dǎo)的情況下對編譯器實現(xiàn)無法下手,而對課程產(chǎn)生較大的抵觸心理。針對這些問題,本書面向開設(shè)計算機學(xué)科的大專院校,提供一門接近實際C語言的C--語言,從理論方法的解說到實踐指導(dǎo)的進行,引導(dǎo)性地講解理論知識和編譯器的具體實現(xiàn),并提供充分的測試樣例來驗證編譯器實現(xiàn)的正確性。
整體而言,基于本書介紹的理論方法和實踐技術(shù),我們設(shè)計了相應(yīng)的實踐內(nèi)容,系統(tǒng)性地覆蓋理論方法和實踐技術(shù)部分的各個知識點。本書的實踐內(nèi)容具有四個特點:一是接近實際,所采用的語言是C--語言,該語言接近現(xiàn)實中常用的C語言,這使得所設(shè)計與實現(xiàn)的編譯器更為實用,甚至在特定領(lǐng)域可以直接或經(jīng)過少量修改后使用;二是結(jié)合相關(guān)的實踐技術(shù)進行介紹,引導(dǎo)學(xué)生完成一個完整編譯器的設(shè)計與實現(xiàn),不會使學(xué)生出現(xiàn)面對編譯器實現(xiàn)要求無從下手或不得不求助于第三方額外資料的情況;三是具備相關(guān)的實現(xiàn)驗證幫助,我們提供了充分的測試樣例來幫助驗證編譯器實現(xiàn)的正確性,而無須自行設(shè)計測試用例;四是難度可調(diào),我們提供了實踐內(nèi)容的多種執(zhí)行方案,既可以統(tǒng)一難度要求,也可以區(qū)分必做內(nèi)容和選做內(nèi)容,還可以采用學(xué)生分組方案,使得每個組隊實現(xiàn)不同的功能組合,激發(fā)學(xué)生的思考創(chuàng)新能力,并鍛煉其合作能力。
下面我們就本書的使用方式、時間安排以及質(zhì)量控制給出一些建議。
使用方式
本書包含五個核心章(從第2章至第6章),前后貫穿,分別為詞法分析和語法分析、語義分析、中間代碼生成、目標(biāo)代碼生成以及中間代碼優(yōu)化。每章的理論和實踐內(nèi)容依賴于前續(xù)章,教學(xué)需按順序進行。
在這五章中,除了第5章之外,其他章節(jié)的實踐內(nèi)容均分為必做部分和選做部分,而選做部分則進一步分為幾種不同的要求(第5章僅有必做部分)。這五章中的實踐內(nèi)容特別考慮了不同院校的教學(xué)要求以及學(xué)生之間的能力差異,因而可以采用多種方式教學(xué):
1. 對所有學(xué)生要求相同:這是最簡單的使用方式,適用于學(xué)習(xí)編譯原理的所有學(xué)生都需要通過相同考核要求的情況。具體而言,可進一步劃分為下面三種情況:
(1)對所有學(xué)生要求最低:完成所有實踐的必做部分,即可獲得滿分。
(2)對所有學(xué)生要求最高:完成所有實踐的必做部分和選做部分,才可獲得滿分。
(3)對所有學(xué)生要求自選:完成所有實踐的必做部分,即可得滿分。但若能額外完成實踐的選做部分,則可視完成的情況獲得額外獎勵。
2. 對不同學(xué)生要求不同:這種使用方式適用于學(xué)習(xí)編譯原理的學(xué)生需要通過不同考核要求的情況。比如強化班和普通班的學(xué)生一起上編譯原理課程,則要求強化班學(xué)生完成所有實踐的必做部分和選做部分才可獲得滿分,而普通班學(xué)生完成所有實踐的必做部分即可得滿分,但若能額外完成實踐的選做部分,則可獲得額外獎勵。
3. 對不同組隊要求不同:這是最復(fù)雜的使用方式,適用于允許學(xué)生自由組隊以共同完成實踐要求的情況。推薦的組隊規(guī)模是一至三人,比如,若雙人組隊則為正常模式,可獲得實踐滿分,若三人組隊則為互助模式,需適當(dāng)減少實踐總分(如變?yōu)樵瓉頋M分的90%),若單人組隊則為高手模式,可適當(dāng)提高實踐總分(如變?yōu)樵瓉頋M分的110%)。在實踐要求方面,仍可考慮不同的考核要求而組合不同的必做和選做部分,或者完成指定或隨機選擇的實踐要求。比如,一位強化班學(xué)生需要完成所有實踐的必做部分和選做部分才可獲得滿分,他可以單人組隊進入高手模式以獲得更高的總分,也可以雙人組隊進入正常模式,以減少實踐難度。
時間安排
本書從第2章至第6章是核心教學(xué)內(nèi)容,一個學(xué)期完成教學(xué),預(yù)計時長17周,每周2~3課時。各章的內(nèi)容應(yīng)依順序進行教學(xué),每完成前一章中理論方法和實踐技術(shù)部分的教學(xué)即可開始后一章中對應(yīng)部分的教學(xué)。實踐內(nèi)容部分作為課程項目布置,可略晚開始,比如,第2章的實踐內(nèi)容可從第2周開始布置,以保證前期進行了必要的理論方法和實踐技術(shù)的講授和準(zhǔn)備,而后續(xù)章節(jié)的實踐內(nèi)容可與教學(xué)同步進行。一般而言,如果一個
許暢,南京大學(xué)計算機科學(xué)與技術(shù)系教授,“101 計劃”編譯課程建設(shè)專家。2008年在香港科技大學(xué)獲得博士學(xué)位,2010年入選新世紀(jì)優(yōu)秀人才支持計劃,2011年獲得國
家科技進步二等獎,2015年獲得CCF青年科學(xué)家獎,2021年入選長江學(xué)者獎勵計劃。主持和參與了多項國家和省部級科研項目,包括國家重點研發(fā)計劃和自然科學(xué)基金重點項目等。研究興趣包括大數(shù)據(jù)、軟件工程、智能軟件測試與分析,以及自適應(yīng)與自控軟件系統(tǒng)。發(fā)表了180余篇學(xué)術(shù)論文,工作被包括 TOSEM、TSE、ESEC/FSE、ICSE 和《中國科學(xué)》等在內(nèi)的國內(nèi)外知名期刊和會議收錄,曾獲 ACM SIGSOFT 杰出論文獎 4 次和國際會議最佳論文獎 3次。服務(wù)于 ESEC/FSE、ICSE 和 ASE 等程序委員會,擔(dān)任 JSEP、JCST、FCS 和《計算機科學(xué)》等期刊
編委。
馮洋,南京大學(xué)計算機科學(xué)與技術(shù)系助理研究員。2019年在加州大學(xué)歐文分校獲得博士學(xué)位。主要研究方向為復(fù)雜軟件系統(tǒng)的質(zhì)量保障及可信程序設(shè)計語言工程技術(shù),研究課題包括大型復(fù)雜軟件系統(tǒng)的質(zhì)量保障問題及可信軟件基礎(chǔ)設(shè)施構(gòu)建與工程技術(shù)問題。主持和參與了多項國家和省部級科研項目,包括國家重大專項計劃、自然科學(xué)基金面上項目和青年項目。近年來在軟件工程領(lǐng)域的
ICSE、FSE、ASE、ISSTA、TSE、TOSEM、《中國科學(xué)》《軟件學(xué)報》等期刊和會議發(fā)表學(xué)術(shù)論文 40余篇,獲得 ACM 杰出論文獎兩次。申請發(fā)明專利多項,部分專利成果已經(jīng)在華為、百度等知名公司轉(zhuǎn)化應(yīng)用。
鄭艷偉,山東大學(xué)計算機科學(xué)與技術(shù)學(xué)院副研究員。2019年在北京航空航天大學(xué)獲博士學(xué)位。主要研究方向包括計算機視覺、目標(biāo)驅(qū)動的視覺導(dǎo)航、編譯器構(gòu)造。主持了國家重點研發(fā)計劃與課題和自然科學(xué)基金重點項目與課題;主持多項橫向項目,曾參與華為昇騰芯片算子和眾智項目開發(fā),曾在 RPA 中設(shè)計了一種腳本語言并開發(fā)了解釋器。近年來在 ICDE、Com-Com、IoT-J、WASA、《中國科學(xué)》等期刊和會議發(fā)表學(xué)術(shù)論文 20余篇,申請發(fā)明專利 30 余項,擔(dān)任IoT-J、JMLC、SPL、CIT 等期刊審稿人。
陳鄞,哈爾濱工業(yè)大學(xué)計算學(xué)部軟件學(xué)院副教授。2008年在哈爾濱工業(yè)大學(xué)獲得計算機應(yīng)用專業(yè)博士學(xué)位。國家一流課程“編譯原理”負(fù)責(zé)人,首批高校計算機專業(yè)優(yōu)秀教師獎勵計劃獲獎?wù)。主要研究方向為軟件工程、自然語言處理、機器學(xué)習(xí)等。參與完成多項國家自然科學(xué)基金項目和國家重點研發(fā)計劃項目。2008年至今一直從事一線教學(xué)工作,主講“編譯原理”“信息檢索”“自
然語言處理”“中文信息處理”等本科和研究生課程。獲哈爾濱工業(yè)大學(xué)教學(xué)優(yōu)秀獎 1 次,主編教材 3 部。
譚添, 南京大學(xué)計算機科學(xué)與技術(shù)系準(zhǔn)聘助理授。2017年在新南威爾士大學(xué)獲得博士學(xué)位,2017~2019年在奧胡斯大學(xué)從事博士后研究工作。主要研究方向為程序分析與程序設(shè)計語言,研究成果發(fā)表在TOPLAS、TOSEM、TSE、PLDI、OOPSLA、FSE 等領(lǐng)域內(nèi)高水平期刊與會議上。
陳林,南京大學(xué)計算機科學(xué)與技術(shù)系副教授。2009年在東南大學(xué)獲得博士學(xué)位。主持和參與了多項國家和省部級科研項目,包括國家重點研發(fā)計劃和自然科學(xué)基金項目等,多次獲得省部級科技進步獎。研究興趣包括軟件分析測試、軟件生態(tài)系統(tǒng)質(zhì)量保障等,與合作者在TSE、TOSEM、ICSE、FSE、《中國科學(xué)》和《軟件學(xué)報》等國內(nèi)外期刊和會議上發(fā)表論文100余篇,部分成果在華為等知名公司轉(zhuǎn)化應(yīng)用。
目 錄
出版說明
前言
第1章 概述 1
1.1 內(nèi)容組織 1
1.2 編譯器的結(jié)構(gòu) 3
1.2.1 詞法分析 4
1.2.2 語法分析 5
1.2.3 語義分析 5
1.2.4 中間代碼生成 6
1.2.5 目標(biāo)代碼生成 7
1.2.6 中間代碼優(yōu)化 7
1.3 語言和工具簡介 8
1.3.1 源語言C--簡介 9
1.3.2 目標(biāo)語言MIPS簡介 9
1.3.3 MIPS模擬器簡介 11
1.3.4 實踐環(huán)境 12
第2章 詞法分析和語法分析 13
2.1 詞法分析和語法分析的理論方法 16
2.1.1 詞法分析概要 16
2.1.2 正則表達(dá)式 18
2.1.3 有限狀態(tài)自動機 21
2.1.4 從NFA到DFA的轉(zhuǎn)換 24
2.1.5 狀態(tài)最小化算法 25
2.1.6 語法分析概要 26
2.1.7 上下文無關(guān)文法 28
2.1.8 自頂向下的語法分析算法 30
2.1.9 自底向上的語法分析算法 33
2.2 詞法分析和語法分析的實踐技術(shù) 36
2.2.1 詞法分析實現(xiàn)思想概述 37
2.2.2 GNU Flex介紹 37
2.2.3 Flex:編寫源代碼 38
2.2.4 Flex:書寫正則表達(dá)式 41
2.2.5 Flex:高級特性 42
2.2.6 詞法分析實踐的額外提示 45
2.2.7 語法分析實現(xiàn)思想概述 46
2.2.8 GUN Bison介紹 46
2.2.9 Bison:編寫源代碼 48
2.2.10 Bison:屬性值的類型 51
2.2.11 Bison:詞法單元的位置 52
2.2.12 Bison:二義性與沖突處理 53
2.2.13 Bison:源代碼的調(diào)試 55
2.2.14 Bison:錯誤恢復(fù) 56
2.2.15 語法分析實踐的額外提示 57
2.3 詞法分析和語法分析的實踐內(nèi)容 58
2.3.1 實踐要求 58
2.3.2 輸入格式 58
2.3.3 輸出格式 59
2.3.4 驗證環(huán)境 59
2.3.5 提交要求 60
2.3.6 樣例(必做部分) 60
2.3.7 樣例(選做部分) 63
2.4 本章小結(jié) 67
習(xí)題 67
第3章 語義分析 69
3.1 語義分析的理論方法 72
3.1.1 屬性文法 72
3.1.2 基于屬性文法的處理方式 73
3.1.3 S屬性文法和L屬性文法 75
3.1.4 語法制導(dǎo)的定義 76
3.1.5 語法制導(dǎo)的翻譯方案 77
3.1.6 SDT中左遞歸的消除 78
3.1.7 類型檢查 80
3.2 語義分析的實踐技術(shù) 82
3.2.1 語義分析實現(xiàn)思想概述 82
3.2.2 符號表的設(shè)計與實現(xiàn) 83
3.2.3 支持多層作用域的符號表 85
3.2.4 類型表示 87
3.2.5 語義分析實踐的額外提示 89
3.3 語義分析的實踐內(nèi)容 89
3.3.1 實踐要求 89
3.3.2 輸入格式 91
3.3.3 輸出格式 91
3.3.4 驗證環(huán)境 92
3.3.5 提交要求 92
3.3.6 樣例(必做部分) 92
3.3.7 樣例(選做部分) 98
3.4 本章小結(jié) 101
習(xí)題 102
第4章 中間代碼生成 105
4.1 中間代碼生成的理論方法 108
4.1.1 運行時環(huán)境概要 108
4.1.2 存儲組織與棧幀設(shè)計方法 108
4.1.3 中間表示 110
4.1.4 類型與聲明 111
4.1.5 表達(dá)式的翻譯 113
4.1.6 控制流與回填 117
4.2 中間代碼生成的實踐技術(shù) 122
4.2.1 線形中間表示 122
4.2.2 圖形中間表示 123
4.2.3 運行時環(huán)境簡介 123
4.2.4 基本表達(dá)式的翻譯模式 124
4.2.5 語句的翻譯模式 125
4.2.6 函數(shù)調(diào)用的翻譯模式 126
4.2.7 數(shù)組和結(jié)構(gòu)體的翻譯模式 127
4.3 中間代碼生成的實踐內(nèi)容 127
4.3.1 實踐要求 127
4.3.2 輸入格式 130
4.3.3 輸出格式 130
4.3.4 驗證環(huán)境 130
4.3.5 提交要求 130
4.3.6 樣例(必做部分) 131
4.3.7 樣例(選做部分) 133
4.4 本章小結(jié) 135
習(xí)題 136
第5章 目標(biāo)代碼生成 139
5.1 目標(biāo)代碼生成的理論方法 142
5.1.1 代碼生成概述 142
5.1.2 指令集架構(gòu) 145
5.1.3 基本塊與流圖 147
5.1.4 指令選擇算法 150
5.1.5 寄存器分配算法 153
5.1.6 窺孔優(yōu)化 156
5.1.7 代碼生成器構(gòu)建 159
5.2 目標(biāo)代碼生成的實踐技術(shù) 162
5.2.1 QtSpim簡介 162
5.2.2 MIPS32匯編代碼簡介 165
5.2.3 指令選擇算法實現(xiàn) 167
5.2.4 樸素寄存器分配算法實現(xiàn) 169
5.2.5 局部寄存器分配算法實現(xiàn) 170
5.2.6 活躍變量分析算法實現(xiàn) 170
5.2.7 圖染色算法實現(xiàn) 171
5.2.8 MIPS寄存器的使用 174
5.2.9 MIPS棧管理 175
5.2.10 目標(biāo)代碼生成實踐的額外提示 179
5.3 目標(biāo)代碼生成的實踐內(nèi)容 180
5.3.1 實踐要求 180
5.3.2 輸入格式 181
5.3.3 輸出格式 181
5.3.4 驗證環(huán)境 181
5.3.5 提交要求 181
5.3.6 樣例(必做部分) 182
5.4 本章小結(jié) 185
習(xí)題 186
第6