《程序设计语言原理 原书第5版》PDF下载

  • 购买积分:15 如何计算积分?
  • 作  者:(美)Robert W.Sebesta著;张勤译
  • 出 版 社:北京:机械工业出版社
  • 出版年份:2004
  • ISBN:7111137558
  • 页数:483 页
图书介绍:本书为计算机专业本科生程序设计语言原理课程教材。

目 录 1

出版者的话 1

专家指导委员会 1

译者序 1

前言 1

第1章基本概念 1

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

1.2程序设计领域 3

1.2.1科学应用 4

1.2.2商务应用 4

1.2.3人工智能 4

1.2.4系统程序设计 4

1.2.5脚本语言 5

1.2.6专用语言 5

1.3语言评估标准 5

1.3.1可读性 6

1.3.2可写性 10

1.3.3可靠性 11

1.3.4代价 12

1.4影响语言设计的因素 13

1.4.1计算机体系结构 13

1.4.2程序设计方法学 14

1.5语言分类 15

1.6语言设计中的权衡 15

1.7实现方法 16

1.7.1编译方法 17

1.7.2单纯解释 19

1.7.3混合实现系统 20

1.8程序设计环境 20

本章小结 21

复习题 21

练习题 22

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

2.1.2语言概述 25

2.1.1历史背景 25

2.1 Zuse的Plankalkül语言 25

2.2最小硬件的程序设计:伪代码 26

2.2.1短代码 26

2.2.2快速编码 27

2.2.3 UNIVAC“编译”系统 27

2.2.4相关的工作 27

2.3 IBM704计算机和FORTRAN语言 27

2.3.1历史背景 27

2.3.3 FORTRAN Ⅰ概况 28

2.3.2设计过程 28

2.3.4 FORTRAN Ⅱ概况 29

2.3.5 FORTRAN Ⅳ、FORTRAN 77和FORTRAN 90 29

2.3.6评估 30

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

2.4.1人工智能和表数据处理的开始 31

2.4.2 LISP的设计过程 32

2.4.3语言概述 32

2.4.4评估 33

2.4.5 LISP的两种后代语言 34

2 4.6相关的语言 35

2.5迈向成熟的第一步:ALGOL 60 35

2.5.1历史背景 35

2.5.2早期设计过程 36

2.5.3 ALGOL58概况 36

2.5.4 ALGOL58报告的接受 36

2.5.6 ALGOL 60语言概述 37

2.5.5 ALGOL60的设计过程 37

2.5.7 ALGOL60的评估 38

2.6商务记录的计算机化:COBOL 39

2.6.1历史背景 39

2.6.2 FLOW-MATIC语言 39

2.6.3 COBOL的设计过程 40

2.6.4评估 40

2.7分时操作的开始:BASIC 42

2.7.3评估 43

2.7.2语言概述 43

2.7.1设计过程 43

2.8用途广泛的语言:PL/I 44

2.8.1历史背景 44

2.8.2设计过程 45

2.8.3语言概述 45

2.8.4评估 46

2.9.1APL的起源与特征 47

2.9.2 SNOBOL的起源与特征 47

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

2.10数据抽象的开始:SIMULA 67 48

2.10.1设计过程 48

2.10.2语言概述 48

2.1 1正交性语言的设计:ALGOL68 48

2.1 1.1设计过程 49

2.11.2语言概述 49

2.11.3评估 49

2.12.1为简单性而设计的语言:Pasca1 50

2.12 ALGOL系列语言的重要后代语言 50

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

2.12.3 ALGOL的其他后代语言 53

2.13基于逻辑的程序设计:Prolog 54

2.13.1设计过程 54

2.13.2语言概述 54

2.13.3评估 55

2.14历史上最大规模的语言设计:Ada 55

2.14.1历史背景 55

2.14.2设计过程 55

2.14.3语言概述 57

2.14.4评估 57

2.14.5 Ada 95 58

2.15面向对象的程序设计:Smalltalk 59

2.15.1设计过程 59

2.15.2语言概述 60

2.15.3评估 60

2.16.1设计过程 61

2.1 6结合命令式与面向对象的特性:C++ 61

2.16.2语言概述 62

2.16.3评估 62

2.16.4一种相关语言:Eiffel 62

2.17万维网程序设计:Java 63

2.17.1设计过程 63

2.17.2语言概述 63

2 17.3评估 64

本章小结 65

文献注释 65

复习题 66

练习题 67

第3章描述语法和语义 69

3.3.3语法图 69

3.2描述语法的普遍问题 70

3.3.1巴科斯-诺尔范式与上下文无关文法 71

3.3描述语法的形式方法 71

3.2.1语言识别器 71

3.2.2语言生成器 71

