图书介绍

编程语言原理 第10版PDF|Epub|txt|kindle电子书版本网盘下载

编程语言原理 第10版
  • (美)塞巴斯塔著 著
  • 出版社: 北京:清华大学出版社
  • ISBN:9787302311126
  • 出版时间:2013
  • 标注页数:633页
  • 文件大小:178MB
  • 文件页数:652页
  • 主题词:程序语言

PDF下载


点此进入-本书在线PDF格式电子书下载【推荐-云解压-方便快捷】直接下载PDF格式图书。移动端-PC端通用
种子下载[BT下载速度快]温馨提示:(请使用BT下载软件FDM进行下载)软件下载地址页直链下载[便捷但速度慢]  [在线试读本书]   [在线获取解压码]

下载说明

编程语言原理 第10版PDF格式电子书版下载

下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。

建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!

(文件页数 要大于 标注页数,上中下等多册电子书除外)

注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具

图书目录

第1章 预备知识1

1.1学习程序设计语言原理的原因2

1.2程序设计领域4

1.2.1科学应用4

1.2.2商务应用4

1.2.3人工智能5

1.2.4系统程序设计5

1.2.5网络软件5

1.3语言评价标准6

1.3.1可读性6

1.3.2可写性10

1.3.3可靠性11

1.3.4成本13

1.4影响语言设计的因素14

1.4.1计算机体系结构14

1.4.2程序设计方法学15

1.5程序设计语言的分类16

1.6语言设计中的权衡17

1.7实现方法18

1.7.1编译19

1.7.2完全解释21

1.7.3混合实现系统22

1.7.4预处理器23

1.8编程环境23

第2章 主要程序设计语言的发展27

2.1 Zuse的Plankalkul语言29

2.1.1历史背景29

2.1.2语言概述29

2.2伪代码30

2.2.1 Short Code语言31

2.2.2 Speedcoding系统31

2.2.3 UNIVAC“编译”系统32

2.2.4相关工作32

2.3 IBM 704计算机与Fortran语言32

2.3.1历史背景32

2.3.2设计过程33

2.3.3 Fortran Ⅰ概述33

2.3.4 Fortran Ⅱ34

2.3.5 Fortran Ⅳ、77、90、95、2003和200834

2.3.6评价35

2.4函数式程序设计:LISP语言36

2.4.1人工智能的起源和表处理36

2.4.2 LISP语言的设计过程37

2.4.3语言概述37

2.4.4评价39

2.4.5 LISP的两种后代语言39

2.4.6相关语言40

2.5迈向成熟的第一步:ALGOL 6041

2.5.1历史背景41

2.5.2早期设计过程41

2.5.3 ALGOL 58概述42

2.5.4对ALGOL 58报告的响应42

2.5.5 ALGOL 60的设计过程43

2.5.6 ALGOL 60概述43

2.5.7评价44

2.6商务记录的计算机化:COBOL语言45

2.6.1历史背景46

2.6.2 FLOW-MATIC语言46

2.6.3 COBOL语言的设计过程46

2.6.4评价47

2.7分时处理的开始:BASIC语言49

2.7.1设计过程49

2.7.2语言概述50

2.7.3评价50

2.8满足所有人的需要:PL/I51

2.8.1历史背景51

2.8.2设计过程52

2.8.3语言概述53

2.8.4评价53

2.9两种早期的动态语言:APL和SNOBOL54

2.9.1 APL语言的起源与特点54

2.9.2 SNOBOL语言的起源与特点55

2.10数据抽象的开始:SIMULA 6755

2.10.1设计过程55

2.10.2语言概述55

2.11正交设计:ALGOL 6856

2.11.1设计过程56

2.11.2语言概述56

2.11.3评价56

2.12 ALGOL系列语言的早期后代语言57

2.12.1为简单性而设计:Pascal语言57

2.12.2可移植的系统语言:C语言59

2.13基于逻辑的程序设计:Prolog语言60

2.13.1设计过程61

2.13.2语言概述61

2.13.3评价61

2.14历史上规模最大的设计工作:Ada语言62

2.14.1历史背景62

2.14.2设计过程62

2.14.3语言概述63

2.14.4评价64

2.14.5 Ada 95和Ada 200565

2.15 面向对象的程序设计:Smalltalk65

2.15.1设计过程65

2.15.2语言概述66

2.15.3评价67

2.16结合命令式和面向对象的特性:C+++67

2.16.1设计过程68

2.16.2语言概述68

2.16.3评价69

2.16.4一种相关语言:Objective-C69

2.16.5另一种相关语言:Delphi69

2.16.6一种关系不大的语言:Go70

2.17基于命令式的面向对象语言:Java70

