中图网(原中国图书网):网上书店,尾货特色书店,30万种特价书低至2折!

歡迎光臨中圖網 請 | 注冊

包郵 編譯原理

作者:王磊
出版社:科學出版社出版時間:2021-08-01
開本: B5 頁數: 292
中 圖 價:¥58.3(8.4折) 定價  ¥69.0 登錄后可看到會員價
加入購物車 收藏
開年大促, 全場包郵
?新疆、西藏除外
本類五星書更多>

編譯原理 版權信息

  • ISBN:9787030246950
  • 條形碼:9787030246950 ; 978-7-03-024695-0
  • 裝幀:一般膠版紙
  • 冊數:暫無
  • 重量:暫無
  • 所屬分類:>

編譯原理 內容簡介

本書系統地介紹了編譯程序的設計原理及實現技術。在內容組織上,本書將編譯的基本理論與具體實現技術有機地結合起來,既注重理論的完整性,化繁為簡,又將理論融于具體案例中,化難為易。除各章節對理論闡述的條理性外,本書給出的例子也具有實用性與連貫性,使讀者對編譯各階段有一個全面、直觀的認識。

編譯原理 目錄

目錄
前言
第1章 緒論 1
1.1 程序設計語言和編譯程序 1
1.2 編譯程序的歷史及發展 3
1.3 編譯過程和編譯程序結構 4
1.4 編譯程序的開發 6
1.5 構造編譯程序所應具備的知識內容 8
習題一 9
第2章 詞法分析 10
2.1 詞法分析器的設計方法 10
2.1.1 單詞符號的分類與輸出形式 10
2.1.2 狀態轉換圖 12
2.2 一個簡單的詞法分析器示例 13
2.2.1 C語言子集的單詞符號表示 13
2.2.2 C語言子集對應的狀態轉換圖 14
2.2.3 狀態轉換圖的實現 15
2.3 正規表達式與有限自動機簡介 18
2.3.1 正規表達式與正規集 18
2.3.2 有限自動機 20
2.4 正規表達式到有限自動機的構造 23
2.4.1 由正規表達式構造等價的非確定有限自動機(NFA) 23
2.4.2 NFA的確定化 23
2.4.3 確定有限自動機(DFA)的化簡 26
2.4.4 正規表達式到有限自動機構造示例 28
2.5 詞法分析器的自動生成 33
習題二 35
第3章 語法分析 37
3.1 文法和語言 37
3.1.1 文法和語言的基本概念 37
3.1.2 形式語言分類 40
3.1.3 正規表達式與上下文無關文法 43
3.2 推導與語法樹 44
3.2.1 推導與短語 44
3.2.2 語法樹與二義性 45
3.3 自頂向下的語法分析 50
3.3.1 遞歸下降分析法 50
3.3.2 LL(1)分析法 58
3.4 自底向上的語法分析 65
3.4.1 自底向上分析原理 65
3.4.2 算符優先分析法 68
3.5 規范歸約的自底向上語法分析方法 78
3.5.1 LR分析器的工作原理 78
3.5.2 LR(0)分析器 82
3.5.3 SLR(1)分析器 88
?3.5.4 LR(1)分析器 92
?3.5.5 LALR分析器 97
3.5.6 二義文法的應用 99
?3.5.7 LR分析器應用與拓展 104
習題三 106
第4章 語義分析和中間代碼生成 112
4.1 概述 112
4.1.1 語義分析的概念 112
4.1.2 語法制導翻譯方法 112
4.2 屬性文法 114
4.2.1 文法的屬性 114
4.2.2 屬性文法 115
4.3 幾種常見的中間語言 116
4.3.1 抽象語法樹 116
4.3.2 逆波蘭表示法 117
4.3.3 三地址代碼 120
4.4 表達式及賦值語句的翻譯 123
4.4.1 簡單算術表達式和賦值語句的翻譯 123
4.4.2 布爾表達式的翻譯 125
4.5 控制語句的翻譯 130
4.5.1 條件語句if的翻譯 131
4.5.2 條件循環語句while的翻譯 133
4.5.3 三種基本控制結構的翻譯 134
4.5.4 多分支控制語句case的翻譯 140
4.5.5 語句標號和轉移語句的翻譯 142
4.6 數組元素的翻譯 143
4.6.1 數組元素的地址計算及中間代碼形式 143
4.6.2 賦值語句中數組元素的翻譯 144
4.6.3 數組元素翻譯示例 146
4.7 過程或函數調用語句的翻譯 149
4.7.1 過程或函數調用的方法 149
4.7.2 過程或函數調用語句的四元式生成 150
4.8 說明語句的翻譯 151
4.8.1 變量說明的翻譯 151
4.8.2 數組說明的翻譯 151
4.9 遞歸下降語法制導翻譯方法簡介 152
習題四 154
第5章 代碼優化 157
5.1 局部優化 157
5.1.1 基本塊的劃分方法 157
5.1.2 基本塊的DAG方法 158
5.1.3 用DAG進行基本塊的優化處理 162
5.1.4 DAG構造算法的進一步討論 164
5.2 循環優化 165
5.2.1 程序流圖與循環 165
5.2.2 循環的查找 167
5.2.3 循環優化 172
?5.3 全局優化概述 181
5.3.1 到達G定值與引用G定值鏈 181
5.3.2 定值G引用鏈(du鏈) 185
5.3.3 復寫傳播 188
?5.4 代碼優化示例 192
習題五 199
第6章 目標程序運行時存儲空間的組織 203
6.1 靜態存儲分配 203
6.2 簡單的棧式存儲分配 204
6.2.1 棧式存儲分配與活動記錄 206
6.2.2 過程的執行 207
6.3 嵌套過程語言的棧式實現 210
6.3.1 嵌套層次顯示(DISPLAY)表和活動記錄 210
6.3.2 嵌套過程的執行 211
6.3.3 訪問非局部名的另一種實現方法 212
6.4 堆式動態存儲分配 216
6.4.1 堆式存儲的概念 216
6.4.2 堆式存儲的管理方法 217
?6.5 參數傳遞補遺 219
6.5.1 參數傳遞的方法 220
6.5.2 不同參數傳遞方法比較 221
習題六 222
第7章 目標代碼生成 225
7.1 簡單代碼生成器 225
7.1.1 待用信息與活躍信息 226
7.1.2 代碼生成算法 228
7.1.3 寄存器分配 230
7.1.4 源程序到目標代碼生成示例 232
?7.2 匯編指令到機器代碼翻譯概述 235
習題七 241
第8章 符號表與錯誤處理 243
8.1 符號表 243
8.1.1 符號表的作用 243
8.1.2 符號表的組織 244
8.1.3 分程序結構語言符號表建立 245
8.1.4 非分程序結構語言符號表建立 249
8.1.5 常用符號表結構 249
8.1.6 符號表內容 251
8.2 錯誤處理 252
8.2.1 語法錯誤校正 252
8.2.2 語義錯誤校正 259
習題八 261
?第9章 并行編譯技術簡介 263
9.1 并行計算機體系結構 263
9.1.1 向量計算機 263
9.1.2 共享存儲器多處理機 264
9.1.3 分布式存儲器大規模并行計算機 264
9.2 并行編譯技術 265
9.2.1 并行編譯技術的概念 265
9.2.2 并行編譯系統的功能和結構 266
9.3 自動并行編譯 268
9.3.1 依賴關系分析 268
9.3.2 程序轉換及數據分布 270
9.3.3 調度 271
參考文獻 273
附錄1 8086/8088指令碼匯總表 274
附錄2 8086/8088指令編碼空間表 279
展開全部

