图书介绍
程序设计语言 概念和结构 原书第2版2025|PDF|Epub|mobi|kindle电子书版本百度云盘下载

- (美)Ravi Sethi著;裘宗燕等译 著
- 出版社: 北京:机械工业出版社
- ISBN:711109431X
- 出版时间:2002
- 标注页数:467页
- 文件大小:26MB
- 文件页数:491页
- 主题词:程序理论
PDF下载
下载说明
程序设计语言 概念和结构 原书第2版PDF格式电子书版下载
下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!
(文件页数 要大于 标注页数,上中下等多册电子书除外)
注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具
图书目录
第一部分 引言2
第1章 程序设计语言的位置2
1.1 走向高级语言2
1.1.1 机器语言是晦涩难懂的3
1.1.2 汇编语言是低级的3
1.1.3 高级语言的优点5
1.2 规模的问题6
1.2.1 人的错误因素6
1.2.2 程序设计语言扮演的角色7
1.3 程序设计范型7
1.3.1 命令式程序设计8
1.3.2 函数式程序设计9
1.3.3 面向对象的程序设计11
1.3.4 逻辑程序设计12
1.3.5 语言的选择12
1.4 语言实现:在裂谷上架桥12
1.4.1 编译13
1.4.2 解释14
1.4.3 编译器和解释器:对比15
练习15
引文注记16
第2章 语言的描述:语法结构18
2.1 表达式的记法20
2.1.1 前缀记法20
2.1.2 后缀记法21
2.1.3 中缀记法:优先级和结合性21
2.1.4 混合记法22
2.2 抽象语法树22
2.3 词语法24
2.4 上下文无关文法25
2.4.1 文法介绍25
2.4.2 上下文无关文法的定义26
2.4.3 BNF:Backus-Naur范式26
2.4.4 语法分析树描绘了具体语法27
2.4.5 语法的歧义性28
2.4.6 悬空的else的歧义性28
2.4.7 导出29
2.5 表达式的文法30
2.5.1 中缀表达式中的表列30
2.5.2 从抽象语法到具体语法31
2.6 文法的各种变形33
2.6.1 扩充的BNF33
2.6.2 语法图35
练习35
引文注记38
第二部分 命令式程序设计41
第3章 语句:结构化程序设计41
3.1 结构化程序设计的必要性41
3.1.1 静态程序和动态计算41
3.1.2 命令式语言的设计原则42
3.1.3 一个例子42
3.1.4 不变式:程序设计43
3.2 语法制导的控制流44
3.2.1 语句的复合44
3.2.2 选择:条件语句45
3.2.3 循环结构:while和repeat46
3.2.4 定性迭代:for循环48
3.2.5 选择:case语句48
3.2.6 case语句的实现49
3.3 设计考虑:语法50
3.3.1 序列:分隔符和终止符50
3.3.2 避免悬空的else52
3.4 处理循环中的特殊情况53
3.4.1 循环中的break和continue语句54
3.4.2 return语句56
3.4.3 goto语句56
3.5 使用不变式做程序设计56
3.5.1 前条件和后条件57
3.5.2 实例:线性搜索58
3.6 部分正确性的证明规则60
3.6.1 断言和公式61
3.6.2 复合语句的证明规则61
3.6.3 条件语句的证明规则62
3.6.4 有关while语句的规则62
3.6.5 关于赋值的规则62
3.6.6 化简规则63
3.6.7 Pascal中的语句63
3.7 C语言的控制流63
3.7.1 赋值运算符64
3.7.2 表达式里的赋值65
3.7.3 C语言的for循环:非定性迭代65
3.7.4 循环中的break和continue语句66
练习66
引文注记70
第4章 类型:数据表示72
4.1 类型的作用72
4.1.1 值和它们的类型73
4.1.2 类型表达式73
4.1.3 本章中的类型73
4.1.4 静态布局决策74
4.1.5 有关类型名、数组和记录的预览75
4.2 基本类型76
4.2.1 枚举76
4.2.2 整型和实型77
4.2.3 布尔表达式的短路求值77
4.2.4 子域78
4.2.5 基本类型的布局78
4.2.6 程序设计的风格:字符和类型转换78
4.3 数组:元素的序列79
4.3.1 数组类型79
4.3.2 数组的布局81
4.3.3 数组边界和存储分配82
4.3.4 数组的值和初始化83
4.4 记录:命名的域84
4.4.1 记录类型有一组特定的域84
4.4.2 变量声明分配存储空间84
4.4.3 对记录的操作84
4.4.4 数组和记录的比较85
4.5 联合和变体记录85
4.5.1 变体记录的布局86
4.5.2 变体记录损害类型安全87
4.6 集合88
4.6.1 集合的值88
4.6.2 集合类型88
4.6.3 集合类型的实现88
4.6.4 集合的运算88
4.7 指针:效率和动态存储分配89
4.7.1 指针类型90
4.7.2 指针操作90
4.7.3 数据结构的增长和缩减90
4.7.4 悬空指针和存储流失91
4.7.5 指针作为代理92
4.8 两种字符串列表95
4.8.1 pascal的一种表示95
4.8.2 C语言的一种表示96
4.9 类型和错误检查97
4.9.1 变量约束:变量的类型98
4.9.2 类型系统:表达式的类型98
4.9.3 类型检查的基本规则99
4.9.4 类型名和类型等价99
4.9.5 静态和动态类型检查101
练习102
引文注记104
第5章 过程活动105
5.1 对过程的介绍106
5.1.1 过程调用106
5.1.2 过程的要素106
5.1.3 递归:过程的多个活动109
5.1.4 过程的价值109
5.2 参数传递方式110
5.2.1 值调用110
5.2.2 引用调用111
5.2.3 值结果调用113
5.3 名字的作用域规则114
5.3.1 词法作用域和动态作用域114
5.3.2 词法作用域与局部变量的重命名115
5.3.3 宏展开与动态作用域116
5.3.4 按名调用与词法作用域117
5.4 源文本中的嵌套作用域118
5.4.1 声明的作用域118
5.4.2 嵌套作用域:C中的变量声明119
5.4.3 嵌套作用域:Pascal中的过程声明121
5.5 活动记录122
5.5.1 活动间的控制流122
5.5.2 活动记录的元素124
5.5.3 堆存储分配和释放127
5.5.4 堆栈分配和释放127
5.5.5 在编译时分配静态变量128
5.6 词法作用域:在C中的过程128
5.6.1 C程序的存储布局129
5.6.2 局部变量的存储129
5.6.3 C的过程调用和返回130
5.6.4 运行时的变量访问131
5.6.5 过程作为参数131
5.6.6 悬空指针132
5.6.7 尾递归消除132
5.7 词法作用域:嵌套过程和pascal135
5.7.1 可见性规则135
5.7.2 访问非局部变量:控制链和访问链136
5.7.3 过程的调用和返回138
5.7.4 过程作为参数139
5.7.5 用于快速访问的区头向量139
练习141
引文注记143
第三部分 面向对象程序设计147
第6章 数据和操作147
6.1 程序构造的结构147
6.1.1 过程:提高计算的层次148
6.1.2 程序静态文本的模块划分149
6.1.3 用户定义数据类型150
6.1.4 几种方法的比较151
6.2 信息隐藏152
6.2.1 动机:区分行为与实现152
6.2.2 数据不变式154
6.2.3 数据的可见性154
6.2.4 实现的隐藏和程序开发154
6.3 使用模块设计程序155
6.3.1 表达式求值程序的设计155
6.3.2 程序组织157
6.3.3 讨论:程序组织161
6.4 模块和用户定义类型161
6.4.1 导出名字和导入名字161
6.4.2 导出类型162
6.5 C++的类声明164
6.5.1 类声明中的数据和操作164
6.5.2 将类名作为定义的类型使用166
6.5.3 公用、私用和保护成员167
6.6 C++的动态存储分配168
6.6.1 指向对象的指针168
6.6.2 用建构函数和析构函数进行动态存储分配169
6.6.3 链表的单元169
6.7 模板:参数化类型172
6.8 C++对象的实现173
6.8.1 一个简单实现173
6.8.2 函数体的在线展开174
6.8.3 类声明中的私用变量174
练习175
引文注记178
第7章 面向对象程序设计179
7.1 什么是对象179
7.1.1 对象的外部和内部视图179
7.1.2 形状的属性180
7.2 面向对象的思想181
7.2.1 将对象组织为类层次结构181
7.2.2 对象响应消息,对象具有状态182
7.3 继承184
7.3.1 接收者决定一个消息的含义185
7.3.2 信息隐藏是为了可扩充性186
7.3.3 添加子类187
7.3.4 对象和类189
7.4 用C++语言做面向对象的程序设计189
7.4.1 C++语言回顾189
7.4.2 基类和派生类190
7.4.3 公用基类190
7.4.4 虚函数191
7.4.5 C++中形状实例的细节193
7.4.6 初始化和继承194
7.5 一个扩充的C++例子194
7.5.1 素数筛194
7.5.2 基类196
7.5.3 派生类196
7.5.4 基类和派生类的初始化196
7.5.5 子类型和超类型197
7.5.6 虚函数198
7.5.7 生成过滤器对象199
7.5.8 剩余的程序199
7.6 派生类和信息隐藏199
7.6.1 公用和私用的基类200
7.6.2 私用性原理200
7.6.3 继承成员的可访问性201
7.7 Smalltalk中的对象202
7.7.1 系统类202
7.7.2 类定义中的元素203
7.7.3 消息语法205
7.8 Smalltalk对象的self207
7.8.1 发送给self的消息208
7.8.2 发送给super的消息208
练习209
引文注记212
第四部分 函数式程序设计215
第8章 函数式程序设计的要素215
8.1 一个很小的表达式语言215
8.1.1 Little Quilt操作什么215
8.1.2 为方便而做的扩充217
8.1.3 评论:Little Quilt的设计219
8.2 类型:值和运算220
8.2.1 构造和检查值的操作221
8.2.2 基本类型221
8.2.3 类型的积221
8.2.4 ML中的类型223
8.3 函数声明224
8.3.1 函数作为算法225
8.3.2 函数声明和应用的语法225
8.3.3 递归函数226
8.4 表达式的求值方式226
8.4.1 最内求值227
8.4.2 选择性求值227
8.4.3 递归函数的求值228
8.4.4 从左到右的最外求值228
8.4.5 短路求值230
8.5 词法作用域231
8.5.1 val约束231
8.5.2 fun约束232
8.5.3 嵌套的约束233
8.5.4 同时约束233
8.6 类型检查234
8.6.1 类型推理234
8.6.2 类型名和类型等价235
8.6.3 重载:多重含义235
8.6.4 强制:隐式类型转换236
8.6.5 多态性:参数化类型236
练习237
引文注记240
第9章 一个有类型语言中的函数式程序设计241
9.1 表的探查241
9.1.1 表上的运算242
9.1.2 定义在表上的两个函数:append和reverse242
9.2 函数的分情况声明244
9.2.1 函数应用245
9.2.2 模式246
9.2.3 模式和情况分析246
9.3 函数作为一级的值248
9.3.1 将函数映射到表的各个元素上249
9.3.2 匿名函数251
9.3.3 选择性复制251
9.3.4 积累结果252
9.4 ML:隐含类型253
9.4.1 类型推理253
9.4.2 参数化多态性254
9.5 数据类型254
9.5.1 值构造符255
9.5.2 微分:一个传统实例257
9.5.3 多态数据类型258
9.5.4 讨论259
9.6 ML的异常处理259
9.7 在Standard ML中实现Little Quilt261
9.7.1 一些辅助函数262
9.7.2 拼块的表示263
9.7.3 sew运算263
9.7.4 turn运算264
9.7.5 拼块的显示266
9.7.6 Little Quilt中的表达式267
练习269
引文注记271
第10章 表的函数式程序设计272
10.1 Scheme,一种Lisp方言272
10.1.1 为什么用Scheme273
10.1.2 如何与Scheme解释器交互273
10.1.3 怎样写表达式274
10.1.4 怎样定义函数275
10.1.5 匿名函数值275
10.1.6 条件式275
10.1.7 let结构276
10.1.8 引号277
10.2 表的结构278
10.2.1 表元素278
10.2.2 表的运算279
10.3 表的操作280
10.3.1 一个有用的函数281
10.3.2 连接两个表281
10.3.3 将函数映射到表的所有元素上282
10.3.4 关联表283
10.3.5 子表达式的表284
10.3.6 一个参数化的函数285
10.4 启发性的实例:微分286
10.4.1 语法制导的微分286
10.4.2 常量287
10.4.3 变量287
10.4.4 对和式与乘积的微分规则287
10.4.5 和式的微分287
10.4.6 乘积的微分289
10.4.7 对微分程序的总结289
10.5 表达式化简290
10.6 表的存储管理292
10.6.1 cons分配单元293
10.6.2 相等的概念293
10.6.3 分配和释放295
练习296
引文注记298
第五部分 其他范型300
第11章 逻辑式程序设计300
11.1 用关系做计算301
11.1.1 关系301
11.1.2 规则和事实301
11.1.3 查询302
11.2 Prolog初步304
11.2.1 项304
11.2.2 与Prolog交互305
11.2.3 存在性查询305
11.2.4 全称性的事实和规则306
11.2.5 否定作为失败307
11.2.6 合一308
11.2.7 算术309
11.3 Prolog的数据结构309
11.3.1 Prolog中的表309
11.3.2 项作为数据310
11.4 程序设计技术312
11.4.1 猜测和验证312
11.4.2 用变量作为项里的占位符314
11.4.3 差表317
11.5 Prolog的控制318
11.5.1 合一和替换319
11.5.2 将规则应用于目标320
11.5.3 Prolog搜索树322
11.5.4 目标的顺序将改变解323
11.5.5 规则顺序影响对解的搜索324
11.5.6 出现检查问题326
11.6 割326
11.6.1 割作为第一个条件327
11.6.2 割的作用328
11.6.3 应用割的程序设计329
11.6.4 否定等同于失败332
练习333
引文注记334
第12章 并发程序设计导引336
12.1 硬件的并行性336
12.1.1 输入/输出的并行执行336
12.1.2 中断和分时337
12.1.3 多处理器组织结构338
12.1.4 反应式系统338
12.2 流:隐式的同步338
12.2.1 进程网络339
12.2.2 管道实例339
12.3 作为交错的并发性340
12.3.1 线程的交错341
12.3.2 Ada中的并发作业341
12.4 进程的活性性质343
12.4.1 资源共享限制并发性343
12.4.2 哲学家就餐问题343
12.4.3 死锁:无法继续344
12.4.4 活锁:没有进程能够取得进展344
12.4.5 公平性344
12.4.6 避免死锁的发生345
12.5 共享数据的安全访问345
12.5.1 “非确定”的进程345
12.5.2 临界区和互斥346
12.5.3 可串行化与安全性347
12.6 Ada中的并发性348
12.6.1 握手式同步348
12.6.2 同步通信349
12.6.3 有选择的接收352
12.7 共享变量的同步访问353
12.7.1 对缓冲区的直接访问353
12.7.2 信号量:互斥355
练习359
引文注记362
第六部分 语言的描述366
第13章 语义方法366
13.1 综合属性368
13.1.1 求值顺序369
13.1.2 总结369
13.2 属性文法370
13.3 自然语义372
13.3.1 一个计算器372
13.3.2 环境为名字约束值373
13.3.3 let约束373
13.3.4 基于Prolog的实现375
13.4 指称语义376
13.5 一个Scheme计算器377
13.6 词法作用域中的lambda表达式378
13.6.1 lambda表达式的自然语义379
13.6.2 环境的一种实现380
13.7 一个解释器381
13.7.1 常量381
13.7.2 加引号项381
13.7.3 变量382
13.7.4 条件表达式382
13.7.5 let表达式382
13.7.6 lambda表达式383
13.7.7 函数应用384
13.7.8 初始化环境384
13.7.9 解释器的使用385
13.8 一个扩充:递归函数386
13.8.1 作为值的递归函数387
13.8.2 对解释器的修改387
练习388
引文注记389
第14章 静态类型和Lambda演算390
14.1 纯lambda演算中的相等391
14.1.1 语法约定392
14.1.2 自由变量和约束变量392
14.1.3 替换393
14.1.4 beta-相等394
14.2 再论替换395
14.3 纯lambda项的计算396
14.3.1 归约397
14.3.2 不终止的归约398
14.3.3 Church-Rosser定理398
14.3.4 计算规则399
14.4 作为lambda项的程序设计结构400
14.4.1 一个应用lambda演算400
14.4.2 Curry化401
14.4.3 常量的归约规则401
14.4.4 语言MLO402
14.4.5 不动点算子403
14.5 带类型的lambda演算404
14.6 多态类型406
14.6.1 取自标准ML的例子406
14.6.2 显式的多态性407
14.6.3 单态与多态408
14.6.4 Core-XML的类型规则409
练习411
引文注记412
第15章 语言概览414
15.1 Pascal:一种教学语言414
15.1.1 Pascal的程序结构415
15.1.2 声明415
15.1.3 类型416
15.1.4 表达式416
15.1.5 语句416
15.2 C:系统程序设计417
15.2.1 C语言程序结构417
15.2.2 C的函数418
15.2.3 C的变量声明419
15.2.4 表达式419
15.2.5 C的控制流420
15.2.6 指针和数组420
15.2.7 头文件421
15.2.8 标准输入/输出422
15.3 C++:多种程序设计风格422
15.3.1 C++中的类422
15.3.2 C++的继承424
15.4 Smalltalk语言424
15.4.1 表达式426
15.4.2 类和实例方法426
15.4.3 系统类427
15.5 Standard ML428
15.5.1 与ML解释器交互428
15.5.2 基于模式匹配的函数定义430
15.5.3 数据类型430
15.5.4 异常430
15.6 Scheme:一种Lisp方言431
15.6.1 基本结构432
15.6.2 表操作433
15.7 Prolog434
15.7.1 项435
15.7.2 与Prolog交互436
15.7.3 规则436
15.7.4 查询436
15.7.5 算术436
15.7.6 作为数据的项437
参考文献438
索引450
热门推荐
- 3864056.html
- 3026473.html
- 3137460.html
- 2174230.html
- 2123842.html
- 3909390.html
- 550176.html
- 3548001.html
- 1982996.html
- 1688272.html
- http://www.ickdjs.cc/book_3075357.html
- http://www.ickdjs.cc/book_3317930.html
- http://www.ickdjs.cc/book_533437.html
- http://www.ickdjs.cc/book_3648838.html
- http://www.ickdjs.cc/book_2647024.html
- http://www.ickdjs.cc/book_1161077.html
- http://www.ickdjs.cc/book_2790640.html
- http://www.ickdjs.cc/book_739636.html
- http://www.ickdjs.cc/book_3507683.html
- http://www.ickdjs.cc/book_1772343.html