《程序设计语言与编译:语言的设计和实现 第3版》PDF下载

  • 购买积分:12 如何计算积分?
  • 作  者:王晓斌,陈文宇编著
  • 出 版 社:北京:电子工业出版社
  • 出版年份:2009
  • ISBN:9787121081040
  • 页数:324 页
图书介绍:本教材以抽象的方法讲述了程序设计语言的共性,分析了程序设计语言的结构,并采用常用的语言的相关成分作为实例来说明这些抽象出来的共性,从而导出程序设计语言的设计和实现的知识。本教材分为上、下两部分。上部对高级程序设计语言进行概述(包括程序设计语言的数据类型、控制结构和高级程序设计语言的设计)。下部介绍高级程序设计语言的实现(即编译系统)。包括编译概述、词法分析、语法分析、语义分析、代码优化、目标代码生成和运行时存储空间的组织安排。

上篇 程序设计语言的设计 1

第1章 绪论 1

1.1 引言 1

1.2 强制式语言 2

1.2.1 程序设计语言的分类 3

1.2.2 冯·诺依曼体系结构 4

1.2.3 绑定和绑定时间 4

1.2.4 变量 5

1.2.5 虚拟机 9

1.3 程序单元 11

1.4 程序设计语言发展简介 12

1.4.1 早期的高级语言 13

1.4.2 早期语言的发展阶段 15

1.4.3 概念的集成阶段 16

1.4.4 再一次突破 16

1.4.5 大量的探索 18

1.4.6 Ada语言 18

1.4.7 第四代语言 19

1.4.8 网络时代的语言 19

1.4.9 新一代程序设计语言 22

1.4.10 面向未来的汉语程序设计语言 23

1.4.11 总结 25

习题1 27

第2章 数据类型 28

2.1 引言 28

2.2 内部类型 29

2.3 用户定义类型 31

2.3.1 笛卡儿积 31

2.3.2 有限映像 31

2.3.3 序列 32

2.3.4 递归 33

2.3.5 判定或 33

2.3.6 幂集 34

2.4 Pascal语言数据类型结构 35

2.4.1 非结构类型 35

2.4.2 聚合构造 37

2.4.3 指针 41

2.5 Ada语言数据类型结构 42

2.5.1 标量类型 42

2.5.2 组合类型 43

2.6 C语言数据类型结构 48

2.6.1 非结构类型 48

2.6.2 聚合构造 50

2.6.3 指针 53

2.6.4 空类型 53

2.7 Java语言的数据类型 54

2.7.1 内部类型 54

2.7.2 用户定义类型 55

2.8 抽象数据类型 55

2.8.1 SIMULA 67语言的类机制 57

2.8.2 CLU语言的抽象数据类型 60

2.8.3 Ada语言的抽象数据类型 61

2.8.4 Modula 2语言的抽象数据类型 64

2.8.5 C++语言的抽象数据类型 66

2.8.6 Java抽象数据类型 69

2.9 类型检查 71

2.10 类型转换 72

2.11 类型等价 74

2.12 实现模型 75

2.12.1 内部类型和用户定义的非结构类型实现模型 75

2.12.2 结构类型实现模型 76

习题2 81

第3章 控制结构 82

3.1 引言 82

3.2 语句级控制结构 82

3.2.1 顺序结构 82

3.2.2 选择结构 83

3.2.3 循环结构 86

3.2.4 语句级控制结构分析 88

3.2.5 用户定义控制结构 90

3.3 单元级控制结构 90

3.3.1 显式调用从属单元 90

3.3.2 隐式调用单元——异常处理 94

3.3.3 SIMULA 67语言协同程序 103

3.3.4 并发单元 104

习题3 108

第4章 程序语言的设计 110

4.1 语言的定义 110

4.1.1 语法 110

4.1.2 语义 114

4.2 文法 115

4.2.1 文法的定义 115

4.2.2 文法的分类 117

4.2.3 文法产生的语言 118

4.2.4 语法树 120

4.3 语言的设计 122

4.3.1 表达式的设计 122

4.3.2 语句的设计 124

4.3.3 程序单元的设计 125

4.3.4 程序的设计 127

4.4 语言设计实例 127

4.5 一些设计准则 129

习题4 130

第5章 非过程式程序设计语言 131

5.1 引言 131

5.2 函数式程序设计语言 133

5.2.1 函数 133

5.2.2 数学函数与程序设计语言函数 134

5.2.3 一种简单的纯函数式语言 135

5.2.4 LISP语言概述 139

