《编程语言 原理与范型 第2版》PDF下载

  • 购买积分:17 如何计算积分?
  • 作  者:(美)AllenB.Tucker著
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2008
  • ISBN:7302166935
  • 页数:568 页
图书介绍:本书介绍编程语言的原理与范型和相关的专题。

第1章 概论 1

1.1 原理 2

1.2 范例 3

1.3 专题 5

1.4 编程语言发展简史 5

1.5 关于语言设计 10

1.5.1 设计约束 11

1.5.2 结果和目标 13

1.6 编译器和虚拟机 17

1.7 小结 19

1.8 练习 19

第2章 语法 21

2.1 文法 22

2.1.1 BNF文法 22

2.1.2 推导 24

2.1.3 语法分析树 25

2.1.4 结合性和优先级 27

2.1.5 歧义性文法 29

2.2 BNF扩展 32

2.3 小语言CLITE的语法 34

2.3.1 词法 36

2.3.2 具体语法 37

2.4 编译器和解释器 41

2.5 语法和语义学链接 44

2.5.1 抽象语法 45

2.5.2 抽象语法树 47

2.5.3 Clite的抽象语法 48

2.6 小结 50

2.7 练习 51

第3章 词法和语法分析 55

3.1 Chomsky层次结构 55

3.2 词法分析 58

3.2.1 正则表达式 59

3.2.2 有穷状态机 61

3.2.3 从设计到代码 64

3.3 语法分析 68

3.3.1 基本定义 69

3.3.2 递归下降分析 73

3.4 小结 79

3.5 练习 79

第4章 命名 83

4.1 语法问题 84

4.2 变量 85

4.3 作用域 87

4.4 符号表 89

4.5 解析引用 90

4.6 动态作用域 92

4.7 可见性 93

4.8 重载 94

4.9 生存期 96

4.10 小结 97

4.11 练习 97

第5章 类型 99

5.1 类型错误 100

5.2 静态类型和动态类型 101

5.3 基本类型 102

5.4 非基本类型 110

5.4.1 枚举 110

5.4.2 指针 111

5.4.3 数组和列表 112

5.4.4 串 117

5.4.5 结构体 118

5.4.6 变体记录和共用体 119

5.5 递归数据类型 121

5.6 作为类型的函数 122

5.7 类型等价 123

5.8 子类型 124

5.9 多态和通用类 125

5.10 自定义类型 129

5.11 小结 130

5.12 练习 130

第6章 类型系统 133

6.1 Clite的类型系统 135

6.2 隐式类型转换 142

6.3 规范Clite类型系统 146

6.4 小结 149

6.5 练习 149

第7章 语义 151

7.1 动机 151

7.2 表达式语义 153

7.2.1 表示法 153

7.2.2 结合律和优先级 154

7.2.3 短循环求值 156

7.2.4 表达式的意义 157

7.3 程序状态 158

7.4 赋值语义 160

7.4.1 多重赋值 160

7.4.2 赋值语句与赋值表达式 160

7.4.3 语义的引用和复制 161

7.5 流程控制语义 161

7.5.1 顺序执行语句 162

7.5.2 条件语句 162

7.5.3 循环语句 164

7.5.4 GoTo争议 165

7.6 输入/输出语句 167

7.6.1 基本概念 167

7.6.2 随机访问文件 172

7.6.3 I/O错误处理语义 175

7.7 异常处理语义 177

7.7.1 策略和设计理念 178

7.7.2 Ada、C++和Java中的异常处理 180

7.7.3 异常和断言 188

7.8 小结 192

7.9 练习 192

第8章 语义解释 195

8.1 状态转换和局部函数 195

8.2 Clite语义 196

8.2.1 程序的意义 197

8.2.2 语句的语义 198

8.2.3 表达式语义 202

8.2.4 表达式的副作用 206

8.3 动态类型语义 207

8.4 语义的规范化处理 211

8.4.1 状态和状态转换 212

8.4.2 程序的表示型语义 213

8.4.3 语句的表示型语义 214

8.4.4 表达式的表示型语义 218

8.4.5 规范化语义模型的局限性 220

8.5 小结 220

8.6 练习 220

第9章 函数 225

9.1 基本术语 226

9.2 函数调用和返回 226

9.3 参数 227

9.4 参数传递机制 229

9.4.1 传值调用 229

9.4.2 按引用传递 231

9.4.3 值结果和结果传递 233

9.4.4 按名传递 234

9.4.5 Ada中的参数传递 236

9.5 活动记录 236

9.6 递归函数 237

9.7 运行时堆栈 239

9.8 小结 241

9.9 练习 242

第10章 函数实现 245

10.1 Clite中的函数声明与调用 245

10.1.1 具体句法 246

10.1.2 抽象句法 247

10.2 编译Clite类型系统 249

10.3 函数调用与返回的语义 251

10.3.1 非void函数 252

10.3.2 重访问的副作用 253

10.4 类型和语义的规范处理 254

10.4.1 Clite类型映射 254

10.4.2 规范化Clite类型规则 255

10.4.3 规范Clite语义 257

10.5 小结 262

10.6 练习 262

第11章 内存管理 265

11.1 堆 266

11.2 动态数组的实现 267

11.3 垃圾回收 270

11.3.1 引用计数 271

11.3.2 标记扫描 272

11.3.3 复制收集 275

11.3.4 策略优劣比较 277

11.4 小结 277

11.5 练习 278

第12章 命令式编程 279

12.1 命令式语言的产生 279

