第一部分 概念 1
第1章 程序语言的学习 1
1.1 为什么要学习程序设计语言 1
1.2 程序语言简史 3
1.2.1 早期语言的发展历史 3
1.2.2 程序语言的地位 6
1.3 程序设计语言的要素 7
1.3.1 良好语言的特征 7
1.3.2 应用领域 11
1.3.3 语言标准 13
1.4 环境对语言的影响 16
1.4.1 批处理环境 16
1.4.2 交互式环境 17
1.4.3 嵌入式系统环境 17
1.4.4 编程环境 18
1.4.5 环境框架 20
1.5 参考资料 21
1.6 习题 21
第2章 语言的设计 23
2.1 计算机的结构和操作 23
2.1.1 计算机硬件结构 23
2.1.2 固件计算机 27
2.1.3 翻译器和软件模拟计算机 28
2.2 虚拟计算机和约束时间 30
2.2.1 语法和语义 31
2.2.2 虚拟计算机和语言实现 32
2.2.3 计算机的层次 32
2.2.4 约束和约束时间 34
2.3 语言范例 37
2.4 参考资料 40
2.5 习题 40
3.1.1 通用的语法标准 42
3.1 编程语言的文法 42
第3章 语言的翻译 42
3.1.2 语言的语法要素 45
3.1.3 主程序-子程序结构 47
3.2 翻译的步骤 50
3.2.1 源程序的分析 51
3.2.2 目标程序的综合 53
3.3. 形式编译模式 55
3.3.1 BNF文法 56
3.3.2 有限状态自动机 62
3.3.3 下推自动机 66
3.3.4 有效的语法分析算法 67
3.3.5 语义模型 70
3.4 参考资料 73
3.5 习题 73
4.1 类型和对象的性质 76
4.1.1 数据对象、变量和常量 76
第4章 数据类型 76
4.1.2 数据类型 79
4.1.3 基本数据类型的表示 80
4.1.4 基本数据类型的实现 82
4.1.5 说明 83
4.1.6 类型检查和类型转换 84
4.1.7 赋值和初始化 88
4.2.1 数字数据类型 90
4.2 基本数据类型 90
4.2.2 枚举类型 95
4.2.3 布尔类型 96
4.2.4 字符型 97
4.2.5 国际化 97
4.3 结构数据类型 98
4.3.1 结构化数据对象和类型 98
4.3.2 数据结构类型的说明 99
4.3.3 数据结构类型的实现 100
4.3.4 数据结构的说明和类型检查 103
4.3.5 向量和数组 104
4.3.6 记录 111
4.3.7 表 116
4.3.8 字符串 120
4.3.9 指针及程序员构造的数据对象 122
4.3.10 集合 124
4.3.11 可执行的数据对象 125
4.3.12 文件及其输入/输出 126
4.4 参考资料 130
4.5 习题 130
第5章 抽象I:封装 135
5.1 抽象的数据类型 136
5.1.1 数据类型的概念和发展 136
5.1.2 信息隐藏 137
5.2 子程序实现的封装 138
5.2.1 作为抽象操作的子程序 139
5.2.2 子程序的定义和调用 140
5.2.3 作为数据对象的子程序定义 145
5.3 类型定义 145
5.3.1 类型相同 147
5.3.2 带有参数的类型定义 150
5.4 存储管理 152
5.4.1 运行时需要存储的主要元素 152
5.4.2 程序员和系统控制的存储管理 154
5.4.3 静态的存储管理 155
5.4.4 基于堆栈的存储管理 155
5.4.5 堆存储管理:固定大小单元 157
5.4.6 堆存储管理:可变长的单元 162
5.5 参考资料 165
5.6 习题 166
6.1 隐含的顺序控制和明确的顺序控制 169
6.2 数学表达式的定序 169
第6章 顺序控制 169
6.2.1 树结构表示法 170
6.2.2 执行时表示法 176
6.3 非数学表达式的定序 180
6.3.1 模式配对 180
6.3.2 合一 183
6.3.3 回溯 187
6.4 语句之间的顺序控制 188
6.4.1 基本语句 188
6.4.2 结构化的顺序控制 192
6.4.3 基本程序 199
6.5 参考资料 202
6.6 习题 203
第7章 子程序控制 205
7.1 子程序顺序控制 205
7.1.1 简单的Call-Return子程序 206
7.1.2 递归子程序 209
7.2 数据控制的属性 210
7.2.1 命名和引用环境 211
7.2.2 静态和动态作用域 215
7.2.3 块结构 217
7.2.4 局部数据和局部引用环境 218
7.3 子程序中的共享数据 222
7.3.1 参数和参数传递 223
7.3.2 显式共同环境 235
7.3.3 动态域 237
7.3.4 静态域和块结构 239
7.4 参考资料 245
7.5 习题 245
第8章 抽象Ⅱ:继承 250
8.1 再论抽象数据类型 250
8.2 继承 256
8.2.1 派生类 257
8.2.2 方法 259
8.2.3 抽象类 261
8.2.4 对象和消息 262
8.2.5 有关抽象的概念 265
8.3 多态性 266
8.4 参考资料 268
8.5 习题 268
第9章 语言设计进展 270
9.1 子程序控制的变体 271
9.1.1 异常和异常处理程序 271
9.1.2 协同程序 275
9.1.3 子程序调度 276
9.1.4 非顺序执行 277
9.2 并行程序设计 277
9.2.1 并发运行 278
9.2.2 卫式语句 279
9.2.3 任务 281
9.2.4 任务的同步 283
9.3 语言的形式性质 291
9.3.1 Chomsky层次文法 292
9.3.2 不可判定性 294
9.3.3 算法复杂性 298
9.4 语言的语义 300
9.4.1 指称语义 300
9.4.2 程序验证 306
9.4.3 代数数据类型 309
9.4.4 消解 312
9.5 硬件 313
9.5.1 处理器设计 314
9.5.2 系统设计 316
9.6 软件的体系结构 317
9.6.1 持久性数据和事务系统 318
9.6.2 网终和客户机/服务器计算 318
9.6.3 桌面排版 320
9.6.4 程序设计语言的发展趋势 321
9.8 习题 322
9.7 参考资料 322
第二部分 范例和语言 326
第10章 简单过程式程序设计语言 326
10.1 FORTRAN 326
10.1.1 发展历史 327
10.1.2 程序举例 327
10.1.3 语言概述 327
10.1.4 数据对象 330
10.1.5 顺序控制 334
10.1.6 子程序和存储管理 339
10.1.7 抽象与封装 341
10.1.8 对该语言的评价 341
10.2.1 发展历史 342
10.2.2 程序举例 342
10.2 C 342
10.2.3 语言概述 343
10.2.4 数据对象 346
10.2.5 顺序控制 350
10.2.6 子程序和存储管理 353
10.2.7 抽象与封装 355
10.2.8 对该语言的评价 355
10.4 习题 356
10.3 参考资料 356
第11章 块结构过程式程序设计语言 358
11.1 PASCAL 358
11.1.1 发展历史 358
11.1.2 程序举例 359
11.1.3 语言概述 359
11.1.4 数据对象 362
11.1.5 顺序控制 366
11.1.6 子程序和存储管理 368
11.1.8 对该语言的评价 373
11.1.7 抽象与封装 373
11.2 参考资料 374
11.3 习题 374
第12章 基于对象的语言 376
12.1 ADA 376
12.1.1 发展历史 376
12.1.2 程序举例 377
12.1.3 语言概述 378
12.1.4 数据对象 381
12.1.5 顺序控制 388
12.1.6 子程序和存储管理 391
12.1.7 抽象与封装 396
12.1.8 对该语言的评价 398
12.2 C++ 398
12.2.1 发展历史 398
12.2.3 语言概述 399
12.2.2 程序举例 399
12.2.4 数据对象 403
12.2.5 顺序控制 407
12.2.6 子程序和存储管理 408
12.2.7 抽象与封装 410
12.2.8 对该语言的评价 410
12.3.3 语言概述 411
12.3.2 程序举例 411
12.3.1 发展历史 411
12.3 Smalltalk 411
12.3.4 数据对象 414
12.3.5 顺序控制 415
12.3.6 子程序和存储管理 417
12.3.7 抽象与封装 420
12.3.8 对该语言的评价 420
12.4 参考资料 421
12.5 习题 421
13.1.1 发展历史 423
第13章 函数式程序设计语言 423
13.1 LISP 423
13.1.2 程序举例 424
13.1.3 语言概述 424
13.1.4 数据对象 427
13.1.5 顺序控制 428
13.1.6 子程序和存储管理 431
13.1.7 抽象与封装 435
13.1.8 对该语言的评价 435
13.2 ML 435
13.2.1 发展历史 435
13.2.2 程序举例 435
13.2.3 语言概述 436
13.2.4 数据对象 438
13.2.5 顺序控制 441
13.2.6 子程序和存储管理 443
13.2.7 抽象与封装 445
13.2.8 对该语言的评价 447
13.3 参考资料 447
13.4 习题 448
第14章 逻辑式程序设计语言 450
14.1 Prolog 450
14.1.1 发展历史 450
14.1.2 程序举例 451
14.1.3 语言概述 451
14.1.4 数据类型 453
14.1.5 顺序控制 454
14.1.6 子程序和存储管理 456
14.1.7 抽象与封装 457
14.1.8 对该语言的评价 457
14.2 参考资料 457
14.3 习题 457
参考文献 459