注冊 | 登錄讀書好,好讀書,讀好書!
讀書網-DuShu.com
當前位置: 首頁出版圖書科學技術計算機/網絡軟件與程序設計匯編語言/編譯原理高級編譯器設計與實現

高級編譯器設計與實現

高級編譯器設計與實現

定 價:¥75.00

作 者: (美)Steven S.Muchnick著;趙克佳,沈志宇譯;趙克佳譯
出版社: 機械工業(yè)出版社
叢編項: 計算機科學叢書
標 簽: 編譯原理

ISBN: 9787111164296 出版時間: 2005-07-01 包裝: 膠版紙
開本: 26cm 頁數: 624 字數:  

內容簡介

  本書迎接現代語言和體系結構的挑戰(zhàn),幫助讀者作好準備,去應對將來要遇到的編譯器設計的問題。本書涵蓋現代微處理器編譯器的設計和實現方面的所有高級主題。本書從編譯設計基礎領域中的高級問題開始,廣泛而深入地闡述各種重要的代碼優(yōu)化技術,分析各種優(yōu)化之間的相對重要關系,以及實現這些優(yōu)化的最有效方法。本書特點●為理解高級編譯器設計的主要問題奠定了基礎●深入闡述優(yōu)化問題●用Sun的SPARC、IBM的POWER和PowerPC、DEC的Alpha以及Intel的Pentium和相關商業(yè)編譯器作為案例,說明編譯器結構、中間代碼設計和各種優(yōu)化方法●給出大量定義清晰的關于代碼生成、優(yōu)化和其他問題的算法●介紹由作者設計的以清晰、簡潔的方式描述算法的語言ICAN(非形式編譯算法表示)。本書前言本書討論單機編譯器設計和實現技術領域的前沿問題,重點討論編譯優(yōu)化技術(超過了本書60%的篇幅)。我們考慮了支持指令級并行的機器,但幾乎完全忽略了大規(guī)模并行處理和向量處理的有關問題。本書首先討論編譯器的結構、符號表管理(包括那些允許導入和導出作用域的語言)、中間代碼結構、運行時支持問題(包括可以在運行時鏈接的共享對象),以及根據機器描述自動產生代碼生成器等。之后,探討過程內的(通常稱為“全局的”)控制流分析、數據流分析、依賴關系分析和別名分析的各種方法,并介紹一系列的全局優(yōu)化,包括那些作用于程序不同成分(從單個表達式到整個過程)的優(yōu)化。接下來本書講述過程間的控制流分析、數據流分析和別名分析,以及過程間優(yōu)化和如何應用過程間信息來改善全局優(yōu)化。然后,討論有效利用層次存儲系統(tǒng)的優(yōu)化技術。最后,詳細介紹4個分別來自DEC、IBM、Intel和Sun微系統(tǒng)公司的商業(yè)化編譯系統(tǒng),以提供編譯器結構、中間代碼設計、優(yōu)化策略和效果的專門例子。如我們將看到的,這些編譯系統(tǒng)采用的技術具有廣泛的代表性,并用不同的方法獲得了類似的效果。

作者簡介

  StevenS.Muchnick,曾是計算機科學教授,后作為惠普的PA-RISC和SUN的SPARC兩種計算機體系結構的核心開發(fā)成員,將自己的知識和經驗應用于編譯器設計,并擔任這些系統(tǒng)的高級編譯器設計與實現小組的領導人。他在研究和開發(fā)方面的雙重經驗,對于指導讀者作出編譯器設計決策極具價值。相關圖書數據倉庫(原書第3版)離散數學導學數據庫設計教程(第2版)軟件需求組合數學(原書第4版)JAVA編程思想(第2版)數據庫系統(tǒng)導論UNIX系統(tǒng)編程信息系統(tǒng)原理:原書第6版現代操作系統(tǒng)(第2版)計算機網絡:自頂向下方法與Internet特色(原書第3版)C程序設計語言(第2版·新版)習題解答計算機網絡與因特網(原書第4版)計算機科學概論(原書第2版)人工智能:英文可擴展并行計算技術、結構與編程數據庫原理、編程與性能Java面向對象程序設計教程嵌入式微控制器C++編程思想。第2卷:實用編程技術微機接口技術實驗教程神經網絡原理(原書第2版)編譯原理C++語言的設計和演化并行計算導論(原書第2版)信息論、編碼與密碼學3D游戲卷1實時渲染與軟件技術3D游戲卷2動畫與高級實時渲染技術數字圖像處理疑難解析現代信息檢索CAXA數控銑CAD/CAM技術C語言的科學和藝術計算機視覺并行程序設計數據庫與事務處理操作系統(tǒng)計算機網絡系統(tǒng)方案(原書第3版)3D計算機圖形學(原書第3版)模式分析的核方法