3.3.2扩展的BNF 79

3.1介绍 79

3.3.4文法与识别器 80

3.4属性文法 80

3.4.1静态语义 81

3.4.2基本概念 81

34.3属性文法定义 81

3.4.5属性文法的例子 82

3.4.4内在属性 82

3.4.6计算属性值 83

3.4.7评估 83

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

3.5.1操作语义 84

3.5.2公理语义 86

3.5.3指称语义 93

本章小结 96

复习题 97

练习题 97

文献注释 97

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

4.1介绍 102

4.2词法分析 102

4.3语法分析问题 105

4.3.1语法分析介绍 105

4.3.3自底向上语法分析器 106

4.3.4语法分析的复杂性 106

4.3.2自顶向下语法分析器 106

4.4递归下降语法分析 107

4.4.1递归下降语法分析过程 107

4.4.2 LL文法类 109

4.5自底向上语法分析 110

4.5.1自底向上语法分析器的语法分析问题 110

4.5.2移进-归约算法 112

4.5.3 LR语法分析器 112

本章小结 115

复习题 116

练习题 117

第5章名字、绑定、类型检测和作用域 119

5.1介绍 120

5.2名字 120

5.2.1设计问题 120

5.2.2名字形式 120

5.2.3特殊字 121

5.3.2地址 122

5.3.1名字 122

5.3变量 122

5.3.3类型 123

5.3.4值 123

5.4绑定概念 123

5.4.1属性-变量绑定 124

5.4.2类型绑定 124

5.4.3存储绑定与生存期 126

5.5类型检测 128

5.6强类型化 129

5.7类型兼容性 130

5.8作用域 132

5.8.1静态作用域 132

5.8.2块 134

5.8.3静态作用域的评估 134

5.8.4动态作用域 136

5.8.5动态作用域的评估 137

5.9作用域与生存期 137

5.10引用环境 138

5.11命名常量 139

5.12变量初始化 141

本章小结 141

复习题 142

练习题 142

第6章数据类型 147

6.1介绍 148

6.2.1数值类型 149

6.2基本数据类型 149

6.2.2布尔类型 150

6.2.3字符类型 150

6.3字符串类型 151

6.3.1设计问题 151

6.3.2字符串及操作 151

6.3.3串长度的选择 152

6.3.5字符串类型的实现 153

6.3.4评估 153

6.4用户定义的序数类型 154

6.4.1枚举类型 154

6.4.2子范围类型 155

6.4.3实现用户定义的序数类型 156

6.5数组类型 156

6.5.1设计问题 157

6..5.2数组和下标 157

6.5.3下标绑定和数组类别 158

6.5.4数组中的下标数目 159

6.5.6数组操作 160

6.5.5数组初始化 160

6.5.7片 161

6.5.8评估 162

6.5.9数组类型的实现 162

6.6相关数组 165

6.6.1结构和操作 165

6.6.2实现相关数组 166

6.7记录类型 166

6.7.1记录的定义 166

6.72对记录域的引用 167

6.7.3记录操作 168

6.7.4评估 168

6.7.5记录类型的实现 169

6 8联合类型 169

6.8.1设计问题 169

6.8.2自由联合 169

6.8.3 Pascal联合类型 169

6.8.4 Ada联合类型 171

6.8.6联合类型的实现 172

6.8.5评估 172

6.9集合类型 173

6.9.1 Pascal中的集合 173

6.92评估 173

6.9.3集合类型的实现 174

6.10指针类型 174

6.10 .1设计问题 175

6.10.2指针操作 175

6.10.4 Pascal语言中的指针 176

6.10.3指针的一些问题 176

6.10.5Ada中的指针 177

6.10.6 C和C++中的指针 177

6.10.7 FORTRAN 90中的指针 178

6.10.8引用类型 179

6.10.9评估 179

6.10.10指针类型和引用类型的实现 180

本章小结 183

复习题 184

文献注释 184

练习题 185

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

7.1介绍 188

7.2算术表达式 188

7.2.1操作符求值顺序 188

7.2.2操作数求值顺序 192

7.3重载操作符 193

7.4.1表达式中的强制转换 195

7 4类型转换 195

7.4 2显式类型转换 196

7.4 3表达式中的错误 196

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

7.5.1关系表达式 197

7.5.2布尔表达式 197

7 6短路求值 198

7.7赋值语句 199

7.7.4复合赋值操作符 200

7 7.3条件目标 200

7.7.2多目标 200

7.7.1简单赋值 200

7.7.5一元赋值操作符 201

7.7.6赋值作为表达式 201

7.8混合模式赋值 202

本章小结 203

复习题 203

练习题 203

第8章语句层次的控制结构 207

8.1介绍 208

8.2复合语句 208

