《可变目标C编译器-设计与实现》PDF下载

  • 购买积分:14 如何计算积分?
  • 作  者:(美)Christopher W.Fraser,(美)David R.Hanson著;王挺,黄春等译
  • 出 版 社:北京:电子工业出版社
  • 出版年份:2005
  • ISBN:7505399225
  • 页数:423 页
图书介绍:本书系统地介绍了可变目标ANSI C编译器lcc的设计方法和实现技术。lcc是一个实用的编译器,能够为不同的目标机器(如MIPS R3000、SPARC、Intel386及其后续产品)生成代码。本书结合lcc的具体实现,详细讲述了存储管理、符号表、词法分析、语法分析、中间代码生成、优化、目标代码产生等编译程序的各个部分。全书共分19章,在各章之后均附有练习题。

第1章 引论 1

1.1 文本程序 1

1.2 如何使用本书 2

1.3 概述 3

1.4 设计 7

1.5 公共声明 11

1.6 语法规范 13

1.7 错误 14

深入阅读 15

2.1 内存管理接口 16

第2章 存储管理 16

2.2 分配区的表示 17

2.3 空间分配 18

2.4 空间释放 20

2.5 字符串 20

深入阅读 23

练习 23

第3章 符号管理 26

3.1 符号的表示 27

3.2 符号表的表示 29

3.3 作用域的改变 32

3.4 查找和建立标识符 32

3.5 标号 33

3.6 常量 35

3.7 产生的变量 37

深入阅读 38

练习 38

第4章 类型 40

4.1 类型表示 40

4.2 类型管理 42

4.3 类型断言 45

4.4 类型构造器 46

4.5 函数类型 48

4.6 结构和枚举类型 49

4.7 类型检查函数 52

4.8 类型映射 56

深入阅读 56

练习 57

第5章 代码生成接口 59

5.1 类型度量 59

5.2 接口记录 60

5.3 符号 60

5.4 类型 61

5.5 dag操作 61

5.6 接口标志 65

5.8 定义 67

5.7 初始化 67

5.9 常量 69

5.10 函数 70

5.11 接口绑定 72

5.12 上行调用 73

深入阅读 75

练习 75

第6章 词法分析器 77

6.1 输入 77

6.2 单词的识别 81

6.3 关键字的识别 85

6.4 标识符的识别 86

6.5 数字的识别 87

6.6 字符常量和字符串的识别 92

深入阅读 95

练习 95

第7章 语法分析 97

7.1 语言和语法 97

7.2 二义性和分析树 98

7.3 自上而下的语法分析 100

7.4 FIRST和FOLLOW集合 102

7.5 编写分析函数 104

7.6 处理语法错误 106

深入阅读 110

练习 111

第8章 表达式 112

8.1 表达式的表示 112

8.2 表达式分析 115

8.3 C语言表达式的分析 117

8.4 赋值表达式 119

8.5 条件表达式 121

8.6 二元表达式 122

8.7 一元表达式和后缀表达式 124

8.8 基本表达式 127

练习 130

深入阅读 130

第9章 表达式语义 132

9.1 转换 132

9.2 一元操作符和后缀操作符 136

9.3 函数调用 141

9.4 二元操作符 147

9.5 赋值操作 150

9.6 条件操作 154

9.7 常量折叠 156

深入阅读 165

练习 165

第10章 语句 167

10.1 代码的表示 167

10.2 执行点 170

10.3 语句的识别 171

10.4 if语句 173

10.5 标号和goto语句 174

10.6 循环 176

10.7 switch语句 178

10.8 返回语句 188

10.9 管理标号和跳转指令 191

深入阅读 194

练习 194

11.1 转换单元 196

第11章 声明 196

11.2 声明 197

11.3 声明符 206

11.4 函数声明符 210

11.5 结构说明符 215

11.6 函数定义 222

11.7 复合语句 229

11.8 结束处理 236

11.9 主程序 238

深入阅读 240

练习 241

第12章 中间代码的生成 243

12.1 消除公共子表达式 244

12.2 构建节点 248

12.3 控制流 250

12.4 赋值语句 256

12.5 函数调用 259

12.6 强制计算顺序 261

12.7 驱动代码生成 263

12.8 删除多次引用的节点 267

深入阅读 272

练习 273

第13章 构造代码生成器 275

13.1 代码生成器的组织 276

13.2 接口扩展 277

13.3 上行调用 279

13.4 节点扩展 280

13.5 符号扩展 282

13.6 帧的布局 284

13.7 生成块复制的代码 287

13.8 初始化 289

深入阅读 290

练习 290

第14章 选择和发送指令 291

14.1 规范 292

14.2 标记树 294

14.3 化简树 295

14.4 代价函数 302

14.5 调试 303

14.6 发送器 304

14.7 寄存器定位 309

14.8 指令选择的协调 313

14.9 共享规则 314

14.10 编写规范 315

深入阅读 316

练习 316

15.1 组织结构 318

第15章 寄存器分配 318

15.2 寄存器状态跟踪 319

15.3 寄存器分配 322

15.4 寄存器溢出 327

深入阅读 334

练习 334

第16章 MIPS R3000代码的生成 335

16.1 寄存器 336

16.2 指令的选取 339

16.3 函数的实现 349

16.4 数据的定义 355

16.5 块的复制 359

练习 360

深入阅读 360

第17章 SPARC代码的生成 362

17.1 寄存器 363

17.2 指令的选取 366

17.3 函数的实现 378

17.4 数据的定义 384

17.5 块的复制 386

深入阅读 387

练习 387

第18章 X86代码的生成 389

18.1 寄存器 390

18.2 指令的选取 394

18.3 函数的实现 407

18.4 数据的定义 409

深入阅读 412

练习 412

第19章 回顾 413

19.1 数据结构 413

19.2 接口 414

19.3 句法和语义分析 415

19.4 代码生成和优化 416

19.5 测试和验证 416

深入阅读 417

参考文献 419