当前位置:当前位置:主页 > 计算机电子书 > > 程序设计 pdf电子书
程序设计语言原理(原书第12版)

程序设计语言原理(原书第12版) PDF 完整清晰版

  • 更新:2022-04-21
  • 大小:19.5 MB
  • 类别:程序设计
  • 作者:罗伯特
  • 出版:机械工业出版社
  • 格式:PDF

  • 资源介绍
  • 学习心得
  • 相关内容

程序设计语言原理(原书第12版)》是由机械工业出版社出版的一本关于程序设计方面的书籍,作者是罗伯特,主要介绍了关于程序设计、语言原理方面的知识内容,目前在程序设计类书籍综合评分为:8.7分。

书籍介绍

内容简介

本书从为什么学习程序设计语言、常用程序设计语言的演化史、评估程序设计语言结构的标准,以及这些语言基本的实现方法开始讲起,通过不局限于特定语言种类地分析语言结构的设计问题,检测设计选择,以及比较设计可选方案来讲述程序设计语言基本原理。

作者简介

罗伯特·W.塞巴斯塔(RobertW.Sebesta)科罗拉多大学斯普林斯分校计算机科学系荣休副教授,拥有40多年计算机科学课程教学经验,研究兴趣包括程序设计语言的设计和评估以及Web程序设计。

