《程序设计语言 编译原理》PDF下载

  • 购买积分:13 如何计算积分?
  • 作  者:陈火旺等编著
  • 出 版 社:北京:国防工业出版社
  • 出版年份:2000
  • ISBN:7118022071
  • 页数:388 页
图书介绍:《程序设计语言:编译原理》(第3版)是在陈火旺、钱家骅、孙永强三位教授编写的《程序设计语言编译原理》的基础上,结合编译技术的最新研究成果和作者多年的教学经验编写而成的。《程序设计语言:编译原理》(第3版)比较全面、系统地介绍了编译程序构造的一般原理和基本实现方法,内容包括词法分析、语法分析、属性文法与语法制导翻译、语义分析与中间代码产生、符号表与运行时存储空间组织、优化与目标代码生成、并行编译技术。与原教材相比,《程序设计语言:编译原理》(第3版)将编译技术的最新发展,例如属性文法、面向对象语言的编译技术、并行编译技术、编译程序自动构造工具等内容系统地融合到教材中;在语言背景方面,以C,Pascal替代原教材中的FORTRAN和Algol;并在一些重要的章节中增加了必要的例题,以帮助读者理解和自学。

第一章 引论 1

1.1什么叫编译程序 1

1.2编译过程概述 2

1.3编译程序的结构 5

1.3.1编译程序总框 5

1.3.2表格与表格管理 6

1.3.3出错处理 6

1.3.4遍 6

1.3.5编译前端与后端 7

1.4编译程序与程序设计环境 7

1.5编译程序的生成 9

第二章 高级语言及其语法描述 12

2.1 程序语言的定义 12

2.1.1语法 12

2.1.2 语义 13

2.2 高级语言的一般特性 14

2.2.1 高级语言的分类 15

2.2.2程序结构 15

2.2.3数据类型与操作 18

2.2.4语句与控制结构 22

2.3程序语言的语法描述 25

2.3.1 上下文无关文法 26

2.3.2语法分析树与二义性 31

2.3.3 形式语言鸟瞰 34

练习 35

第三章 词法分析 37

3.1 对于词法分析器的要求 37

3.1.1词法分析器的功能和输出形式 37

3.1.2词法分析器作为一个独立子程序 38

3.2词法分析器的设计 38

3.2.1输入、预处理 39

3.2.2 单词符号的识别:超前搜索 39

3.2.3状态转换图 41

3.2.4状态转换图的实现 44

3.3正规表达式与有限自动机 46

3.3.1正规式与正规集 46

3.3.2确定有限自动机(DFA) 47

3.3.3非确定有限自动机(NFA) 49

3.3.4正规文法与有限自动机的等价性 51

3.3.5 正规式与有限自动机的等价性 53

3.3.6确定有限自动机的化简 56

3.4词法分析器的自动产生 58

3.4.1语言LEX的一般描述 58

3.4.2超前搜索 60

3.4.3 LEX的实现 61

练习 63

第四章 语法分析——自上而下分析 66

4.1 语法分析器的功能 66

4.2 自上而下分析面临的问题 66

4.3 LL(1)分析法 68

4.3.1左递归的消除 69

4.3.2消除回溯、提左因子 71

4.3.3 LL(1)分析条件 71

4.4递归下降分析程序构造 74

4.5预测分析程序 76

4.5.1预测分析程序工作过程 76

4.5.2预测分析表的构造 78

4.6 LL(1)分析中的错误处理 80

练习 81

第五章 语法分析——自下而上分析 83

5.1 自下而上分析基本问题 83

5.1.1 归约 83

5.1.2规范归约简述 85

5.1.3符号栈的使用与语法树的表示 87

5.2算符优先分析 89

5.2.1算符优先文法及优先表构造 89

5.2.2算符优先分析算法 92

5.2.3优先函数 94

5.2.4算符优先分析中的出错处理 96

5.3LR分析法 98

5.3.1 LR分析器 99

5.3.2LR(O)项目集族和LR(O)分析表的构造 104

5.3.3 SLR分析表的构造 110

5.3.4规范LR分析表的构造 114

5.3.5 LALR分析表的构造 117

5.3.6 二义文法的应用 123

5.3.7LR分析中的出错处理 126

5.4语法分析器的自动产生工具YACC 129

练习 133

第六章 属性文法和语法制导翻译 136

6.1属性文法 136

6.2基于属性文法的处理方法 139

6.2.1 依赖图 140

6.2.2树遍历的属性计算方法 142

6.2.3 一遍扫描的处理方法 144

6.2.4抽象语法树 144