2.17.1设计过程70

2.17.2语言概述71

2.17.3评价72

2.18脚本语言73

2.18.1 Perl的起源与特点73

2.18.2 JavaScript的起源与特点75

2.18.3 PHP的起源与特点76

2.18.4 Python的起源与特点77

2.18.5 Ruby的起源与特点77

2.18.6 Lua的起源与特点78

2.19一流的.NET语言:C79

2.19.1设计过程79

2.19.2语言概述79

2.19.3评价80

2.20标记与程序设计混合的语言81

2.20.1 XSLT81

2.20.2 JSP82

第3章 描述语法和语义89

3.1概述90

3.2描述语法的普遍问题91

3.2.1语言识别器91

3.2.2语言生成器92

3.3描述语法的形式化方法92

3.3.1巴科斯-诺尔范式和上下文无关文法92

3.3.2扩展的BNF102

3.3.3文法与识别器104

3.4属性文法104

3.4.1静态语义105

3.4.2基本概念105

3.4.3属性文法定义105

3.4.4本质属性106

3.4.5属性文法的例子106

3.4.6计算属性值108

3.4.7评价109

3.5描述程序的意义:动态语义109

3.5.1操作语义110

3.5.2指称语义112

3.5.3公理语义116

第4章 词法分析和语法分析133

4.1概述134

4.2词法分析135

4.3语法分析问题142

4.3.1语法分析概述142

4.3.2自顶向下的语法分析器142

4.3.3自底向上的语法分析器143

4.3.4语法分析的复杂度144

4.4递归下降的语法分析144

4.4.1递归下降的语法分析过程144

4.4.2 LL文法类149

4.5自下而上的语法分析152

4.5.1自下而上的语法分析器的分析问题152

4.5.2移进-归约算法154

4.5.3 LR语法分析器155

第5章 名字、绑定和作用域163

5.1概述164

5.2名字164

5.2.1设计问题165

5.2.2名字形式165

5.2.3特殊字166

5.3变量166

5.3.1名字167

5.3.2地址167

5.3.3类型168

5.3.4数值168

5.4绑定的概念168

5.4.1属性与变量绑定169

5.4.2绑定类型169

5.4.3存储绑定和生存期172

5.5作用域175

5.5.1静态作用域175

5.5.2块177

5.5.3声明的次序179

5.5.4全局作用域180

5.5.5静态作用域的评价182

5.5.6动态作用域183

5.5.7动态作用域的评价183

5.6作用域和生存期184

5.7引用环境185

5.8命名常量186

第6章 数据类型195

6.1概述196

6.2基本数据类型197

6.2.1数值类型197

6.2.2布尔类型200

6.2.3字符类型200

6.3字符串类型200

6.3.1设计问题201

6.3.2字符串及其操作201

6.3.3字符串长度的设计选项203

6.3.4评价203

6.3.5字符串类型的实现203

6.4用户定义的序数类型204

6.4.1枚举类型205

6.4.2子界类型207

6.4.3实现用户定义的有序类型208

6.5数组类型208

6.5.1设计问题208

6.5.2数组和索引209

6.5.3下标的绑定和数组的种类210

6.5.4数组的初始化212

6.5.5数组操作213

6.5.6矩形数组和不规则数组215

6.5.7切片215

6.5.8评价216

6.5.9数组类型的实现216

6.6关联数组218

6.6.1结构和操作219

6.6.2关联数组的实现220

6.7记录类型220

6.7.1记录的定义221

6.7.2记录域的引用222

6.7.3评价222

6.7.4记录类型的实现223

6.8元组类型223

6.9列表类型224

6.10联合类型227

6.10.1设计问题227

6.10.2判别式联合与自由联合227

6.10.3 Ada的联合类型228

6.10.4 F#的联合类型229

6.10.5评价230

6.10.6联合类型的实现230

6.11指针和引用类型231

6.11.1设计问题232

6.11.2指针操作232

6.11.3指针的相关问题233

6.11.4 Ada中的指针234

6.11.5 C和C++中的指针235

6.11.6引用类型236

6.11.7评价237

6.11.8指针和引用类型的实现237

6.12类型检查242

6.13强类型化242

6.14类型等价243

6.15 理论和数据类型246

第7章 表达式与赋值语句257

7.1概述258

7.2算术表达式258

7.2.1运算符的运算顺序259

7.2.2操作数的运算顺序264

7.3运算符重载266

7.4类型转换267

7.4.1表达式中的强制类型转换267

7.4.2显式类型转换269

7.4.3表达式中的错误269

7.5关系表达式和布尔表达式270

7.5.1关系表达式270

7.5.2布尔表达式270

