第一章程 序设计语言的概念 1
1.1 程序设计语言 1
1.2 程序设计语言的抽象方法 4
1.3 计算的模式 11
1.4 语言的定义 17
1.5 语言的翻译 20
1.6 语言的设计 25
练习 26
第二章 语言设计的原理 30
2.1 语言的历史和设计标准 31
2.2 语言的有效性 33
2.3 语言的一般性、正交性和统一性 35
2.4 未来的语言设计原则 38
练习 42
第三章 句法 45
3.1 程序设计语言的词法结构 45
3.2 上下文无关语法和BNF 48
3.3 句法分析树和抽象句法树 52
3.4 二义性、结合性和优先性 55
3.5 EBNF和句法图 58
3.6 句法分析的技术和工具 63
3.7 语言的词法、句法和语义 74
练习 76
第四章 基本语义 80
4.1 属性、联编和语义函数 81
4.2 说明、块和范围 84
4.3 符号表 93
4.4 存储分配、扩展和环境 98
4.5 变量和常量 109
4.6 别名、挂靠引用和废物 114
4.7 表达式的求值 121
4.8 程序设计语言形式语义的简单介绍 127
练习 134
第五章 数据类型 144
5.1 数据类型和类型的信息 145
5.2 简单类型 148
5.3 类型的构造操作 149
5.4 类Pascal语言中的类型命名 160
5.5 类型等价 162
5.6 类型检查 166
5.7 类型转换 172
练习 176
第六章 控制结构 184
6.1 卫哨命令和条件选择 184
6.2 循环和WHILE的变形 191
6.3 GOTC的争论 196
6.4 过程和参数 199
6.5 过程的环境、活跃状态和存储分配 213
6.6 例外处理 227
练习 234
第七章 抽象数据类型 244
7.1 抽象数据类型的代数规格说明 246
7.2 Mo1ula-2的抽象数据类型 251
7.3 Ada的抽象数据类型 257
7.4 其他语言的抽象数据类型 261
7.5 重载和多态 264
7.6 模块和分块编译 272
7.7 抽象数据类型办法的存在问题 282
练习 288
第八章 面向对象程序设计语言 292
8.1 软件的重用性和独立性 293
8.2 对象、类和方法 296
8.3 继承 302
8.4 动态联编 310
8.5 C++ 314
8.6 Smalltalk 324
8.7 面向对象语言的设计问题 331
8.8 面向对象语言的实现问题 335
练习 340
第九章 函数程序设计 345
9.1 程序作为函数 345
9.2 过程语言的函数程序设计 349
9.3 Scheme:Lisp的一种本地语 355
9.4 延缓求值 371
9.5 函数程序设计的数学Ⅰ:递归函数 377
9.6 函数程序设计的数学Ⅱ:Lambda演算 380
9.7 函数语言的动态存储管理 387
练习 392
第十章 逻辑程序设计 399
10.1 逻辑和逻辑程序 400
10.2 Horn子句 404
10.3 归结和合一 408
10.4 Prolog语言 412
10.5 逻辑程序设计存在的问题 425
10.6 逻辑程序设计的扩展:等式系统 430
练习 433
第十一章 并行程序设计 438
11.1 并行处理的介绍 439
11.2 并行处理和程序设计语言 443
11.3 伪并行化方法和协同例程 451
11.4 信号量 457
11.5 管程 464
11.6 消息传递 468
11.7 非过程语言的并行方法 476
练习 483
参考文献 491