編譯原理 節選

第1章 緒論 計算機的誕生是科學發展史上的一個里程碑。經過半個多世紀的發展,計算機已經改變了人類生活、工作的各個方面,成為人類不可缺少的工具。計算機之所以能夠如此廣泛地被應用,應當歸功于高級程序設計語言。計算機語言之所以能由*初單一的機器語言發展到現今數千種高級語言,就是因為有了編譯程序。沒有高級語言,計算機的推廣應用是難以實現的;而沒有編譯程序,高級語言就無法使用。編譯理論與技術也是計算機科學中發展得*迅速、*成熟的一個分支,它集中體現了計算機發展的成果與精華。 1.1 程序設計語言和編譯程序 為了處理和解決實際問題,每一種計算機都具有其特定的功能,而這些功能是通過計算機執行一系列相應的操作來實現的。計算機所能執行的每一種操作稱為一條指令,計算機能夠執行的全部指令集合就是該計算機的指令系統。由于計算機硬件的器件特性,決定了計算機本身只能直接接受由O和1編碼的二進制指令和數據,這種二進制形式的指令集和稱為該計算機的機器語言,它是計算機唯一能夠直接識別并接受的語言。 用機器語言編寫程序很不方便且容易出錯,編寫出來的程序也難以調試、閱讀和交流。為此,出現了用助記符代替機器語言二進制編碼的男一種語言,這就是匯編語言。匯編語言是建立在機器語言之上的,因為它是機器語言的符號化形式,所以較機器語言直觀;但是計算機并不能直接識別這種符號化語言,用匯編語言編寫的程序必須翻譯成機器語言之后才能執行,這種“翻譯”是通過專門的軟件——匯編程序實現的。 盡管匯編語言與機器語言相比在閱讀和理解上有了長足的進步,但其依賴具體機器的特性是無法改變的,這給程序設計增加了難度。隨著計算機應用需求的不斷增長,出現了更加接近人類自然語言的功能更強、抽象級別更高的面向各種應用的高級語言。高級語言已經從具體機器中抽象出來,擺脫了依賴具體機器的問題。用高級語言編制的程序幾乎能夠在不改動的情況下在不同種類的計算機上運行且不易出錯,這是匯編語言難以做到的,但高級語言程序翻譯(編譯)成*終能夠直接執行的機器語言程序的難度卻大大增加了。 由于匯編語言和機器語言一樣都是面向機器的,故相對于面向用戶的高級語言來說,它們都稱之為低級語言,而FORTRAN、PASCAL、C、ADA、Java這類面向應用的語言則稱之為高級語言。因此,編譯程序就是指這樣一種程序,通過它能夠將用高級語言編寫的源程序轉換成與之在邏輯上等價的低級語言形式的目標程序,見圖1-1。 圖1-1 編譯程序的功能 一個高級語言程序的執行通常分為兩個階段,即編譯階段和運行階段,如圖1-2所示。編譯階段將源程序變換成目標程序;運行階段則由所生成的目標程序連同運行系統(數據空間分配子程序、標準函數程序等)接受程序的初始數據作為輸入,運行后輸出計算結果。 圖1-2 源程序的編譯和運行階段 如果編譯生成的目標程序是匯編語言形式的,那么在編譯與運行階段之間還要添加一個匯編階段,它將編譯生成的匯編語言目標程序再經過匯編程序變換成機器語言目標程序,如圖1-3所示。 圖1-3 源程序的編譯、匯編和運行階段 用高級語言編寫的程序也可通過解釋程序來執行。解釋程序也是一種翻譯程序,它將源程序作為輸入,一條語句一條語句地讀入并解釋執行,如圖1-4所示。 1.2 編譯程序的歷史及發展 解釋程序與編譯程序的主要區別是:編譯程序將源程序翻譯成目標程序后再執行該目標程序;而解釋程序則逐條讀出源程序中的語句并解釋執行,即在解釋程序的執行過程中并不產生目標程序。典型的解釋型高級語言是BASIC語言。 圖1-4 解釋程序解釋執行過程示意 1.2 編譯程序的歷史及發展 20世紀40年代,由于馮 諾伊曼在存儲一程序計算機方面的開創性工作,計算機可以執行編寫的一串代碼或程序,這些程序*初都是用機器語言(MachineLanguage)編寫的。機器語言就是計算機能夠執行的全部指令集合的二進制形式,例如:表示在IBM PC上使用的Intel 8x86處理器將數字2移至地址0000(1 6進制)的指令。用機器語言編寫程序很不方便且容易出錯,因此這種代碼形式很快就被匯編語言(Assembly Language)取代。在匯編語言中,指令和存儲地址都以符號形式給出。例如,匯編語言指令就與前面的機器指令等價(假設符號存儲地址X是0000)。匯編程序(Assembler)特匯編語言的符號代碼和存儲地址翻譯成與機器語言相對應的二進制代碼。匯編語言大大提高了編程的速度和準確性,至今人們仍在使用它,在存儲容量小和要求速度快時尤其如此。但是,匯編語言依賴于具體機器的特性是無法改變的,這給編程和調試增加了難度。很明顯,編程技術發展的下一個重要步驟就是用更簡潔的數學定義或白然語言來描述和編寫程序,它應與任何機器無關,而且也可通過一個翻譯程序將其翻譯為可在計算機上直接執行的二進制代碼。例如,前面的匯編語言代碼MOV X,2可以寫成一個簡潔的與機器無關的形式X=2。 1954-1957年,IBM John Backus帶領的一個研究小組對FORTRAN語言及其編譯器進行了開發。但是,由于對編譯程序的理論及技術的研究剛剛開始,這個語言的開發付出了巨大的辛勞。與此同時,波蘭語言學家Noam Chomsky開始了他的自然語言結構研究。Noam Chomsky根據文法(Grammar,產生語言的規則)的難易程度及識別它們所需的算法對語言進行了分類,定義了O型、1型、2型和3型這四類文法及其相應的形式語言,并分別與相應的識別系統相聯系。2型文法(上下文無關文法,Context-Free Grammar)被證明是程序設計語言中*有用的文法,它代表著目前程序設計語言結構的標準。Noam Chomsky的研究結果*終使得編譯器結構異常簡單,甚至還具有白動化功能。有限白動機(Finite Automata)和正規表達式(Regular Expression)與上下文無關文法緊密相關,它們與Noam Chomsky的3型文法相對應,并引出了表示程序設計語言的單詞符號形式。接著又產生了生成有效目標代碼的方法——這就是*初的編譯器,它們被沿用至今。隨著對語法分析研究的深入,重點轉到編譯程序的自動生成研究。開發的這種程序*初被稱為編譯程序的編譯器,但因為它們僅僅能夠白動完成編譯器的部分工作,所以更確切地應稱之為分析程序生成器(Parser Generator)。這些程序中*著名的是Steve Johnson于1975年為UNIX系統編寫的語法分析器自動生成工具YACC(Yet Another Compiler-Compiler)。類似地,有限自動機的研究也產生出另一種詞法分析器白動生成工具(Scanner Generator) Lex。 20世紀70年代后期和80年代初,大量的研究都關注于編譯器其他部分的白動生成,其中包括代碼生成。這些努力并未取得多少成功,是由于這部分工作過于復雜,研究者對其本質不甚了解,在此不再贅述。 現今編譯器的發展包括了更為復雜的算法應用程序,它用于簡化或推斷程序中的信息,這又與具有此類功能的更為復雜的程序設計語言發展結合在一起。其中典型的有用于函數語言編譯Hindley-Milner類型檢查的統一算法。目前,編譯器已經越來越成為基于窗口的交互開發環境(Interactive Development Environ ment,IDE)的一部分,這個開發環境包括了編輯器、鏈接程序、調試程序以及項目管理程序。盡管近年來對IDE進行了大量的研究,但是基本的編譯器設計在近20年中都沒有多大的改變。 現代編譯技術已轉向并行編譯的研究,由于本書重點是介紹經典的編譯理論和技術,因此,對并行編譯的發展僅做綜述介紹。 1.3 編譯過程和編譯程序結構 編譯程序的工作過程是指從輸入源程序開始到輸出目標程序為止的整個過程。此過程是非常復雜的。一般來說,整個編譯過程可以劃分成五個階殷:詞法分析階段、語法分析階段、語義分析和中間代碼生成階段、優化階段和目標代碼生成階段。 1.詞法分析 詞法分析的任務是輸入源程序,對構成源程序的字符串進行掃描和分解,識別出一個個單詞符號,如基本字(if、for、begin等)、標識符、常數、運算符和界符(如“(”、“)”、“一”、“;”)等,將所識別出的單詞用統一長度的標準形式(也稱內部碼)來表示,以便于后繼語法工作的進行。因此,詞法分析工作是將源程序中的字符串變換成單詞符號流的過程,詞法分析所遵循的是語言的構詞規則。 2.語法分析 語法分析的任務是在詞法分析的基礎上,根據語言的語法規則(文法規則)把單詞符號流分解成各類語法單位(語法范疇),如“短語”、“子句”、“句子(語句)”、“程序段”和“程序”。通過語法分析可以確定整個輸入串是否構成一個語法上正確的“程序”。語法分析所遵循的是語言的語法規則,語法規則通常用上下文無關文法描述。 3.語義分析和中間代碼生成 這一階段的任務是對各類不同語法范疇按語言的語義進行初步翻譯,包含兩個方面的工作:一是對每種語法范疇進行靜態語義檢查,如變量是否定義、類型是否正確等;二是在語義檢查正確的情況下進行中間代碼的翻譯。注意,中間代碼是介于高級語言的語句和低級語言的指令之間的一種獨立于具體硬件的記號系統,它既有一定程度的抽象,又與低級語言的指令十分接近,因此轉換為目標代碼比較容易。把語法范疇翻譯成中間代碼所遵循的是語言的語義規則,常見酌中間代碼有四元式、三元式、間接三元式和逆波蘭記號等。 4.優化 優化的任務是對前階段產生的中間代碼進行等價變換或改造,以期獲得更為高效(節省時間和空間)的目標代碼。常用的優化措施有刪除冗余運算、刪除無用賦值、合并已知量、循環優化等。例如,其值并不隨循環而發生變化的運算可提到進入循環前計算一次,而不必在循環中每次循環都進行計算。優化所遵循的原則是程序的等價變換規則。 5.目標代碼生成 這一階段的任務是把中間代碼(或經優化處理之后)變換成特定機器上的機器語言程序或匯編語言程序,實現*終的翻譯工作。*后階段的工作因為目標語言的關系而十分依賴硬件系統,即如何充分利用機器現有的寄存器,合理地選擇指令,生成盡可能短且有效的目標代碼,這些都與目標機器的硬件結構有關。 上述編譯過程的五個階段是編譯程序工作時的動態特征,編譯程序的結構可以按照這五個階段的任務分模塊進行設計。編譯程序的結構示意如圖1-5所示。 編譯過程中源程序的各種信息被保留在不同的表格里,編譯各階段的工作都涉及構造、查找或更新有關的表格,編譯過程的絕大部分時間都用在造表、查表和更新表格的事務上,因此,編譯程序中還應包括一個表格管理程序。 出錯處理與編諢的各個階段都有聯系,與前三個階段的聯系尤為密切。出錯處理程序應在發現錯誤后,將錯誤的有關信息如錯誤類型、出錯地點等向用戶報源程序告。此外,為了盡可能多地發現錯誤,應在發現錯誤后還能繼續編譯下去,以便發現更多的錯誤。 一個編譯過程可分為一遍、兩遍或多遍完成,每一遍完成所規定的任務。例如,**遍只完成詞法分析的任務,第二遍完成語法分析和語義加工工作并生成中間代碼,第三遍再實現代碼優化和目標代碼生成。當然,也可一遍即完成整個編譯工作。至于一個編譯程序究竟應分為幾遍,如何劃分,這和源程序語言的結構與目標機器的特征有關。分多遍完成編譯過程可以使整個編譯程序的邏輯結構更清晰一點,但遍數多勢必增加讀寫中間文件的次數,從而消耗過多的時間。 1.4 編譯程序的開發 由于計算機語言功能的完善、硬件結構的發展、環境界面的友好等都對編譯程序提出了更多、更高的要求,因而構造一個編譯系統并非易事。雖然編譯理論和編譯技術的不斷發展已使編譯程序的生產周期不斷縮短,但是

