《程序设计语言-原理与实践 第2版》PDF下载

  • 购买积分:16 如何计算积分?
  • 作  者:(美)Kenneth C. Louden著;黄林鹏等译
  • 出 版 社:北京:电子工业出版社
  • 出版年份:2004
  • ISBN:7505397877
  • 页数:522 页
图书介绍:本书介绍了程序设计语言的一般概念,包括程序设计语言的语法和语义,涉及命令式语言、面向对象语言、函数式语言、逻辑式语言和并行语言等多种范例,分析了各种语言的设计原理和内在机制,讨论了语言的理论基础和实现时必须考虑的问题。

目录 1

第1章 引言 1

1.1什么是程序设计语言 1

1.2程序设计语言中的抽象 3

1.2.1数据抽象 3

1.2.2控制抽象 4

1.3计算范例 9

1.4语言定义 13

1.5语言翻译 15

1.6语言设计 20

习题 20

注释与参考文献 23

第2章历史 24

2.2 20世纪50年代:第一种程序设计语言 25

2.1早期历史:第一位程序员 25

2.3 20世纪60年代:程序语言的迅猛发展 27

2.4 20世纪70年代:简单性、抽象性、语言研究 29

2.5 20世纪80年代:程序设计的新方向和面向对象语言的产生 30

2.6 20世纪90年代:稳定发展,Internet,库及脚本语言 32

2.7未来的方向 33

习题 34

注释与参考文献 36

第3章语言设计原理 38

3.1 语言的历史和设计标准 39

3.2语言的效率 40

3.3规律性 41

3.4进一步的语言设计原理 43

3.5 C++:语言设计的实例研究 46

3.5.1背景 46

3.5.3 发展 47

3.5.2第一次实现 47

3.5.4 标准化 48

3.5.5 小结 48

习题 48

注释与参考文献 51

第4章语法 52

4.1 程序设计语言的词法结构 52

4.2上下文无关文法和BNF范式 56

4.2.1将13NF规则作为等式 61

4.3语法分析树和抽象语法树 61

4.4二义性、结合性和优先性 63

4.5 EBNF和语法图 67

4.6语法分析的技术和工具 70

4.7语言的词法、语法和语义 80

习题 81

注释与参考文献 88

第5章 基本语义 89

5.1 属性、约束和语义函数 89

5.2声明、块和范围 92

5.3符号表 99

5.4名称解析与重载 109

5.5分配、生命期和环境 115

5.6变量与常量 121

5.6.1变量 121

5.6.2常量 124

5.7别名、悬垂引用和无用单元 127

5.7.1别名 127

5.7.2悬垂引用 129

5.7.3无用单元回收 130

习题 131

注释与参考文献 137

第6章数据类型 139

6.1数据类型和类型信息 141

6.2简单类型 144

6.3类型构造器 146

6.3.1笛卡儿积 146

6.3.2联合 148

6.3.3子集 150

6.3.4数组和函数 151

6.3.5指针和递归类型 156

6.3.6数据类型和环境 159

6.4简单语言中的类型命名法 159

6.4.1 C语言 159

6.4.2 Java语言 160

6.5类型等价 161

6.4.3 Ada语言 161

6.6类型检查 167

6.6.1类型相容性 168

6.6.2隐式类型 169

6.6.3重叠类型和多类型值 169

6.6.4共享操作 170

6.7类型转换 171

6.8多态类型检查 174

6.9显式多态性 181

习题 186

注释与参考文献 192

第7章控制Ⅰ——表达式和语句 194

7.1 表达式 195

7.2条件语句标志 201

7.2.1 if语句 201

7.2.2 case和switch语句 204

7.3 WHILE循环及变量 206

7.4关于GOTO的争论 209

7.5异常处理 211

7.5.1 异常 213

7.5.2异常处理程序 215

7.5.3控制 217

7.5.4异常规范说明和用C++写的例子 219

习题 225

注释与参考文献 230

第8章控制Ⅱ——过程和环境 232

8.1过程定义和活跃状态 233

8.2过程的语义 235

8.3参数传递机制 238

8.3.1按值传递 238

8.3.2按引用传递 239

8.3.3按值-结果传递 240

8.3.4按名传递和延迟计算 241

8.3.5参数传递机制及参数规范 243

8.3.6参数的类型检查 244

8.4过程的环境,活跃状态和存储分配 244

8.4.1全静态环境 244

8.4.2基于栈的运行环境 246

8.4.3动态计算过程和全动态环境 253

8.5动态内存管理 255

8.5.1 自由空间的维护 256

8.5.2存储回收 257

8.6异常处理和环境 258

习题 260

注释与参考文献 267

第9章抽象数据类型和模块 268

9.1抽象数据类型的代数规范 269