圖書目錄

第1章  高級主題介紹        1
1.1  編譯器結構回顧        1
1.2  基本問題中的高級論題        2
1.3  代碼優(yōu)化的重要性        4
1.4  優(yōu)化編譯器的結構        5
1.5  激進型優(yōu)化編譯器中各種優(yōu)化的位置        7
1.6  本書各章的閱讀流程        10
1.7  本書沒有涉及的相關主題        10
1.8  例子中所用的目標機        11
1.9  數的表示與數據的大小        11
1.10  小結        11
1.11  進一步閱讀        12
1.12  練習        12
第2章  非形式化編譯算法表示        13
2.1  擴展的巴科斯-諾爾范式語法表示        13
2.2  ICAN簡介        14
2.3  ICAN概貌        16
2.4  完整的程序        17
2.5  類型定義        18
2.6  聲明        18
2.7  數據類型和表達式        19
2.7.1  一般簡單類型        20
2.7.2  枚舉類型        20
2.7.3  數組        21
2.7.4  集合        21
2.7.5  序列        22
2.7.6  元組        23
2.7.7  記錄        23
2.7.8  聯合        24
2.7.9  函數        24
2.7.10  編譯專用的類型        24
2.7.11  值nil        25
2.7.12  size運算符        25
2.8  語句        25
2.8.1  賦值語句        26
2.8.2  過程調用語句        27
2.8.3  返回語句        27
2.8.4  goto語句        27
2.8.5  if語句        27
2.8.6  case語句        27
2.8.7  while語句        28
2.8.8  for語句        28
2.8.9  repeat語句        28
2.8.10  ICAN的關鍵字        28
2.9  小結        29
2.10  進一步閱讀        29
2.11  練習        29
第3章  符號表結構        31
3.1  存儲類、可見性和生命期        31
3.2  符號屬性和符號表項        32
3.3  局部符號表管理        34
3.4  全局符號表結構        35
3.5  存儲綁定和符號寄存器        38
3.6  生成取數和存數指令的方法        42
3.7  小結        46
3.8  進一步閱讀        46
3.9  練習        47
第4章  中間表示        49
4.1  與中間語言設計有關的問題        49
4.2  高級中間語言        50
4.3  中級中間語言        51
4.4  低級中間語言        52
4.5  多級中間語言        52
4.6  我們的中間語言:MIR、HIR和LIR        53
4.6.1  中級中間表示(MIR)        53
4.6.2  高級中間表示(HIR)        56
4.6.3  低級中間表示(LIR)        57
4.7  用ICAN表示MIR、HIR和LIR        58
4.7.1  用ICAN表示MIR        59
4.7.2  用ICAN表示HIR        62
4.7.3  用ICAN表示LIR        64
4.8  管理中間代碼的若干數據結構和例程的ICAN命名        67
4.9  其他中間語言形式        70
4.9.1  三元式        70
4.9.2  樹        71
4.9.3  無環(huán)有向圖(DAG)        72
4.9.4  前綴波蘭表示        73
4.10  小結        74
4.11  進一步閱讀        74
4.12  練習        74
第5章  運行時支持        77
5.1  數據表示和指令        77
5.2  寄存器用法        80
5.3  局部棧幀        81
5.4  運行時棧        83
5.5  參數傳遞規(guī)則        84
5.6  過程的入口處理、出口處理、調用和返回        86
5.6.1  用寄存器傳遞參數:平面寄存器文件        87
5.6.2  用運行時棧傳遞參數        88
5.6.3  用具有寄存器窗口的寄存器傳遞參數        89
5.6.4  過程值變量        91
5.7  代碼共享與位置無關代碼        91
5.8  符號和多態(tài)語言支持        94
5.9  小結        96
5.10  進一步閱讀        96
5.11  練習        97
第6章  自動產生代碼生成器        99
6.1  簡介代碼生成器的自動生成        100
6.2  語法制導技術        100
6.2.1  代碼生成器        102
6.2.2  代碼生成器的產生器        103
6.2.3  刪除鏈循環(huán)        110
6.2.4  刪除句法阻滯        112
6.2.5  最后的考慮        115
6.3  語義制導的分析介紹        115
6.4  樹模式匹配和動態(tài)規(guī)劃        116
6.5  小結        120
6.6  進一步閱讀        120
6.7  練習        121
第7章  控制流分析        123
7.1  控制流分析的方法        125
7.2  深度為主查找、前序遍歷、后序遍歷和寬度為主查找        128
7.3  必經結點和后必經結點        132
7.4  循環(huán)和強連通分量        139
7.5  可歸約性        143
7.6  區(qū)間分析和控制樹        144
7.7  結構分析        147
7.8  小結        156
7.9  進一步閱讀        157
7.10  練習        157
第8章  數據流分析        159
8.1  一個例子:到達-定值        159
8.2  基本概念:格、流函數和不動點        163
8.3  數據流問題及其解決方法的分類        166
8.4  迭代數據流分析        168
8.5  流函數的格        171
8.6  基于控制樹的數據流分析        172
8.7  結構分析        172
8.7.1  結構分析:向前問題        172
8.7.2  結構分析:向后問題        178
8.7.3  結構分析方程的表示        180
8.8  區(qū)間分析        181
8.9  其他方法        182
8.10  du鏈、ud鏈和網        183
8.11  靜態(tài)單賦值形式        184
8.12  數組、結構和指針的處理        188
8.13  數據流分析器的自動構造        188
8.14  更貪婪的分析        189
8.15  小結        191
8.16  進一步閱讀        192
8.17  練習        192
第9章  依賴關系分析和依賴圖        195
9.1  依賴關系        195
9.2  基本塊依賴DAG        196
9.3  循環(huán)中的依賴關系        200
9.4  依賴關系測試        204
9.5  程序依賴圖        207
9.6  動態(tài)分配的對象之間的依賴關系        209
9.7  小結        210
9.8  進一步閱讀        211
9.9  練習        211
第10章  別名分析        213
10.1  各種現實程序設計語言中的別名        215
10.1.1  Fortran 77中的別名        216
10.1.2  Pascal中的別名        216
10.1.3  C中的別名        217
10.1.4  Fortran 90中的別名        218
10.2  別名收集器        218
10.3  別名傳播器        222
10.4  小結        227
10.5  進一步閱讀        227
10.6  練習        228
第11章  優(yōu)化簡介        229
11.1  第12~18章討論的全局優(yōu)化        230
11.2  流敏感性和可能與一定信息        231
11.3  各種優(yōu)化的重要性        231
11.4  優(yōu)化的順序與重復        232
11.5  進一步閱讀        235
11.6  練習        235
第12章  前期優(yōu)化        237
12.1  常數表達式計算(常數折疊)        237
12.2  聚合量標量替代        238
12.3  代數化簡和重結合        240
12.3.1  地址表達式的代數化簡和重結合        241
12.3.2  對浮點表達式應用代數化簡        246
12.4  值編號        247
12.4.1  作用于基本塊的值編號        247
12.4.2  全局值編號        251
12.5  復寫傳播        256
12.6  稀有條件常數傳播        261
12.7  小結        267
12.8  進一步閱讀        269
12.9  練習        269
第13章  冗余刪除        271
13.1  公共子表達式刪除        271
13.1.1  局部公共子表達式刪除        272
13.1.2  全局公共子表達式刪除        276
13.1.3  向前替代        284
13.2  循環(huán)不變代碼外提        284
13.3  部分冗余刪除        292
13.4  冗余刪除和重結合        298
13.5  代碼提升        299
13.6  小結        302
13.7  進一步閱讀        302
13.8  練習        304
第14章  循環(huán)優(yōu)化        305
14.1  歸納變量優(yōu)化        305
14.1.1  識別歸納變量        306
14.1.2  強度削弱        312
14.1.3  活躍變量分析        319
14.1.4  歸納變量刪除和線性函數測試替換        320
14.2  不必要邊界檢查的消除        325
14.3  小結        327
14.4  進一步閱讀        329
14.5  練習        329
第15章  過程優(yōu)化        331
15.1  尾調用優(yōu)化和尾遞歸刪除        331
15.2  過程集成        334
15.3  內嵌擴展        337
15.4  葉例程優(yōu)化和收縮包裝        338
15.4.1  葉例程優(yōu)化        338
15.4.2  收縮包裝        339
15.5  小結        341
15.6  進一步閱讀        343
15.7  練習        343
第16章  寄存器分配        345
16.1  寄存器分配和指派        345
16.2  局部方法        346
16.3  圖著色        347
16.3.1  圖著色寄存器分配概述        347
16.3.2  頂層結構        349
16.3.3  網,可分配對象        350
16.3.4  沖突圖        354
16.3.5  沖突圖的表示        355
16.3.6  寄存器合并        358
16.3.7  計算溢出代價        359
16.3.8  修剪沖突圖        361
16.3.9  指派寄存器        363
16.3.10  溢出符號寄存器        365
16.3.11  圖著色寄存器分配的兩個例子        367
16.3.12  其他問題        375
16.4  基于優(yōu)先級的圖著色        376
16.5  其他寄存器分配方法        377
16.6  小結        377
16.7  進一步閱讀        378
16.8  練習        380
第17章  代碼調度        381
17.1  指令調度        381
17.1.1  分支調度        382
17.1.2  表調度        385
17.1.3  自動生成指令調度器        390
17.1.4  超標量實現有關的調度        390
17.1.5  基本塊調度中的其他問題        390
17.1.6  跨基本塊邊界的調度        392
17.2  前瞻取和上推        392
17.3  前瞻調度        393
17.4  軟流水        393
17.4.1  窗口調度        395
17.4.2  展開-壓實軟流水        397
17.4.3  循環(huán)展開        400
17.4.4  變量擴張        403
17.4.5  寄存器重命名        404
17.4.6  軟流水的其他方法        407
17.4.7  層次歸約        407
17.5  蹤跡調度        408
17.6  滲透調度        409
17.7  小結        411
17.8  進一步閱讀        413
17.9  練習        413
第18章  控制流和低級優(yōu)化        415
18.1  不可到達代碼的刪除        415
18.2  伸直化        417
18.3  if化簡        419
18.4  循環(huán)化簡        420
18.5  循環(huán)倒置        421
18.6  無開關化        422
18.7  分支優(yōu)化        422
18.8  尾融合或交叉轉移        423
18.9  條件傳送        424
18.10  死代碼刪除        425
18.11  分支預測        429
18.12  機器方言和指令歸并        430
18.13  小結        433
18.14  進一步閱讀        433
18.15  練習        435
第19章  過程間分析與優(yōu)化        437
19.1  過程間控制流分析:調用圖        438
19.2  過程間數據流分析        445
19.2.1  流不敏感副作用分析        445
19.2.2  流敏感副作用:程序概要圖        455
19.2.3  副作用計算中的其他問題        458
19.3  過程間常數傳播        458
19.4  過程間別名分析        461
19.4.1  流不敏感別名分析        462
19.4.2  傳值和傳指針語言的過程間別名分析        471
19.5  過程間優(yōu)化        473
19.6  過程間寄存器分配        475
19.6.1  連接時的寄存器分配        475
19.6.2  編譯時的過程間寄存器分配        477
19.7  全局引用的聚合        477
19.8  過程間程序管理中的其他主題        478
19.9  小結        478
19.10  進一步閱讀        480
19.11  練習        480
第20章  存儲層次優(yōu)化        483
20.1  數據和指令高速緩存的影響        484
20.2  指令高速緩存優(yōu)化        485
20.2.1  利用硬件輔助:指令預取        485
20.2.2  過程排序        485
20.2.3  過程和基本塊的放置        489
20.2.4  過程內的代碼安置        489
20.2.5  過程分裂        492
20.2.6  過程內和過程間方法的結合        492
20.3  數組元素的標量替換        493
20.4  數據高速緩存優(yōu)化        496
20.4.1  過程間的數據安排        497
20.4.2  循環(huán)轉換        498
20.4.3  局部性與循環(huán)鋪砌        502
20.4.4  利用硬件輔助:數據預取        504
20.5  標量優(yōu)化與面向存儲器的優(yōu)化        505
20.6  小結        506
20.7  進一步閱讀        508
20.8  練習        508
第21章  編譯器實例分析與未來的發(fā)展趨勢        509
21.1  Sun用于SPARC的編譯器        510
21.1.1  SPARC體系結構        510
21.1.2  Sun SPARC編譯器        511
21.2  IBM POWER和PowerPC體系結構的XL編譯器        517
21.2.1  POWER和PowerPC體系結構        517
21.2.2  XL編譯器        518
21.3  DEC用于Alpha的編譯器        524
21.3.1  Alpha體系結構        524
21.3.2  Alpha的GEM編譯器        525
21.4  Intel 386體系結構上的Intel參考編譯器        530
21.4.1  Intel 386體系結構        530
21.4.2  Intel編譯器        531
21.5  小結        538
21.6  編譯器設計和實現未來的趨勢        539
21.7  進一步閱讀        539
附錄A  本書使用的匯編語言指南        541
附錄B  集合、序列、樹、DAG和函數的表示        549
附錄C  軟件資源        557
參考文獻        561
索引        579

本目錄推薦

掃描二維碼
Copyright ? 讀書網 www.dappsexplained.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號 鄂公網安備 42010302001612號