7.6短路求值271

7.7赋值语句273

7.7.1简单赋值273

7.7.2条件赋值273

7.7.3混合赋值运算符273

7.7.4一元赋值运算符274

7.7.5赋值表达式275

7.7.6多重赋值276

7.7.7函数式编程语言中的赋值276

7.8混合模式赋值277

第8章 语句级控制结构283

8.1概述284

8.2选择语句285

8.2.1双路选择语句285

8.2.2多重选择结构289

8.3迭代语句295

8.3.1计数控制循环296

8.3.2逻辑控制循环300

8.3.3用户自定义的循环控制机制302

8.3.4基于数据结构的迭代303

8.4无条件分支306

8.5防护命令307

8.6结论309

第9章 子程序315

9.1概述316

9.2子程序的基本原理316

9.2.1子程序的一般性质316

9.2.2子程序的基本定义316

9.2.3参数318

9.2.4过程与函数321

9.3子程序的设计问题322

9.4局部引用环境323

9.4.1局部变量323

9.4.2嵌套子程序324

9.5参数传递方式325

9.5.1参数传递的语义模型325

9.5.2参数传递的实现模型326

9.5.3参数传递方法的实现329

9.5.4常见语言的参数传递方法330

9.5.5参数的类型检查332

9.5.6多维数组作为参数333

9.5.7设计考虑336

9.5.8参数传递的例子336

9.6子程序作为参数339

9.7间接调用子程序340

9.8重载子程序342

9.9泛型子程序343

9.9.1 C++中的泛型函数343

9.9.2 Java 5.0中的泛型方法345

9.9.3 C# 2005中的泛型方法346

9.9.4 F#中的泛型函数347

9.10函数的设计问题348

9.10.1函数的副作用348

9.10.2返回值的类型348

9.10.3返回值的个数348

9.11用户定义重载运算符349

9.12闭包349

9.13协同程序351

第10章 实现子程序359

10.1调用和返回的一般语义360

10.2实现“简单”的子程序360

10.3通过栈动态局部变量实现子程序362

10.3.1更复杂的活动记录363

10.3.2一个不含递归调用的例子365

10.3.3递归调用367

10.4嵌套子程序368

10.4.1基础知识368

10.4.2静态链369

10.5块373

10.6动态作用域的实现375

10.6.1深层访问375

10.6.2浅层访问376

第11章 抽象数据类型与封装结构383

11.1抽象的概念384

11.2数据抽象简介385

11.2.1抽象数据类型之浮点型385

11.2.2用户自定义的抽象数据类型386

11.2.3示例387

11.3抽象数据类型的设计问题387

11.4语言示例388

11.4.1 Ada中的抽象数据类型388

11.4.2 C++中的抽象数据类型391

11.4.3 Objective-C中的抽象数据类型395

11.4.4 Java中的抽象数据类型400

11.4.5 C#中的抽象数据类型401

11.4.6 Ruby中的抽象数据类型403

11.5参数化的抽象数据类型406

11.5.1 Ada406

11.5.2 C++407

11.5.3 Java 5.0409

11.5.4 C# 2005411

11.6封装结构411

11.6.1引言411

11.6.2 C中的封装412

11.6.3 C++中的封装412

11.6.4 Ada包413

11.6.5 C#程序集413

11.7命名封装414

11.7.1 C++命名空间414

11.7.2 Java包415

11.7.3 Ada包416

11.7.4 Ruby模块417

第12章 面向对象程序设计的支持425

12.1概述426

12.2面向对象编程426

12.2.1引言426

12.2.2继承426

12.2.3动态绑定428

12.3面向对象语言的设计问题430

12.3.1对象的排他性430

12.3.2子类是子类型吗430

12.3.3单继承与多继承431

12.3.4对象的分配和释放432

12.3.5动态绑定与静态绑定433

12.3.6嵌套类433

12.3.7对象的初始化433

12.4 Smalltalk对面向对象编程的支持434

12.4.1一般特征434

12.4.2继承434

12.4.3动态绑定435

12.4.4 Smalltalk的评价435

12.5 C++对面向对象编程的支持436

12.5.1一般特征436

12.5.2继承436

12.5.3动态绑定441

12.5.4评价443

12.6 Objective-C对面向对象编程的支持444

12.6.1一般特征444

12.6.2继承445

12.6.3动态绑定446

12.6.4评价447

12.7 Java对面向对象编程的支持447

12.7.1一般特征447

12.7.2继承447

12.7.3动态绑定449

12.7.4被嵌套的类449

12.7.5评价450

12.8 C#对面向对象编程的支持450

12.8.1一般特征450

12.8.2继承450

12.8.3动态绑定450