9.2.1抽象数据类型机制 273

9.2抽象数据类型机制和模块 273

9.2.2模块 275

9.3 C与C++的命名空间及Java包的独立编译 276

9.3.1 C和C++的独立编译 276

9.3.2 C++的命名空间和Java包 280

9.4 Ada包 282

9.5 ML冲的模块 287

9.6早期语言中的模块 290

9.6.1 Euclid 290

9.6.2 CLU 291

9.6.3 Modula-2 292

9.7抽象数据类型机制中的问题 294

9.7.1模块不是类型 294

9.7.2模块是静态实体 295

9.7.3输出类型的模块未对变量上的操作进行合理控制 296

9.7.4不能总是合理表示对输入类型依赖关系的模块 298

9.7.5 模块定义未包含给定操作的语义规范 300

9.8抽象数据类型的数学基础 301

习题 304

注释与参考文献 308

第10章面向对象的程序设计 309

10.1 软件重用与独立性 309

10.2 Java语言:对象、类和方法 311

10.3 继承 316

1 0.4动态绑定 325

1 0.5 C++语言 328

1 0.6 Smalltalk 338

10.7.1类与类型 343

10.7.2类与模块 343

10.7面向对象语言的设计问题 343

10.7.3继承与多态 344

10.8面向对象语言的实现问题 346

10.8.1对象及方法的实现 346

10.8.2继承和动态约束 347

10.8.3分配和初始化 350

习题 350

注释与参考文献 356

第11章 函数式程序设计 357

11.1 函数和程序 358

11.2用命令式语言进行函数式程序设计 360

11.3 Scheme:LISP的一种“方言” 364

11.3.1 Scheme的元素 364

11.3.2 Scheme中的数据结构 369

11.3.3 Scheme中的编程技巧 371

11.3.4高阶函数 372

11.4 ML:带静态类型的函数式语言 375

11.4.1 ML基础 376

11.4.2 ML中的数据结构 382

11.4.3 ML中的高阶函数和Currying 383

11.5延迟计算 386

11.6 Haskell:一种支持重载的惰性语言 390

11.7函数编程的数学基础Ⅰ:递归函数 396

11.8函数编程的数学基础Ⅱ:lambda演算 399

习题 403

注释与参考文献 408

第12章逻辑式程序设计 410

12.1 逻辑和逻辑程序 411

12.2Horn子句 414

12.3消解与合一 417

12.4 Prolog语言 420

12.4.2 Prolog的执行 421

12.4.1符号和数据结构 421

12.4.3算术运算 422

12.4.4合一 423

12.4.5 Prolog搜索策略 426

12.4.6循环和控制结构 426

12.5逻辑设计的问题 430

12.5.1 合一中的出现—检查问题 430

12.5.2失败与否定 431

12.5.3 Horn子句不表示所有的逻辑 432

12.5.4逻辑程序设计中的控制信息 432

12.6逻辑程序设计的推广.约束式逻辑程序设计和等式系统 434

12.6.1约束式逻辑程序设计 434

12.6.2等式系统 435

习题 436

注释与参考文献 441

第13章形式语义 442

13.1 一种简单语言 443

13.2操作语义 446

13.2.1逻辑推理规则 446

13.2.2整数算术表达式的归约规则 447

13.2.3环境和赋值 449

13.2.4控制 451

13.2.5在程序语言中实现操作语义 453

13.3指称语义 454

1 3.3.1语法域 455

13.3.2语义域 455

13.3.3语义函数 456

13.3.4整数算术表达式的指称语义 457

13.3.5环境和赋值 458

13.3.6控制语句的指称语义 460

13.4公理语义 461

1 3.3.7指称语义的程序语言实现 461

13.4.1 wp的一般性质 464

13.4.2简单语言的公理语义 464

1 3.5程序的正确性证明 467

习题 470

注释与参考文献 473

第14章并行程序设计 474

14.1并行处理简介 475

14.2并行处理与程序设计语言 477

14.2.1 设有明显并行机制的并行编程 478

14.2.2进程的创建和销毁 480

14.2.3语句级并行 481

14.2.4过程级并行 482

14.2.5程序级并行 482

14.3.1 Java中的线程 483

14.3线程 483

14.3.2用Java解决有限缓冲区问题 487

14.4信号量 489

14.4.1 用信号量实现有限缓冲区 491

14.4.2使用信号量的困难 492

14.4.3信号量的实现 492

14.5管程 493

14.5.2 Ada95中的并行和管程 494

14.5.1作为管程的Java同步对象 494

14.6消息传递 497

14.6.1 Ada中的task会合 498

14.7非命令式语言中的并行 502

14.7.1 LISP中的并行性 504

14.7.2 Prolog中的并行性 505

习题 506

注释与参考文献 511

参考文献 512