12.2 过程抽象 281

12.3 表达式和赋值 283

12.4 支持数据结构的库 284

12.5 命令式编程和C语言 286

12.5.1 一般特征 287

12.5.2 示例:Grep 288

12.5.3 示例:Average 290

12.5.4 示例:符号微分法 290

12.6 命令式编程和Ada语言 294

12.6.1 一般特征 295

12.6.2 示例:Average 297

12.6.3 示例:Matrix Multiplication 299

12.7 命令式编程和Perl语言 300

12.7.1 一般特性 301

12.7.2 示例:Grep 302

12.7.3 示例:Mailing Grades 305

12.8 小结 308

12.9 练习 309

第13章 面向对象编程 311

13.1 抽象数据类型 311

13.2 对象模型 317

13.2.1 类 317

13.2.2 可见性和信息隐藏 320

13.2.3 继承 321

13.2.4 多重继承 325

13.2.5 多态 326

13.2.6 模板 327

13.2.7 抽象类 328

13.2.8 接口 329

13.2.9 虚拟方法表 331

13.2.10 运行时类型标识 333

13.2.11 反射 333

13.3 Smalltalk 334

13.3.1 一般特性 335

13.3.2 示例:多项式 338

13.3.3 示例:复数 340

13.3.4 示例:银行账户 342

13.4 Java 343

13.4.1 示例:符号微分 343

13.4.2 示例:回溯 346

13.5 PYTHON 350

13.5.1 一般特性 353

13.5.2 示例:多项式 354

13.5.3 示例:分数 356

13.6 小结 358

13.7 练习 359

第14章 函数式编程 363

14.1 函数和λ演算 364

14.2 Scheme语言 368

14.2.1 表达式 368

14.2.2 表达式求值 369

14.2.3 列表 370

14.2.4 元素值 372

14.2.5 控制流 373

14.2.6 定义函数 373

14.2.7 let表达式 376

14.2.8 示例:Clite语义 378

14.2.9 示例:符号微分 382

14.2.10 示例:八皇后问题 384

14.3 Haskell语言 388

14.3.1 简介 389

14.3.2 表达式 390

14.3.3 列表及其产生 391

14.3.4 基本类型和值 394

14.3.5 控制流 394

14.3.6 定义函数 395

14.3.7 元组 398

14.3.8 示例:Clite语义 399

14.3.9 示例:符号微分 402

14.3.10 示例:八皇后问题 404

14.4 小结 406

14.5 练习 406

第15章 逻辑式编程 411

15.1 逻辑和horn语句 412

15.2 Prolog语言中的逻辑式编程 415

15.2.1 Prolog程序元素 415

15.2.2 Prolog语言的实际应用 423

15.3 Prolog程序示例 427

15.3.1 符号微分法 427

15.3.2 猜字谜 429

15.3.3 自然语言处理 430

15.3.4 Clite的语义 434

15.3.5 八皇后的问题 437

15.4 小结 439

15.5 练习 440

第16章 事件驱动编程 443

16.1 事件驱动控制 444

16.1.1 模型-视图-控制器 445

16.1.2 Java中的事件 446

16.1.3 Java GUI应用程序 448

16.2 事件处理 450

16.2.1 单击鼠标 450

16.2.2 鼠标移动 451

16.2.3 按钮 452

16.2.4 标签、文本域和文本框 453

16.2.5 组合框 455

16.3 3个示例 456

16.3.1 简单的GUI接口 456

16.3.2 设计Java Applet 462

16.3.3 基于事件驱动的交互式游戏 464

16.4 其他事件-驱动应用程序 472

16.4.1 ATM自动取款机 472

16.4.2 家庭保安系统 473

16.5 小结 475

16.6 练习 475

第17章 并发编程 479

17.1 并发的概念 480

17.1.1 历史和定义 481

17.1.2 线程控制与通信 482

17.1.3 竞争和死锁 483

17.2 同步策略 485

17.2.1 信标 485

17.2.2 监视器 487

17.3 Java中的同步 489

17.3.1 Java线程 489

17.3.2 示例 491

17.4 进程间通信 500

17.4.1 IP地址、端口和套接字 501

17.4.2 一个客户/服务器示例 502

17.5 其他语言中的并发 508

17.6 小结 510

17.7 练习 510

第18章 程序的正确性 513

18.1 公理语义 514

18.1.1 基本概念 515

18.1.2 赋值规则 518

18.1.3 推理规则 518

18.1.4 Max函数的正确性 519

18.1.5 循环程序的正确性 520

18.1.6 形式化方法的观点 523

18.2 形式化方法工具:JML 525

18.3 面向对象程序的正确性 532

18.3.1 按照契约设计 532

18.3.2 类常量 533

18.3.3 示例:堆栈应用的正确性 535

18.3.4 总结 540

18.4 函数程序的正确性 541

18.4.1 递归与归纳 541

18.4.2 结构化归纳示例 542

18.5 小结 544

18.6 练习 545

附录A Clite的定义 549

A.1 Clite词汇和具体句法 549

A.2 Clite的抽象句法 550

A.3 Clite的类型系统 551

A.4 Clite的语义 552

A.5 Clite的加法函数 554

A.5.1 词汇以及具体语法 554

A.5.2 抽象句法 555

A.5.3 类型系统 555

A.5.4 语义 556

附录B 离散数学回顾 557

B.1 集合和关系 557

B.2 视图 561

B.3 逻辑 562

B.4 推理规则和直接证明 566

B.5 归纳证明 568