第1章 基本概念 1
1.1 学习程序设计语言原理的缘由 1
1.2 程序设计应用领域 3
1.3 语言评估标准 4
1.4 影响语言设计的因素 13
1.5 语言分类 15
1.6 语言设计中的权衡 16
1.7 实现方法 16
1.8 程序设计环境 21
小结*复习题*练习题 21
第2章 主要程序设计语言的发展 24
2.1 Zuse的Plankalkül语言 24
2.2 最小硬件的程序设计:伪代码 26
2.3 IBM704计算机与Fortran 28
2.4 函数式程序设计:LISP语言 32
2.5 迈向成熟的第一步:ALGOL60 36
2.6 商务记录计算机化:COBOL 41
2.7 分时操作的开始:BASIC 44
2.8 用途广泛的语言:PL/I 48
2.9 两种早期的动态语言:APL和SNOBOL 51
2.10 数据抽象的开始:SIMULA 67 52
2.11 正交性语言的设计:ALGOL 68 52
2.12 早期ALGOL系列语言的后代产品 54
2.13 基于逻辑的程序设计:Prolog 59
2.14 历史上规模最大的语言设计:Ada 60
2.15 面向对象的程序设计:Smalltalk 64
2.16 结合命令式与面向对象的特性:C++ 66
2.17 一种基于命令式的面向对象语言:Java 69
2.18 脚本语言:JavaScript、PHP及Python 71
2.19 一种基于C的新世纪语言:C# 74
2.20 标志与程序设计混合式语言 76
小结*文献注释*复习题*练习题 78
第3章 描述语法和语义 81
3.1 概述 81
3.2 描述语法的普遍问题 81
3.3 描述语法的形式方法 83
3.4 属性文法 92
3.5 描述程序的意义:动态语义 96
小结*文献注释*复习题*练习题 110
第4章 词法分析和语法分析 114
4.1 概述 114
4.2 词法分析 115
4.3 语法分析问题 118
4.4 递归下降语法分析 120
4.5 自底向上语法分析 125
小结*复习题*练习题*程序设计练习题 131
第5章 名字、绑定、类型检测和作用域 134
5.1 概述 134
5.2 名字 134
5.3 变量 136
5.4 绑定概念 138
5.5 类型检测 145
5.6 强类型化 145
5.7 类型兼容 147
5.8 作用域 149
5.9 作用域与生存期 154
5.10 引用环境 155
5.11 命名常量 156
小结*复习题*练习题*程序设计练习题 158
第6章 数据类型 164
6.1 概述 164
6.2 基本数据类型 165
6.3 字符串类型 167
6.4 用户定义的序数类型 170
6.5 数组类型 173
6.6 关联数组 182
6.7 记录类型 185
6.8 联合类型 188
6.9 指针类型与引用类型 191
小结*文献注释*复习题*练习题*程序设计练习题 200
第7章 表达式与赋值语句 204
7.1 概述 204
7.2 算术表达式 204
7.3 重载操作符 210
7.4 类型转换 212
7.5 关系表达式和布尔表达式 214
7.6 短路求值 215
7.7 赋值语句 217
7.8 混合模式赋值 219
小结*复习题*练习题*程序设计练习题 220
第8章 语句层次的控制结构 223
8.1 概述 223
8.2 选择语句 224
8.3 循环语句 230
8.4 无条件分支 240
8.5 守卫的命令 241
8.6 结论 243
小结*复习题*练习题*程序设计练习题 244
第9章 子程序 247
9.1 概述 247
9.2 子程序的基本原理 247
9.3 子程序的设计问题 251
9.4 局部引用环境 252
9.5 参数传递方法 253
9.6 子程序名作为参数 267
9.7 重载子程序 269
9.8 通用子程序 269
9.9 函数的设计问题 274
9.10 用户定义的重载操作符 275
9.11 协同程序 275
小结*复习题*练习题*程序设计练习题 277
第10章 实现子程序 281
10.1 调用与返回的一般语义 281
10.2 实现“简单”子程序 281
10.3 实现具有栈动态局部变量的子程序 283
10.4 嵌套子程序 287
10.5 块 293
10.6 实现动态作用域 294
小结*复习题*练习题 296
第11章 抽象数据类型和封装结构 300
11.1 抽象概念 300
11.2 数据抽象介绍 300
11.3 抽象数据类型的设计问题 302
11.4 语言示例 305
11.5 有参数的抽象数据类型 313
11.6 封装结构 315
11.7 命名封装 317
小结*复习题*练习题*程序设计练习题 320
第12章 支持面向对象的程序设计 323
12.1 概述 323
12.2 面向对象程序设计 323
12.3 面向对象语言的设计问题 325
12.4 Smalltalk对面向对象程序设计的支持 328
12.5 C++对面向对象程序设计的支持 330
12.6 Java对面向对象程序设计的支持 338
12.7 C#对面向对象程序设计的支持 340
12.8 Ada 95对面向对象程序设计的支持 341
12.9 JavaScript的对象模型 344
12.10 面向对象结构的实现 346
小结*复习题*练习题*程序设计练习题 349
第13章 并发 352
13.1 概述 352
13.2 子程序层次并发的介绍 354
13.3 信号量 357
13.4 管理 360
13.5 消息传递 362
13.6 Ada对并发的支持 362
13.7 Java线 371
13.8 C#线 376
13.9 语句层次的并发 378
小结*文献注释*复习题*练习题*程序设计练习题 379
第14章 异常处理 383
14.1 异常处理介绍 383
14.2 Ada中的异常处理 387
14.3 C++中的异常处理 392
14.4 Java中的异常处理 395
14.5 Java的事件处理 402
14.6 Java的事件处理 403
小结*文献注释*复习题*练习题 407
第15章 函数式程序设计语言 411
15.1 概述 411
15.2 数学函数 412
15.3 函数式程序设计语言的基础 413
15.4 第一种函数式程序设计语言:LISP 414
15.5 Scheme概述 416
15.6 COMMON LISP 428
15.7 ML 429
15.8 Haskell 431
15.9 函数式语言的应用 434
15.10 函数式语言和命令式语言的比较 434
小结*文献注释*复习题*练习题*程序设计练习题 435
第16章 逻辑程序设计语言 438
16.1 概述 438
16.2 谓词演算的简短介绍 438
16.3 谓词演算与定理证明 441
16.4 逻辑程序设计概述 442
16.5 Prolog的起源 443
16.6 Prolog的基本元素 444
16.7 Prolog的缺陷 454
16.8 逻辑程序设计的应用 458
小结*文献注释*复习题*练习题*程序设计练习题 460
参考文献 462
索引 471