《普通高等院校計算機專業(yè)(本科)實用教程系列:編譯原理實用教程(第2版)》共分7章,主要介紹編譯程序的基本原理和實現方法。內容包括:詞法分析,形式語言和自動機的基本概念,語法分析,符號表和靜態(tài)內存分配,語法制導翻譯和中間代碼產生,目標代碼生成!镀胀ǜ叩仍盒S嬎銠C專業(yè)(本科)實用教程系列:編譯原理實用教程(第2版)》還介紹了作者本人的一些工作成果,如LR分析法在詞法分析器自動構造中的應用,語法制導翻譯在匯編程序自動構造中的應用。為了方便讀者學習,各章都安排了一定數量的習題,并配有習題答案。
《普通高等院校計算機專業(yè)(本科)實用教程系列:編譯原理實用教程(第2版)》附錄B中的“課程實習指導”向讀者提供了一個較為完整的、切實可用的“編譯原理”課程實習方案,并附有參考程序,可供有關教師選用或參考。
《普通高等院校計算機專業(yè)(本科)實用教程系列:編譯原理實用教程(第2版)》可作為本科院校計算機專業(yè)“編譯原理”課程的教材,也可供有關教師、研究生以及從事計算機軟件設計和開發(fā)人員參考。
以編譯四個主要階段“詞法分析”,“語法分析”、“語義分析”和“目標代碼生成”為線索,介紹各個階段常用的軟件技術和實現方法。各章安排了一定數量的習題,并附有習題答案。在《普通高等院校計算機專業(yè)(本科)實用教程系列:編譯原理實用教程(第2版)》中出現的源程序,除附錄B中兩個程序外,都可以從清華大學出版社主指定網站下載。另外,由本人編寫的“編譯原理”課程電子教案和試卷集錦可以從“中國高等學校教學資源網”下載。介紹了兩項新的編譯技術和方法,它們是“LR分析法在詞法分析器自動構造中的應用”和“語法制導翻譯在匯編程序自動構造中的應用”。附錄A介紹了用軟件實現的虛擬計算機和匯編程序使用方法。讀者可使用《普通高等院校計算機專業(yè)(本科)實用教程系列:編譯原理實用教程(第2版)》第7章介紹的匯編語言編寫程序,然后進行詞法分析和LR分析法制導的語義翻譯,最終生成的目標代碼可以在虛擬計算機上運行。附錄B中的“課程實習指導”,向讀者提供了一個較為完整的,切實可用的“編譯原理”課程實習方案,并附有參考程序,可供有關教師選用或參考。
1982年2月本人畢業(yè)于上海交通大學,2010年1月退休,在上海第二工業(yè)大學工作了近三十年。在此期間,主要從事“編譯程序”和“算法”這兩門學科的教學和科研。2005年4月清華大學出版社出版了由本人編著的《編譯原理實用教程》,該書至今仍用于我校和國內其他普通高等院校“編譯原理”課程的教學。該書從脫稿至今已近十年,先后共印刷了1萬冊左右。雖然印刷的數量不大,但是90%是外校師生所使用的,說明書的質量得到了同行的認可。
在第2版中,書的章節(jié)基本沒有變化,僅刪除了原書中的5.10.3小節(jié)(5.10.3 LR分析控制程序的修改),增加了6.11節(jié)(6.11 自上而下分析制導翻譯概述)。做出上述調整,主要考慮用于詞法分析的LR分析控制程序修改不大,一是增加了token數組,用于記錄構成單詞的字符。在執(zhí)行移進操作時,除完成規(guī)定動作外,還應將當前字符移入token數組;二是把“出錯”理解為找到單詞尾。對于熟悉LR分析控制程序工作原理的讀者,在理解上不會有困難。在后繼章節(jié)中,對于用于詞法分析的LR分析控制程序有詳細介紹,沒有必要單獨列出。為了完整,在6.11節(jié)簡略討論了自上而下分析制導翻譯技術。原書中的附錄A和附錄B合并為新書的附錄A。原書的附錄C刪除,改為下載文件。原書的附錄D改為新書的附錄B.
在第2版中,各章節(jié)的知識點沒有變化,增加了算法偽代碼描述,對原書各章節(jié)中的所有源程序都做了比較大的修改。在原書中,算法除文字簡單描述外,基本用源程序表達,這樣對算法的描述和理解有可能受到語言細節(jié)的束縛。在本書中,增加了算法偽代碼描述,這樣可避免語言的限制,更容易表達算法的基本思想?紤]有些讀者編程經驗不足,源程序仍保留了下來,但在編排上做了改進,使其更容易閱讀和理解。在本書中出現的源程序,除附錄B中兩個程序外,都可以從清華大學出版社指定網站下載。另外,由本人編寫的“編譯原理”課程電子教案和試卷集錦可以從“中國高等學校教學資源網”下載。
在寫第1版時,主要考慮程序的正確性。在再版中,力求使程序寫得更簡潔、更易理解,并且注意前后統(tǒng)一。例如,本書介紹了三個詞法分析器,它們是Lex1、Lex2和 Lex3。三個詞法分析器都是由預處理程序和掃描器(單詞識別程序)兩個部分構成。預處理程序是同一個,差異在于如何實現掃描器。Lex1是利用狀態(tài)轉換圖來實現的,Lex2是利用確定有限自動機來實現的,而Lex3是利用LR分析法來實現的。掃描器的程序結構大同小異,讀者只需關注單詞識別時所使用的技術和方法。
借此機會,向清華大學出版社表示感謝。是清華大學出版社向本人提供了機會,使我能夠在退休之后,繼續(xù)為高等學校計算機教育盡自己微薄之力。繼2011年6月的“算法設計與分析”出版之后,這是本人主編的第2本教科書。
上海第二工業(yè)大學計算機與信息學院教師王娜參與了本書各章的編寫(包括習題答案),上海第二工業(yè)大學成人與繼續(xù)教育學院教師楊坤參與了各章源程序的編寫。
溫敬和
2012年秋
第1章 編譯系統(tǒng)概述
習題
第2章 詞法分析
2.1 詞法分析器的設計考慮及手工構造
2.1.1 單詞類型及二元式編碼
2.1.2 源程序的輸入及預處理
2.1.3 基本字的識別和超前搜索
2.1.4 狀態(tài)轉換圖和詞法分析器的手工構造
2.1.5 詞法分析器手工構造實例
2.2 正規(guī)式、自動機及詞法分析器的自動生成
2.2.1 基本概念
2.2.2 正規(guī)式與正規(guī)集
2.2.3 確定有限自動機
2.2.4 非確定有限自動機
2.2.5 NFA的確定化
2.2.6 正規(guī)式的NFA表示
2.2.7 正規(guī)式與確定有限自動機的等價性
2.3 詞法分析器的自動生成
2.3.1 自動生成過程概述
2.3.2 掃描器控制程序工作原理
2.3.3 掃描器控制程序的實現
習題
習題答案
第3章 程序設計語言的語法描述
3.1 文法的引入
3.1.1 語法樹
3.1.2 語法規(guī)則和句子推導
3.1.3 遞歸規(guī)則和遞歸文法
3.2 上下文無關文法
3.2.1 文法和語言
3.2.2 文法的二義性
3.3 文法舉例
習題
習題答案
第4章 自上而下的語法分析
4.1 帶回溯的自上而下分析法概述
4.2 直接左遞歸的消除
4.3 不帶回溯的自上而下分析法的基本原理
4.4 提取左因子
4.5 first集和follow集
4.5.1 first集的定義及構造算法
4.5.2 follow集的定義及構造算法
4.6 遞歸下降分析法
4.7 預測分析法
4.7.1 預測分析表的構造
4.7.2 預測分析控制程序
4.7.3 預測分析程序討論
4.7.4 應用舉例
習題
習題答案
第5章 自下而上的語法分析
5.1 自下而上的語法分析概述
5.2 LR分析法的基本原理
5.3 LR(O)項目集規(guī)范族的構造
5.4 有效項目
5.5 LR(O)分析表的構造
5.6 SLR(1)分析表的構造
5.7 LR語法分析器的控制程序
5.8 二義文法在LR分析法中的應用
5.9 應用舉例
5.10 LR分析法在詞法分析器自動構造中的應用
5.10.1 模型語言的詞法描述及SLR分析表
5.10.2 使用SLR分析表識別單詞的基本原理
5.10.3 算法描述和程序實現
5.10.4 LR-LEX中的分析表最小化
習題
習題答案
第6章 語法制導翻譯和中間代碼生成
6.1 語法制導翻譯概述
6.2 符號表和常數表
6.3 中間代碼
6.3.1 三元式
6.3.2 四元式
6.4 說明語句(簡單變量)的翻譯
6.5 整型算術表達式及賦值語句的翻譯
6.6 混合型算術表達式及賦值語句的翻譯
6.7 布爾表達式的翻譯
6.8 標號和無條件轉移語句的翻譯
6.9 控制語句的翻譯
6.9.1 if-then語句的翻譯
6.9.2 if-then-else語句的翻譯
6.9.3 while-do語句的翻譯
6.9.4 復合語句的翻譯
6.10 小結
6.11 自上而下分析制導翻譯概述
習題
習題答案
第7章 目標代碼生成
7.1 目標計算機的虛擬實現
7.2 語法制導翻譯在匯編程序自動構造中的應用
7.2.1 匯編語言文法和分析表構造
7.2.2 單詞編碼表和詞法分析
7.2.3 匯編語言語義和語法制導翻譯
7.3 從四元式到匯編語言的翻譯
習題
習題答案
附錄A 虛擬機匯編程序使用說明
附錄B 課程實習指導
參考文獻