目录

  • 译者序
  • 第12版的变化
  • 前言
  • 致谢
  • 第1章预备知识1
  • 1.1掌握程序设计语言概念的必要性1
  • 1.2程序设计领域3
  • 1.2.1科学计算应用3
  • 1.2.2商业应用3
  • 1.2.3人工智能4
  • 1.2.4Web软件4
  • 1.3语言评价标准4
  • 1.3.1可读性5
  • 1.3.2可写性9
  • 1.3.3可靠性9
  • 1.3.4成本10
  • 1.4影响语言设计的因素11
  • 1.4.1计算机体系结构11
  • 1.4.2程序设计方法学13
  • 1.5程序设计语言分类14
  • 1.6语言设计中的权衡14
  • 1.7实现方法15
  • 1.7.1编译16
  • 1.7.2纯解释18
  • 1.7.3混合实现系统19
  • 1.7.4预处理程序19
  • 1.8程序设计环境20
  • 小结20
  • 复习题21
  • 习题21
  • 第2章主要程序设计语言发展简史23
  • 2.1Zuse研制的Plankalkül语言23
  • 2.1.1历史背景23
  • 2.1.2语言概述25
  • 2.2伪代码25
  • 2.2.1短码26
  • 2.2.2快码26
  • 2.2.3UNIVAC编译系统27
  • 2.2.4相关工作27
  • 2.3IBM704和Fortran27
  • 2.3.1历史背景27
  • 2.3.2设计过程28
  • 2.3.3FortranI概述28
  • 2.3.4FortranII29
  • 2.3.5FortranIV、77、90、95、2003和200829
  • 2.3.6评价30
  • 2.4函数式程序设计语言:LISP31
  • 2.4.1人工智能的开端和列表处理31
  • 2.4.2LISP的设计过程32
  • 2.4.3语言概述32
  • 2.4.4评价33
  • 2.4.5LISP的两种后继语言34
  • 2.4.6相关语言34
  • 2.5迈向成熟的步:ALGOL6035
  • 2.5.1历史背景35
  • 2.5.2早期设计过程35
  • 2.5.3ALGOL58概述36
  • 2.5.4ALGOL58报告的接受度37
  • 2.5.5ALGOL60的设计过程37
  • 2.5.6ALGOL60概述37
  • 2.5.7评价38
  • 2.6商业处理语言:COBOL39
  • 2.6.1历史背景39
  • 2.6.2FLOW-MATIC40
  • 2.6.3COBOL的设计过程40
  • 2.6.4评价40
  • 2.7分时处理的开始:Basic42
  • 2.7.1设计过程43
  • 2.7.2语言概述43
  • 2.7.3评价43
  • 2.8满足所有人的需求:PL/I46
  • 2.8.1历史背景47
  • 2.8.2设计过程47
  • 2.8.3语言概述48
  • 2.8.4评价48
  • 2.9两种早期的动态语言:APL和SNOBOL49
  • 2.9.1APL的起源及特征49
  • 2.9.2SNOBOL的起源和特征50
  • 2.10数据抽象的开端:SIMULA6750
  • 2.10.1设计过程50
  • 2.10.2语言概述50
  • 2.11正交设计:ALGOL6850
  • 2.11.1设计过程51
  • 2.11.2语言概述51
  • 2.11.3评价51
  • 2.12ALGOL系列语言的早期继承者52
  • 2.12.1简洁的设计:Pascal52
  • 2.12.2一个轻便的系统语言:C53
  • 2.13基于逻辑的程序设计:Prolog55
  • 2.13.1设计过程55
  • 2.13.2语言概述55
  • 2.13.3评价56
  • 2.14历史上规模的语言设计:Ada56
  • 2.14.1历史背景56
  • 2.14.2设计过程56
  • 2.14.3语言概述57
  • 2.14.4评价58
  • 2.14.5Ada95和Ada200558
  • 2.15面向对象程序设计:Smalltalk59
  • 2.15.1设计过程59
  • 2.15.2语言概述60
  • 2.15.3评价60
  • 2.16结合命令式和面向对象的特性:C61
  • 2.16.1设计过程61
  • 2.16.2语言概述62
  • 2.16.3评价62
  • 2.16.4Swift:Objective-C的替代品62
  • 2.16.5另一个相关语言:Delphi63
  • 2.17基于命令式的面向对象语言:Java63
  • 2.17.1设计过程63
  • 2.17.2语言概述64
  • 2.17.3评价65
  • 2.18脚本语言66
  • 2.18.1Perl的起源与特点66
  • 2.18.2JavaScript的起源与特点67
  • 2.18.3PHP的起源与特点69
  • 2.18.4Python的起源与特点69
  • 2.18.5Ruby的起源与特点70
  • 2.19.NET旗帜语言:C#70
  • 2.19.1设计过程70
  • 2.19.2语言概述71
  • 2.19.3评价71
  • 2.20混合标记程序设计语言72
  • 2.20.1XSLT72
  • 2.20.2JSP73
  • 小结74
  • 文献注记74
  • 复习题74
  • 习题76
  • 程序设计练习76
  • 第3章语法和语义描述77
  • 3.1概述77
  • 3.2语法描述的一般问题78
  • 3.2.1语言识别器78
  • 3.2.2语言生成器79
  • 3.3语法描述的形式化方法79
  • 3.3.1Backus-Naur范式与上下文无关文法79
  • 3.3.2扩展的BNF范式88
  • 3.3.3文法和识别器90
  • 3.4属性文法90
  • 3.4.1静态语义90
  • 3.4.2基本概念91
  • 3.4.3属性文法的定义91
  • 3.4.4内在属性91
  • 3.4.5属性文法示例91
  • 3.4.6计算属性值93
  • 3.4.7评价94
  • 3.5描述程序的含义:动态语义94
  • 3.5.1操作语义95
  • 3.5.2指称语义97
  • 3.5.3公理语义100
  • 小结110
  • 文献注记110
  • 复习题110
  • 习题111
  • 第4章词法和语法分析115
  • 4.1概述115
  • 4.2词法分析116
  • 4.3语法分析问题122
  • 4.3.1语法分析基础122
  • 4.3.2自顶向下的语法分析器123
  • 4.3.3自底向上的语法分析器124
  • 4.3.4语法分析的复杂度124
  • 4.4递归下降的语法分析124
  • 4.4.1递归下降的语法分析过程124
  • 4.4.2LL文法类129
  • 4.5自底向上的语法分析131
  • 4.5.1自底向上的语法分析器的语法分析问题131
  • 4.5.2移进-归约算法133
  • 4.5.3LR语法分析器133
  • 小结137
  • 复习题138
  • 习题138
  • 程序设计练习139
  • 第5章名字、绑定与作用域140
  • 5.1概述140
  • 5.2名字140
  • 5.2.1设计问题140
  • 5.2.2名字形式141
  • 5.2.3特殊单词141
  • 5.3变量142
  • 5.3.1名字142
  • 5.3.2地址142
  • 5.3.3类型143
  • 5.3.4值143
  • 5.4绑定的概念143
  • 5.4.1属性到变量的绑定144
  • 5.4.2绑定类型144
  • 5.4.3存储绑定和生存期147
  • 5.5作用域149
  • 5.5.1静态作用域149
  • 5.5.2分程序150
  • 5.5.3声明顺序153
  • 5.5.4全局作用域153
  • 5.5.5对静态作用域的评价156
  • 5.5.6动态作用域156
  • 5.5.7对动态作用域的评价157
  • 5.6作用域和生存期157
  • 5.7引用环境158
  • 5.8有名常量159
  • 小结161
  • 复习题161
  • 习题162
  • 程序设计练习165
  • 第6章数据类型167
  • 6.1概述167
  • 6.2基本数据类型168
  • 6.2.1数值类型168
  • 6.2.2布尔类型170
  • 6.2.3字符类型171
  • 6.3字符串类型171
  • 6.3.1设计问题171
  • 6.3.2字符串及其运算171
  • 6.3.3字符串长度选项173
  • 6.3.4评价173
  • 6.3.5字符串类型的实现174
  • 6.4枚举类型175
  • 6.4.1设计问题175
  • 6.4.2设计175
  • 6.4.3评价176
  • 6.5数组类型177
  • 6.5.1设计问题177
  • 6.5.2数组和索引178
  • 6.5.3下标绑定和数组的种类179
  • 6.5.4数组初始化180
  • 6.5.5数组运算181
  • 6.5.6矩阵数组和锯齿形数组182
  • 6.5.7切片182
  • 6.5.8评价183
  • 6.5.9数组类型的实现183
  • 6.6关联数组185
  • 6.6.1结构与运算185
  • 6.6.2关联数组的实现186
  • 6.7记录类型186
  • 6.7.1记录的定义187
  • 6.7.2记录中字段的引用187
  • 6.7.3评价188
  • 6.7.4记录类型的实现188
  • 6.8元组类型189
  • 6.9列表类型190
  • 6.10联合类型192
  • 6.10.1设计问题192
  • 6.10.2判别式与自由联合类型192
  • 6.10.3F#的联合类型193
  • 6.10.4评价193
  • 6.10.5联合类型的实现194
  • 6.11指针和引用类型194
  • 6.11.1设计问题194
  • 6.11.2指针运算194
  • 6.11.3指针的相关问题195
  • 6.11.4C和C中的指针196
  • 6.11.5引用类型198
  • 6.11.6评价199
  • 6.11.7指针和引用类型的实现199
  • 6.12可选类型203
  • 6.13类型检查203
  • 6.14强类型204
  • 6.15类型等价205
  • 6.16理论和数据类型208
  • 小结209
  • 文献注记210
  • 复习题210
  • 习题211
  • 程序设计练习212
  • 第7章表达式与赋值语句214
  • 7.1概述214
  • 7.2算术表达式214
  • 7.2.1运算符求值顺序215
  • 7.2.2运算分量求值顺序219
  • 7.3重载运算符221
  • 7.4类型转换222
  • 7.4.1表达式中的强制转换222
  • 7.4.2显式类型转换223
  • 7.4.3表达式错误224
  • 7.5关系表达式和布尔表达式224
  • 7.5.1关系表达式224
  • 7.5.2布尔表达式225
  • 7.6短路求值226
  • 7.7赋值语句227
  • 7.7.1简单赋值227
  • 7.7.2条件赋值227
  • 7.7.3复合赋值运算符227
  • 7.7.4一元赋值运算符228
  • 7.7.5赋值表达式229
  • 7.7.6多重赋值229
  • 7.7.7函数式程序设计语言中的赋值230
  • 7.8混合方式赋值230
  • 小结231
  • 复习题231
  • 习题232
  • 程序设计练习233
  • 第8章语句级控制结构234
  • 8.1概述234
  • 8.2选择语句235
  • 8.2.1二路选择语句235
  • 8.2.2多路选择语句238
  • 8.3重复语句244
  • 8.3.1计数控制循环245
  • 8.3.2逻辑控制循环248
  • 8.3.3用户定义的循环控制机制249
  • 8.3.4基于数据结构的迭代250
  • 8.4无条件分支253
  • 8.5保护命令254
  • 8.6结论256
  • 小结256
  • 复习题257
  • 习题257
  • 程序设计练习258
  • 第9章子程序260
  • 9.1概述260
  • 9.2子程序基础260
  • 9.2.1子程序的一般性质260
  • 9.2.2基本定义260
  • 9.2.3参数262
  • 9.2.4过程与函数265
  • 9.3子程序的设计问题265
  • 9.4局部引用环境266
  • 9.4.1局部变量266
  • 9.4.2嵌套子程序267
  • 9.5参数传递方法267
  • 9.5.1参数传递的语义模型268
  • 9.5.2参数传递的实现模型268
  • 9.5.3参数传递方法的实现272
  • 9.5.4常用语言的参数传递方法272
  • 9.5.5参数类型检查274
  • 9.5.6多维数组参数276
  • 9.5.7设计考量277
  • 9.5.8参数传递实例277
  • 9.6子程序作为参数280
  • 9.7子程序间接调用281
  • 9.8函数设计问题282
  • 9.8.1函数的副作用283
  • 9.8.2返回值类型283
  • 9.8.3返回值的个数283
  • 9.9重载子程序283
  • 9.10泛型子程序284
  • 9.10.1C泛型函数285
  • 9.10.2Java5.0泛型方法286
  • 9.10.3C#2005泛型方法287
  • 9.10.4F#泛型函数288
  • 9.11用户定义的重载运算符288
  • 9.12闭包289
  • 9.13协同程序290
  • 小结292
  • 复习题293
  • 习题294
  • 程序设计练习295
  • 第10章子程序实现297
  • 10.1调用和返回的一般语义297
  • 10.2“简单”子程序的实现297
  • 10.3具有栈动态局部变量的子程序实现299
  • 10.3.1更复杂的活动记录299
  • 10.3.2不含递归的例子301
  • 10.3.3递归302
  • 10.4嵌套子程序304
  • 10.4.1基础304
  • 10.4.2静态链305
  • 10.5分程序309
  • 10.6动态作用域的实现310
  • 10.6.1深层访问310
  • 10.6.2浅层访问311
  • 小结312
  • 复习题312
  • 习题313
  • 程序设计练习315
  • 第11章抽象数据类型与封装结构316
  • 11.1抽象的概念316
  • 11.2数据抽象简介317
  • 11.2.1浮点型抽象数据类型317
  • 11.2.2用户自定义抽象数据类型317
  • 11.2.3示例318
  • 11.3抽象数据类型的设计问题319
  • 11.4语言示例319
  • 11.4.1C中的抽象数据类型320
  • 11.4.2Java中的抽象数据类型325
  • 11.4.3C#中的抽象数据类型326
  • 11.4.4Ruby中的抽象数据类型327
  • 11.5参数化抽象数据类型330
  • 11.5.1C330
  • 11.5.2Java5.0331
  • 11.5.3C#2005333
  • 11.6封装结构333
  • 11.6.1概述334
  • 11.6.2C中的封装334
  • 11.6.3C中的封装334
  • 11.6.4C#程序集335
  • 11.7命名封装336
  • 11.7.1C命名空间336
  • 11.7.2Java包337
  • 11.7.3Ruby模块338
  • 小结338
  • 复习题339
  • 习题340
  • 程序设计练习340
  • 第12章面向对象程序设计支持342
  • 12.1概述342
  • 12.2面向对象程序设计342
  • 12.2.1引言342
  • 12.2.2继承343
  • 12.2.3动态绑定344
  • 12.3面向对象语言的设计问题346
  • 12.3.1对象的排他性346
  • 12.3.2子类是否为子类型346
  • 12.3.3单继承与多继承347
  • 12.3.4对象的分配和释放347
  • 12.3.5动态绑定与静态绑定348
  • 12.3.6嵌套类348
  • 12.3.7对象的初始化349
  • 12.4支持面向对象程序设计的特定语言349
  • 12.4.1Smalltalk349
  • 12.4.2C350
  • 12.4.3Java359
  • 12.4.4C#362
  • 12.4.5Ruby363
  • 12.5面向对象结构的实现366
  • 12.5.1存储示例数据366
  • 12.5.2方法调用与方法的动态绑定366
  • 12.6反射368
  • 12.6.1概述368
  • 12.6.2什么是反射368
  • 12.6.3Java中的反射369
  • 12.6.4C#中的反射371
  • 小结372
  • 复习题373
  • 习题375
  • 程序设计练习375
  • 第13章并发376
  • 13.1概述376
  • 13.1.1多处理器体系结构377
  • 13.1.2并发的分类378
  • 13.1.3使用并发的动机378
  • 13.2子程序级并发379
  • 13.2.1基本概念379
  • 13.2.2并发语言设计382
  • 13.2.3设计问题382
  • 13.3信号量382
  • 13.3.1概述382
  • 13.3.2合作同步383
  • 13.3.3竞争同步385
  • 13.3.4评价386
  • 13.4管程386
  • 13.4.1概述386
  • 13.4.2竞争同步386
  • 13.4.3合作同步386
  • 13.4.4评价387
  • 13.5消息传递387
  • 13.5.1概述387
  • 13.5.2同步消息传递的概念388
  • 13.6Ada并发支持388
  • 13.6.1基本概念388
  • 13.6.2合作同步391
  • 13.6.3竞争同步392
  • 13.6.4受保护对象393
  • 13.6.5评价394
  • 13.7Java线程394
  • 13.7.1线程类395
  • 13.7.2优先级397
  • 13.7.3信号量397
  • 13.7.4竞争同步397
  • 13.7.5合作同步398
  • 13.7.6非阻塞同步401
  • 13.7.7显式锁401
  • 13.7.8评价402
  • 13.8C#线程402
  • 13.8.1基本线程操作402
  • 13.8.2同步线程404
  • 13.8.3评价405
  • 13.9函数式语言中的并发405
  • 13.9.1Multi-LISP405
  • 13.9.2并发ML406
  • 13.9.3F#406
  • 13.10语句级并发407
  • 13.10.1高性能Fortran407
  • 小结409
  • 文献注记410
  • 复习题410
  • 习题411
  • 程序设计练习412
  • 第14章异常处理和事件处理413
  • 14.1异常处理概述413
  • 14.1.1基本概念414
  • 14.1.2设计问题415
  • 14.2C异常处理417
  • 14.2.1异常处理程序417
  • 14.2.2异常绑定到处理程序418
  • 14.2.3延续418
  • 14.2.4其他设计选择418
  • 14.2.5示例419
  • 14.2.6评价420
  • 14.3Java异常处理420
  • 14.3.1异常类别421
  • 14.3.2异常处理程序421
  • 14.3.3异常绑定到处理程序421
  • 14.3.4其他设计选择422
  • 14.3.5示例423
  • 14.3.6finally子句424
  • 14.3.7断言425
  • 14.3.8评价425
  • 14.4Python和Ruby的异常处理426
  • 14.4.1Python426
  • 14.4.2Ruby427
  • 14.5事件处理概述428

资源获取

相关资源

网友留言