商品評論(0條)
暫無評論……
書友推薦
本類暢銷
編輯推薦
返回頂部
中圖網
在線客服
主站蜘蛛池模板: 多物理场仿真软件_电磁仿真软件_EDA多物理场仿真软件 - 裕兴木兰 | 垃圾压缩设备_垃圾处理设备_智能移动式垃圾压缩设备--山东明莱环保设备有限公司 | 免费分销系统 — 分销商城系统_分销小程序开发 -【微商来】 | 环氧树脂地坪_防静电地坪漆_环氧地坪漆涂料厂家-地壹涂料地坪漆 环球电气之家-中国专业电气电子产品行业服务网站! | 杭州公司变更法人-代理记账收费价格-公司注销代办_杭州福道财务管理咨询有限公司 | 上海办公室设计_办公楼,写字楼装修_办公室装修公司-匠御设计 | 浙江皓格药业有限公司| 桁架机器人_桁架机械手_上下料机械手_数控车床机械手-苏州清智科技装备制造有限公司 | 山东活动策划|济南活动公司|济南公关活动策划-济南锐嘉广告有限公司 | 室内室外厚型|超薄型|非膨胀型钢结构防火涂料_隧道专用防火涂料厂家|电话|价格|批发|施工 | 武汉高低温试验箱_恒温恒湿试验箱厂家-武汉蓝锐环境科技有限公司 | 两头忙,井下装载机,伸缩臂装载机,30装载机/铲车,50装载机/铲车厂家_价格-莱州巨浪机械有限公司 | 斗式提升机,斗式提升机厂家-淄博宏建机械有限公司 | TPE_TPE热塑性弹性体_TPE原料价格_TPE材料厂家-惠州市中塑王塑胶制品公司- 中塑王塑胶制品有限公司 | 窖井盖锯圆机_锯圆机金刚石锯片-无锡茂达金刚石有限公司 | 沈阳缠绕包装机厂家直销-沈阳海鹞托盘缠绕包装机价格 | 外贮压-柜式-悬挂式-七氟丙烷-灭火器-灭火系统-药剂-价格-厂家-IG541-混合气体-贮压-非贮压-超细干粉-自动-灭火装置-气体灭火设备-探火管灭火厂家-东莞汇建消防科技有限公司 | 房在线-免费房产管理系统软件-二手房中介房屋房源管理系统软件 | 便携式表面粗糙度仪-彩屏硬度计-分体式粗糙度仪-北京凯达科仪科技有限公司 | 番茄畅听邀请码怎么输入 - Dianw8.com | 可程式恒温恒湿试验箱|恒温恒湿箱|恒温恒湿试验箱|恒温恒湿老化试验箱|高低温试验箱价格报价-广东德瑞检测设备有限公司 | 挨踢网-大家的导航!| 意大利Frascold/富士豪压缩机_富士豪半封闭压缩机_富士豪活塞压缩机_富士豪螺杆压缩机 | 液氨泵,液化气泵-淄博「亚泰」燃气设备制造有限公司 | 工业淬火油烟净化器,北京油烟净化器厂家,热处理油烟净化器-北京众鑫百科 | 进口试验机价格-进口生物材料试验机-西安卡夫曼测控技术有限公司 | MVE振动电机_MVE震动电机_MVE卧式振打电机-河南新乡德诚生产厂家 | 粤丰硕水性环氧地坪漆-防静电自流平厂家-环保地坪涂料代理 | 电销卡_稳定企业大语音卡-归属地可选-世纪通信 | 招商帮-一站式网络营销服务|搜索营销推广|信息流推广|短视视频营销推广|互联网整合营销|网络推广代运营|招商帮企业招商好帮手 | 大型工业风扇_工业大风扇_大吊扇_厂房车间降温-合昌大风扇 | 玻璃钢板-玻璃钢防腐瓦-玻璃钢材料-广东壹诺 | 武汉天安盾电子设备有限公司 - 安盾安检,武汉安检门,武汉安检机,武汉金属探测器,武汉测温安检门,武汉X光行李安检机,武汉防爆罐,武汉车底安全检查,武汉液体探测仪,武汉安检防爆设备 | 培训无忧网-教育培训咨询招生第三方平台 | 电解抛光加工_不锈钢电解抛光_常州安谱金属制品有限公司 | 北京征地律师,征地拆迁律师,专业拆迁律师,北京拆迁律师,征地纠纷律师,征地诉讼律师,征地拆迁补偿,拆迁律师 - 北京凯诺律师事务所 | 周口市风机厂,周鼓风机,河南省周口市风机厂| 碳纤维布-植筋胶-灌缝胶-固特嘉加固材料公司 | 自恢复保险丝_贴片保险丝_力特保险丝_Littelfuse_可恢复保险丝供应商-秦晋电子 | 自动化生产线-自动化装配线-直流电机自动化生产线-东莞市慧百自动化有限公司 | 软文推广发布平台_新闻稿件自助发布_媒体邀约-澜媒宝 |