6.3 S-属性文法的自下而上计算 147

6.4 L-属性文法和自顶向下翻译 149

6.4.1 翻译模式 150

6.4.2自顶向下翻译 153

6.4.3递归下降翻译器的设计 156

6.5自下而上计算继承属性 158

6.5.1 从翻译模式中去掉嵌入在产生式中间的动作 158

6.5.2分析栈中的继承属性 158

6.5.3模拟继承属性的计算 160

6.5.4 用综合属性代替继承属 163

练习 164

第七章 语义分析和中间代码产生 166

7.1 中间语言 166

7.1.1 后缀式 167

7.1.2 图表示法 167

7.1.3 三地址代码 169

7.2说明语句 174

7.2.1 过程中的说明语句 174

7.2.2保留作用域信息 175

7.2.3 记录中的域名 177

7.3赋值语句的翻译 178

7.3.1 简单算术表达式及赋值语句 178

7.3.2数组元素的引用 179

7.3.3 记录中域的引用 185

7.4布尔表达式的翻译 185

7.4.1数值表示法 186

7.4.2作为条件控制的布尔式翻译 187

7.5控制语句的翻译 192

7.5.1控制流语句 192

7.5.2标号与goto语句 196

7.5.3CASE语句的翻译 197

7.6过程调用的处理 200

7.7类型检查 201

7.7.1类型系统 201

7.7.2类型检查器的规格说明 204

7.7.3函数和运算符的重载 207

7.7.4多态函数 209

练习 217

第八章 符号表 221

8.1符号表的组织与作用 221

8.1.1符号表的作用 221

8.1.2符号表的组织方式 222

8.2整理与查找 226

8.2.1线性表 226

8.2.2对折查找与二叉树 227

8.2.3杂凑技术 228

8.3名字的作用范围 229

8.3.1FORTRAN的符号表组织 230

8.3.2 Pascal的符号表组织 231

8.4符号表的内容 234

练习 236

第九章 运行时存储空间组织 239

9.1 目标程序运行时的活动 239

9.1.1过程的活动 239

9.1.2参数传递 241

9.2运行时存储器的划分 243

9.2.1运行时存储器的划分 243

9.2.2活动记录 244

9.2.3存储分配策略 245

9.3静态存储分配 245

9.3.1数据区 246

9.3.2公用语句的处理 247

9.3.3等价语句的处理 249

9.3.4地址分配 251

9.3.5临时变量的地址分配 253

9.4简单的栈式存储分配 255

9.4.1 C的活动记录 256

9.4.2 C的过程调用、过程进入、数组空间分配和过程返回 256

9.5嵌套过程语言的栈式实现 257

9.5.1非局部名字的访问的实现 259

9.5.2参数传递的实现 264

9.6 堆式动态存储分配 265

9.6.1 堆式动态存储分配的实现 266

9.6.2隐式存储回收 268

练习 268

第十章 优化 272

10.1概述 272

10.2局部优化 279

10.2.1基本块及流图 279

10.2.2基本块的DAG表示及其应用 281

10.3循环优化 287

10.3.1代码外提 287

10.3.2强度削弱 291

10.3.3删除归纳变量 292

10.4数据流分析 294

10.4.1任意路径数据流分析 294

10.4.2全路径数据流分析 297

10.4.3数据流问题的分类 299

10.4.4其它主要的数据流问题 299

10.4.5利用数据流信息进行全局优化 301

练习 306

第十一章 目标代码生成 309

11.1基本问题 309

11.2目标机器模型 311

11.3一个简单的代码生成器 312

11.3.1待用信息 314

11.3.2寄存器描述和地址描述 315

11.3.3代码生成算法 315

11.4寄存器分配 317

11.5 DAG的目标代码 321

11.6窥孔优化 324

练习 327

第十二章 并行编译基础 329

12.1 并行计算机及其编译系统 329

12.1.1向量计算机 330

12.1.2共享存储器多处理机 331

12.1.3分布存储器大规模并行计算机 335

12.1.4 并行编译系统的结构 336

12.2基本概念 339

12.2.1 向量与向量的次序 339

12.2.2循环模型与索引空间 340

12.2.3输入与输出集合 342

12.2.4语句的执行顺序 343

12.3依赖关系 344

12.3.1依赖关系定义 345

12.3.2语句依赖图 346

12.3.3依赖距离、依赖方向与依赖层次 348

12.4依赖关系问题 353

12.5依赖关系测试 356

12.6循环的向量化与并行化 364

12.7循环变换技术 369

练习 381

参考文献 386