第1章 入门知识 1
1.1 为什么研究程序设计语言的概念 1
1.2 程序设计领域 3
1.3 语言评价标准 5
1.4 对语言设计的影响 14
1.5 语言分类 16
1.6 语言设计权衡 17
1.7 实现方法 18
1.8 编程环境 22
小结 23
复习思考题 23
有关问题集 24
第2章 主要程序设计语言的发展之路 25
2.1 Zuse的Plankalkül 26
2.2 最小硬件程序设计:伪代码 28
2.3 IBM704和Fortran 29
2.4 函数式程序设计:LISP 34
2.5 向优化前进的第一步:ALGOL 60 38
2.6 计算机化的商业记录:COBOL 43
2.7 分时的起步:BASIC 47
人物访谈 50
2.8 面向全盘:PL/I 52
2.9 两种早期的动态语言:APL和SNOBOL 55
2.10 数据抽象的萌芽:SIMULA 67 56
2.11 正交设计:ALGOL 68 56
2.12 ALGOL之后的一些早期语言 58
2.13 基于逻辑的程序设计:Prolog 63
2.14 历史上付出最大设计投入的语言:Ada 64
2.15 面向对象程序设计:Smalltalk 68
2.16 结合命令式和面向对象的特性:C++ 71
2.17 基于命令式的面向对象语言:Java 73
2.18 面向Web的脚本语言:JavaScript和PHP 76
2.19 新千年的新语言:C# 79
小结 80
参考书目 80
复习思考题 81
有关问题集 82
第3章 描述语法和语义 84
3.1 引言 84
3.2 描述语法的一般问题 85
3.3 描述语法的形式化方法 86
3.4 属性文法 97
3.5 描述程序的含义:动态语义 102
小结 115
参考书目 116
复习思考题 116
有关问题集 117
第4章 词法和语法分析 120
4.1 引言 120
4.2 词法分析 121
4.3 解析问题 124
4.4 递归下行解析 126
4.5 自底向上解析 131
小结 136
复习思考题 137
有关问题集 138
程序设计练习 139
第5章 名、绑定、类型检查和作用域 140
5.1 引言 140
5.2 名 141
5.3 变量 143
5.4 绑定概念 145
人物访谈 148
5.5 类型检查 152
5.6 强类型 153
5.7 类型兼容性 154
5.8 作用域 156
5.9 作用域和生命期 163
5.10 引用环境 163
5.11 命名常量 165
5.12 变量初始化 166
小结 167
复习思考题 167
有关问题集 168
程序设计练习 173
第6章 数据类型 174
6.1 引言 174
6.2 基本数据类型 175
6.3 字符串类型 178
6.4 用户自定义序数类型 181
6.5 数组类型 184
6.6 关联数组 194
人物访谈 194
6.7 记录类型 197
6.8 联合类型 201
6.9 指针和引用类型 204
小结 213
参考书目 214
复习思考题 214
有关问题集 215
程序设计练习 216
第7章 表达式和赋值语句 217
7.1 引言 217
7.2 算术表达式 218
7.3 重载操作符 224
7.4 类型转换 225
7.5 关系和布尔表达式 228
7.6 短路计算 230
7.7 赋值语句 231
复习思考题 234
7.8 混合模式赋值 234
小结 234
有关问题集 235
程序设计练习 237
第8章 语句级控制结构 238
8.1 引言 238
8.2 选择语句 239
8.3 循环语句 246
人物访谈 253
8.4 无条件分支 256
8.5 卫哨命令 257
8.6 结论 260
小结 261
有关问题集 262
程序设计练习 262
复习思考题 262
第9章 子程序 265
9.1 引言 265
9.2 子程序基本知识 266
9.3 子程序的设计问题 270
9.4 局部引用环境 271
9.5 参数传递方法 272
人物访谈 277
9.6 子程序名作为参数 287
9.7 重载子程序 289
9.8 类属子程序 289
9.9 函数的设计问题 293
9.11 协同程序 294
9.10 用户自定义重载操作符 294
小结 297
复习思考题 297
有关问题集 298
程序设计练习 299
第10章 实现子程序 300
10.1 调用和返回的一般语义 300
10.2 实现“简单”子程序 301
10.3 实现有栈动态局部变量的子程序 303
10.4 嵌套子程序 308
人物访谈 309
10.5 块 315
10.6 实现动态作用域 317
小结 319
有关问题集 320
复习思考题 320
11.1 抽象的概念 323
第11章 抽象数据类型和封装构造 323
11.2 数据抽象引言 324
11.3 抽象数据类型的设计问题 326
11.4 语言示例 327
人物访谈 327
11.5 参数化抽象数据类型 337
11.6 封装构造 339
11.7 命名封装 342
小结 343
复习思考题 344
有关问题集 345
程序设计练习 345
12.1 引言 346
第12章 对面向对象程序设计的支持 346
12.2 面向对象程序设计 347
12.3 面向对象语言的设计问题 348
12.4 Smalltalk中对面向对象程序设计的支持 351
12.5 C++中对面向对象程序设计的支持 353
人物访谈 353
12.6 Java中对面向对象程序设计的支持 361
12.7 C#中对面向对象程序设计的支持 363
12.8 Ada 95中对面向对象程序设计的支持 364
12.9 JavaScript的对象模型 367
12.10 面向对象构造的实现 369
小结 372
复习思考题 373
程序设计练习 374
有关问题集 374
第13章 并发 375
13.1 引言 375
13.2 子程序级并发介绍 377
13.3 信号量 380
13.4 监视器 384
13.5 消息传递 388
13.6 Java线程 398
13.7 C#线程 404
13.8 语句级并发 405
小结 407
参考书目 407
复习思考题 408
程序设计练习 409
有关问题集 409
第14章 异常处理和事件处理 410
14.1 异常处理介绍 410
14.2 Ada中的异常处理 415
14.3 C++中的异常处理 420
14.4 Java中的异常处理 423
人物访谈 424
14.5 事件处理介绍 430
14.6 Java的事件处理 431
小结 437
参考书目 437
复习思考题 438
有关问题集 438
程序设计练习 440
15.1 引言 441
第15章 函数式程序设计语言 441
15.2 数学函数 442
15.3 函数式程序设计语言的基础知识 444
15.4 第一个函数式程序设计语言:LISP 444
15.5 Scheme介绍 447
15.6 COMMON LISP 459
15.7 ML 460
15.8 Haskell 462
15.9 函数式语言的应用 465
15.10 函数式和命令式语言的比较 466
小结 466
参考书目 467
复习思考题 467
有关问题集 467
程序设计练习 468
第16章 逻辑程序设计语言 470
16.1 引言 470
16.2 谓词算子的简要介绍 471
16.3 谓词算子和证明定理 473
16.4 逻辑程序设计概述 475
16.5 Prolog的起源 476
16.6 Prolog的基本元素 476
16.7 Prolog的缺陷 487
16.8 逻辑程序设计的应用 491
小结 492
参考书目 493
复习思考题 493
有关问题集 493
程序设计练习 494
参考文献 495