8.3选择语句 209

8.3.1双向选择语句 209

8.3.2多向选择结构 212

8.4循环语句 217

8.4.1计数器控制的循环 217

8.4.2逻辑控制的循环 223

8.4.3用户定位的循环控制机制 224

8.4.4基于数据结构的重复 226

8.5无条件转移 227

8.5.1无条件转移中的问题 227

8 5.2标号形式 228

8.6受保护命令 228

8.7结论 230

本章小结 231

复习题 231

练习题 232

第9章子程序 235

9.1介绍 236

9.2子程序的基本原理 236

9.2.1子程序的共同特征 236

9.2.2基本定义 236

9.2.3参数 237

9.2.4过程与函数 238

9.3子程序的设计问题 239

9.4局部引用环境 240

9.5参数传递方法 241

9.5.1参数传递的语义模型 241

9.5.2参数传递的实现模型 242

9.5.3主要语言中的参数传递 245

9.5.4参数类型检测 246

9.5.5实现参数传递方法 247

9.5.6多维数组作为参数 248

9.5.8参数传递的例子 251

9.5.7设计考虑 251

9.6子程序名作为参数传递 254

9.7重载子程序 256

9.8通用子程序 257

9.8.1Ada中的通用子程序 257

9.8.2 C++中的通用函数 258

9.9分别编译与独立编译 260

9.1 1.1 FORTRAN COMMON块 261

9.11访问非局部环境 261

9.10.2返回值的类型 261

9.10.1函数的副作用 261

9.10函数的设计问题 261

9.11.2外部声明和模块 262

9.12用户定义的重载操作符 263

9.13协同程序 263

本章小结 265

复习题 265

练习题 266

第10章实现子程序 269

10.1调用与返回的一般语义 270

10.2实现FORTRAN 77子程序 270

10.3在类ALGOL语言中实现子程序 272

10.3.1更复杂的活动记录 272

10.3.2一个没有递归及非局部引用的例子 273

10.3.3递归 275

10.3.4实现非局部引用的机制 275

10.4块 285

10.5.1深访问 286

10 5实现动态作用域 286

10 5.2浅访问 287

10.6子程序名参数的实现 288

10.6.1静态链方法 288

10.6.2显示 288

10.6.3再次讨论引用环境的混乱 288

本章小结 290

文献注释 290

复习题 290

练习题 291

第11章抽象数据类型 293

1 1.1抽象的概念 294

11.2封装 294

11.3数据抽象的介绍 295

11.3.1浮点数作为抽象数据类型 295

11.3.2用户定义的抽象数据类型 296

11.3.3一个例子 296

11.51SIMULA 67中的类 297

11.4设计问题 297

11.5语言示例 297

11.5.2 Ada中的抽象数据类型 298

11.5.3 C++中的抽象数据类型 301

11.6有参数的抽象数据类型 305

11.6.1Ada 305

11.6.2 C++ 305

本章小结 306

练习题 307

复习题 307

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

12.1介绍 310

12.2面向对象程序设计 310

12.2.1介绍 310

12.2.2继承 310

12.2.3多态与动态绑定 312

12.2.4面向对象语言的计算 312

12.3.3实现继承与接口继承 313

12.3.2子类是子类型吗 313

12.3.1纯对象模型 313

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

12.3.4类型检测与多态 314

12.3.5单继承与多继承 314

12.3.6对象的分配与解除分配 315

12.3.7动态绑定与静态绑定 315

12.4 Smalltalk概况 315

12.4.1一般特征 316

12.4.2 Smalltalk环境 316

12.5 Smalltalk语言介绍 316

12.5.1表达式 316

12.5.2方法 318

12.5.3赋值语句 319

12.5.4块与控制结构 320

12.5.5类 322

12.5.6方法的更多方面 323

12.6.1简单表格处理 324

12.6 Smalltalk程序示例 324

12.6.2 LOGO风格的图形 325

12.7 Smalltalk的轮廓特性 329

12.7.1类型检测与多态 329

12.7.2继承 329

12.8 Smalltalk的评估 329

12.9 C++对面向对象程序设计的支持 330

12.9.1一般特征 330

12.9.2继承 330

12.9.3动态绑定 333

12.9.4评估 334

12.10 Java对面向对象程序设计的支持 335

12.10.1一般特征 335

12.10.2继承 336

12.10.3动态绑定 336

12.10.4封装 336

12.11.1一般特征 337

12.1 1 Ada 95对面向对象程序设计的支持 337

12.10.5评估 337

12.11 2继承 338

12.11.3动态绑定 338

12.11.4评估 339

12.12 Eiffel对面向对象程序设计的支持 339

12.12.1一般特征 340

12.12.2继承 340