5.2.5 APL语言概述 142

5.2.6 作用式语言和命令式语言的比较 145

5.3 逻辑程序设计语言 146

5.3.1 逻辑程序设计 146

5.3.2 Prolog语言概述 148

5.3.3 逻辑程序设计展望 156

5.4 面向对象程序设计语言 156

5.4.1 面向对象的基本概念 157

5.4.2 Smalltalk语言概述 160

5.4.3 对面向对象语言的评价 167

5.5 小结 167

习题5 168

第6章 形式语义学简介 169

6.1 引言 169

6.2 形式语义学分类 170

6.3 公理语义学简介 171

6.4 指称语义学简介 175

习题6 178

下篇 程序设计语言的实现(编译)第7章 编译概述 180

7.1 引言 180

7.2 翻译和编译 180

7.3 解释 181

7.4 编译步骤 181

习题7 184

第8章 词法分析 185

8.1 词法分析概述 185

8.2 单词符号的类别 186

8.3 词法分析器的输出形式 187

8.4 词法分析器的设计 188

8.5 符号表 194

8.5.1 符号表的组织 194

8.5.2 常用的符号表结构 195

习题8 197

第9章 自上而下的语法分析 198

9.1 引言 198

9.2 回溯分析法 199

9.2.1 回溯的原因 200

9.2.2 提取公共左因子 202

9.2.3 消除左递归 203

9.3 递归下降分析法 205

9.3.1 递归下降分析器的构造 205

9.3.2 扩充的BNF 207

9.4 预测分析法 209

9.4.1 预测分析过程 209

9.4.2 预测分析表的构造 211

9.4.3 LL(1)文法 214

9.4.4 非LL(1)文法 214

习题9 215

第10章 自下而上的语法分析 217

10.1 引言 217

10.1.1 分析树 217

10.1.2 规范归约、短语和句柄 219

10.2 算符优先分析法 220

10.2.1 算符优先文法 220

10.2.2 算符优先分析算法 222

10.2.3 算符优先关系表的构造 224

10.3 LR分析法 226

10.3.1 LR分析过程 227

10.3.2 活前缀 229

10.3.3 LR(0)项目集规范族 230

10.3.4 LR(0)分析表的构造 233

10.3.5 SLR(1)分析表的构造 235

习题10 238

第11章 语义分析和中间代码生成 240

11.1 语义分析概论 240

11.1.1 语义分析的任务 240

11.1.2 语法制导翻译 240

11.2 中间代码 241

11.3 语义变量和语义函数 243

11.4 说明语句的翻译 244

11.5 赋值语句的翻译 245

11.5.1 只含简单变量的赋值语句的翻译 245

11.5.2 含数组元素的赋值语句的翻译 247

11.6 控制语句的翻译 252

11.6.1 布尔表达式的翻译 252

11.6.2 无条件转移语句的翻译 253

11.6.3 条件语句的翻译 255

11.6.4 while语句的翻译 259

11.6.5 for语句的翻译 261

11.6.6 过程调用的翻译 262

习题11 263

第12章 代码优化和目标代码生成 264

12.1 局部优化 264

12.1.1 优化的定义 264

12.1.2 基本块的划分 264

12.1.3 程序流图 266

12.1.4 基本块内的优化 266

12.2 全局优化 268

12.2.1 循环的定义 268

12.2.2 必经结点集 269

12.2.3 循环的查找 269

12.2.4 循环的优化 270

12.3 并行优化 272

12.3.1 数据的依赖关系分析 273

12.3.2 向量化代码生成 277

12.3.3 反相关与输出相关的消除 278

12.3.4 标量扩张 279

12.3.5 循环条块化 280

12.4 目标代码生成 280

12.4.1 一个计算机模型 281

12.4.2 简单的代码生成方法 281

12.4.3 循环中的寄存器分配 282

习题12 284

第13章 运行时存储空间的组织 286

13.1 程序的存储空间 286

13.1.1 代码空间 286

13.1.2 数据空间 286

13.1.3 活动记录 287

13.1.4 变量的存储分配 288

13.1.5 存储分配模式 289

13.2 静态分配 290

13.3 栈式分配 293

13.3.1 只含半静态变量的栈式分配 293

13.3.2 半动态变量的栈式分配 294

13.3.3 非局部环境 295

13.3.4 非局部环境的引用 297

13.4 参数传递 299

13.4.1 数据参数传递 299

13.4.2 子程序参数传递 302

习题13 303

附录A 形式语言与自动机简介 305

思考题 323