12.8.4被嵌套的类451

12.8.5评价451

12.9 Ada 95对面向对象编程的支持452

12.9.1一般特征452

12.9.2继承452

12.9.3动态绑定453

12.9.4子包454

12.9.5评价455

12.10 Ruby对面向对象编程的支持455

12.10.1一般特征455

12.10.2继承457

12.10.3动态绑定457

12.10.4评价457

12.11面向对象构造的实现457

12.11.1存储实例数据457

12.11.2方法调用到方法的动态绑定458

第13章 并发467

13.1概述468

13.1.1多处理器体系结构469

13.1.2并发的种类470

13.1.3使用并发的目的471

13.2子程序级并发概述471

13.2.1基本概念471

13.2.2为并发而设计的语言475

13.2.3设计问题475

13.3信号量475

13.3.1概述475

13.3.2合作同步476

13.3.3竞争同步478

13.3.4评价479

13.4管程479

13.4.1概述479

13.4.2竞争同步480

13.4.3合作同步480

13.4.4评价480

13.5消息传递481

13.5.1概述481

13.5.2同步消息传递的原理481

13.6 Ada对并发的支持482

13.6.1基本原理482

13.6.2合作同步485

13.6.3竞争同步486

13.6.4任务终止487

13.6.5优先级487

13.6.6受保护对象488

13.6.7评价489

13.7 Java线程489

13.7.1 Thread类490

13.7.2优先级491

13.7.3信号量492

13.7.4竞争同步492

13.7.5合作同步493

13.7.6非阻塞同步496

13.7.7显式锁定496

13.7.8评价497

13.8 C#线程497

13.8.1基本线程操作497

13.8.2同步线程500

13.8.3评价500

13.9函数式语言中的并发501

13.9.1 Multilisp501

13.9.2并发ML501

13.9.3 F502

13.10语句级并发503

第14章 异常处理和事件处理511

14.1异常处理概述512

14.1.1基本概念513

14.1.2设计问题514

14.2 Ada中的异常处理517

14.2.1异常处理程序517

14.2.2将异常绑定到处理程序518

14.2.3继续518

14.2.4其他设计选择519

14.2.5例子520

14.2.6评价522

14.3 C++中的异常处理522

14.3.1异常处理程序522

14.3.2异常与处理程序的绑定523

14.3.3继续524

14.3.4其他设计选择524

14.3.5例子524

14.3.6评价526

14.4 Java中的异常处理526

14.4.1异常类526

14.4.2异常处理程序527

14.4.3异常与处理程序的绑定527

14.4.4其他设计选择528

14.4.5例子529

14.4.6 finally子句530

14.4.7断言531

14.4.8评价531

14.5事件处理概述532

14.6 Java的事件处理533

14.6.1 Java Swing的GUI组件533

14.6.2 Java事件模型534

14.7 C#中的事件处理537

第15章 函数式程序设计语言545

15.1概述546

15.2数学函数547

15.2.1简单函数547

15.2.2函数形式548

15.3函数式程序设计语言基础549

15.4第一种函数式程序设计语言LISP550

15.4.1数据类型和结构550

15.4.2第一个LISP解释器551

15.5 Scheme概述553

15.5.1 Scheme的起源553

15.5.2 Scheme解释器553

15.5.3基本数值函数553

15.5.4定义函数554

15.5.5输出函数556

15.5.6数值谓词函数556

15.5.7控制流557

15.5.8表函数557

15.5.9用于符号原子和表的谓词函数560

15.5.10 Scheme函数示例561

15.5.11 LET564

15.5.12 Scheme中的尾递归565

15.5.13函数形式566

15.5.14构建代码的函数567

15.6 Common LISP568

15.7 ML570

15.8 Haskell574

15.9 F578

15.10基本命令式语言对函数式编程的支持581

15.11函数式语言和命令式语言的比较582

第16章 逻辑程序设计语言589

16.1概述590

16.2谓词演算简介590

16.2.1命题591

16.2.2子句形式592

16.3谓词演算与定理证明593

16.4逻辑程序设计概述595

16.5 Prolog的起源596

16.6 Prolog的基本元素597

16.6.1项597

16.6.2事实语句598

16.6.3规则语句598

16.6.4目标语句599

16.6.5 Prolog的推理过程600

16.6.6简单算术602

16.6.7表结构604

16.7 Prolog存在的缺陷609

16.7.1归结的顺序控制609

16.7.2封闭世界假设610

16.7.3否定问题611

16.7.4固有的限制612

16.8逻辑程序设计的应用613

16.8.1关系数据库管理系统613

16.8.2专家系统613

16.8.3自然语言处理614

参考文献617

热门推荐