12.13 JavaScript的对象模型 341

12.13.1一般特征 341

12 12.4评估 341

12.12.3动态绑定 341

12.13.2 JavaScript对象 342

12.13.3对象的创建与修改 342

12.13.4评估 343

12.14面向对象结构的实现 343

12.14.1存储实例数据 343

12.14.2消息对方法的动态绑定 344

复习题 345

本章小结 345

练习题 346

第13章并发 349

13.1介绍 350

13.1.1多处理器体系结构 350

13.1 .2并发的种类 351

1 3.1.3学习并发的动机 351

13.2子程序层次并发的介绍 351

13.2.1基本概念 351

13.2 2为并发而设计的语言 353

13.2.3设计问题 354

13.3信号量 354

13.3.1介绍 354

13.3.2合作同步 354

13.3.3竞争同步 356

13.4管程 357

13.4.1介绍 357

13.3.4评估 357

13.4.2竞争同步 358

13.4.3合作同步 358

13.4.4评估 361

13.5消息传递 361

13.5.1介绍 361

13.5.2同步消息传递的概念 361

13.5.3 Ada 83的消息传递模型 361

13.5.5竞争同步 365

13.5.4合作同步 365

13.5.6任务的终止 367

13.5.7优先级 367

13.5.8二元信号量 367

13.5.9评估 368

13.6 Ada 95中的并发 368

13.6.1保护的对象 368

13.6.2异步消息 369

13.7.1 Thread类 370

13.7.2优先级 370

13.7 Java线程 370

13.7.3竞争同步 371

13.7.4合作同步 371

13.7.5评估 373

13.8语句层次的并发 373

本章小结 375

文献注释 376

复习题 376

练习题 376

第14章异常处理 379

14.1异常处理介绍 380

14.1.1基本概念 380

14.1.2设计问题 381

14.1.3历史 383

14.2.2异常与异常处理程序的绑定 384

14.2.3继续 384

14.2.4其他设计选择 384

14.2.1异常处理程序 384

14.2 PL/I中的异常处理 384

14.2.5示例 385

14.2.6评估 386

14.3 Ada中的异常处理 387

14.3.1异常处理程序 387

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

14.3.3继续 388

14.3.4其他设计选择 389

14.3.5示例 390

14.3.6评估 391

14.4 C++中的异常处理 391

14.4 1异常处理程序 391

14.4.2异常与异常处理程序的绑定 391

14.4.3继续 392

14.4.4其他设计选择 392

14.4.5示例 393

14.4.6评估 393

14.5.3异常与异常处理程序的绑定 394

14.5.2异常处理程序 394

14.5.1异常类 394

14.5 Java中的异常处理 394

14.5.4继续 395

14.5.5其他设计选择 396

14.5.6示例 396

14.5.7 final1y子句 397

14.5.8评估 398

文献注释 399

复习题 399

本章小结 399

练习题 400

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

15.1介绍 404

15.2数学函数 404

15.2.1简单函数 404

15.2.2函数形式 405

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

15.4第一种函数式程序设计语言:LISP 406

15.4.2第一个LISP解释器 407

15.4.1数据类型和结构 407

15.5 Scheme介绍 408

15.5.1 Scheme的起源 409

15.5.2原始函数 409

15.5.3构造函数的函数 410

15.5.4谓词函数 412

15.5.5控制流程 414

15.5.6 Scheme示例函数 415

15.5.7函数形式 418

15.5.9 Scheme的命令式特性 419

15.5.8产生代码的函数 419

15.6 COMMON LISP 420

15.7 ML 422

1 5.8Haskell 423

15.9函数式语言的应用 425

15.10函数式语言和命令式语言的比较 426

本章小结 426

练习题 427

义献注释 427

复习题 427

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

16.1介绍 430

16.2谓词演算的简短介绍 430

16.2.1命题 430

16.2.2 子句形式 431

16.3谓词演算与定理证明 432

16.4逻辑程序设计概述 434

16.5 Prolog的起源 435

16.6 Prolog的基本元素 435

16.6.1项 435

16.6.2事实语句 435

16.6.3规则语句 436

16.6.4 目标语句 437

16.6.5 Prolog的推理过程 437

16.6.6简单算术 439

16.6.7链表结构 441

16.7.1归结次序控制 444

16.7 Prolog的缺陷 444

16.7.2封闭世界假设 446

16.7.3否定问题 446

16.7.4内在的限制 448

16.8逻辑程序设计的应用 448

16.8.1关系数据库管理系统 448

16.8.2专家系统 448

16.9结论 449

16.8.3自然语言处理 449

16.8.4教育 449

本章小结 450

文献注释 450

复习题 450

练习题 451

参考文献 453

索引 465