Concepts of Programming Languages

副标题:无

作   者:(美)Robert W.Sebesta著;张勤译

分类号:

ISBN:9787111137559

微信扫一扫,移动浏览光盘

简介

   本书从为什么学习程序设计语言、评估程序设计语言和语言结构的标准、常见的设计权衡以及基本的实现方法开始讲起,然后简略描述了在本书中讨论的大部分语言的演化。并且在第3章讨论语法和语义,还在第4章为不开设编译课程的学校新增了词法和语法分析的内容。本书主要是描述命令式语言的主要结构的设计问题及其实现,涉及变量、数据类型、表达式和赋值语句、控制语句、子程序、数据抽象设施、支持面向对象程序设计的语言特性(继承和动态方法绑定)、并发程序单元和异常处理等内容。在最后两章描述了函数式程序设计语言和逻辑程序设计语言。    本书适用面很广,既可用作计算机专业本科生程序设计语言课程的教材,也可用作自学语言的参考书。经验丰富的计算机工作者也可以用它来更新知识。    本书通过陈述各种语言结构的设计问题,分析一些常用语言中这些结构的设计选择,并比较不同的选择方案,来描述程序设计语言的基本概念。本书并不教读者如何使用一种语言,而是讨论语言的结构与特征及其在不同语言中的不同设计与实现,以及如何为给定的任务选择合适的语言。    本书所使用的描述方式不但为读者提供对现有的和将来的程序设计语言进行批判性评估所需的工具,而且可以增强读者学习新语言和理解语言实现的重要性的能力。    本书适合作为计算机专业本科生程序设计语言原理课程的教材,但对于成熟的程序员,这也是一本深入了解程序设计语言的理想书籍。    本书特点:    ●使用java、javascript、c++。perl、ada和fortran来讨论各种语言结构以及设计选择方案    ●将面向对象程序设计与非面向对象的命令式语言结合起来讨论    ●提供产生现有语言的特定设计选择的历史背景   

目录

出版者的话

专家指导委员会

译者序

前言

第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 zuse的plankalk焞语言 25

2.1.1 历史背景 25

2.1.2 语言概述 25

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

2.2.1 短代码 26

2.2.2 快速编码 27

2.2.3 univac “编译”系统 27

2.2.4 相关的工作 27

2.3 ibm 704 计算机和 fortran 语言 27

2.3.1 历史背景 27

2.3.2 设计过程 28

2.3.3 fortran i 概况 28

2.3.4 fortran ii 概况 29

2.3.5 fortran iv、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 algol 58 概况 36

2.5.4 algol 58 报告的接受 36

2.5.5 algol 60 的设计过程 37

2.5.6 algol 60 语言概述 37

2.5.7 algol 60 的评估 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.1 设计过程 43

2.7.2 语言概述 43

2.7.3 评估 43

2.8 用途广泛的语言:pl/i 44

2.8.1 历史背景 44

2.8.2 设计过程 45

2.8.3 语言概述 45

2.8.4 评估 46

2.9 两种早期的动态语言:apl 和 snobol 47

2.9.1 apl 的起源与特征 47

2.9.2 snobol 的起源与特征 47

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

2.10.1 设计过程 48

2.10.2 语言概述 48

2.11 正交性语言的设计:algol 68 48

2.11.1 设计过程 49

2.11.2 语言概述 49

2.11.3 评估 49

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

2.12.1 为简单性而设计的语言: pascal 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 结合命令式与面向对象的特性:c++ 61

2.16.1 设计过程 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.1 介绍 70

3.2 描述语法的普遍问题 70

3.2.1 语言识别器 71

3.2.2 语言生成器 71

3.3 描述语法的形式方法 71

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

3.3.2 扩展的bnf 79

3.3.3 语法图 80

3.3.4 文法与识别器 80

3.4 属性文法 80

3.4.1 静态语义 81

3.4.2 基本概念 81

3.4.3 属性文法定义 81

3.4.4 内在属性 82

3.4.5 属性文法的例子 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.2 自顶向下语法分析器 106

4.3.3 自底向上语法分析器 106

4.3.4 语法分析的复杂性 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 变量 122

5.3.1 名字 122

5.3.2 地址 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 基本数据类型 149

6.2.1 数值类型 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.4 评估 153

6.3.5 字符串类型的实现 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.5 数组初始化 160

6.5.6 数组操作 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.7.2 对记录域的引用 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.5 评估 172

6.8.6 联合类型的实现 172

6.9 集合类型 173

6.9.1 pascal 中的集合 173

6.9.2 评估 173

6.9.3 集合类型的实现 174

6.10 指针类型 174

6.10.1 设计问题 175

6.10.2 指针操作 175

6.10.3 指针的一些问题 176

6.10.4 pascal 语言中的指针 176

6.10.5 ada 中的指针 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 类型转换 195

7.4.1 表达式中的强制转换 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.1 简单赋值 200

7.7.2 多目标 200

7.7.3 条件目标 200

7.7.4 复合赋值操作符 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.7 设计考虑 251

9.5.8 参数传递的例子 251

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

9.7 重载子程序 256

9.8 通用子程序 257

9.8.1 ada 中的通用子程序 257

9.8.2 c++ 中的通用函数 258

9.9 分别编译与独立编译 260

9.10 函数的设计问题 261

9.10.1 函数的副作用 261

9.10.2 返回值的类型 261

9.11 访问非局部环境 261

9.11.1 fortran common 块 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 实现动态作用域 286

10.5.1 深访问 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

11.1 抽象的概念 294

11.2 封装 294

11.3 数据抽象的介绍 295

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

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

11.3.3 一个例子 296

11.4 设计问题 297

11.5 语言示例 297

11.5.1 simula 67 中的类 297

11.5.2 ada 中的抽象数据类型 298

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

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

11.6.1 ada 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 面向对象语言的设计问题 313

12.3.1 纯对象模型 313

12.3.2 子类是子类型吗 313

12.3.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 smalltalk 程序示例 324

12.6.1 简单表格处理 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.10.5 评估 337

12.11 ada 95 对面向对象程序设计的支持 337

12.11.1 一般特征 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.12.3 动态绑定 341

12.12.4 评估 341

12.13 javascript 的对象模型 341

12.13.1 一般特征 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

13.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.3.4 评估 357

13.4 管程 357

13.4.1 介绍 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.4 合作同步 365

13.5.5 竞争同步 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 java线程 370

13.7.1 thread类 370

13.7.2 优先级 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 pl/i 中的异常处理 384

14.2.1 异常处理程序 384

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

14.2.3 继续 384

14.2.4 其他设计选择 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 java 中的异常处理 394

14.5.1 异常类 394

14.5.2 异常处理程序 394

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

14.5.4 继续 395

14.5.5 其他设计选择 396

14.5.6 示例 396

14.5.7 finally子句 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.1 数据类型和结构 407

15.4.2 第一个lisp 解释器 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.8 产生代码的函数 419

15.5.9 scheme的命令式特性 419

15.6 common lisp 420

15.7 ml 422

15.8 haskell 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 prolog 的缺陷 444

16.7.1 归结次序控制 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.8.3 自然语言处理 449

16.8.4 教育 449

16.9 结论 449

本章小结 450

文献注释 450

复习题 450

练习题 451

参考文献 453

索引 465


已确认勘误

次印刷

页码 勘误内容 提交人 修订印次

Concepts of Programming Languages
    • 名称
    • 类型
    • 大小

    光盘服务联系方式: 020-38250260    客服QQ:4006604884

    意见反馈

    14:15

    关闭

    云图客服:

    尊敬的用户,您好!您有任何提议或者建议都可以在此提出来,我们会谦虚地接受任何意见。

    或者您是想咨询:

    用户发送的提问,这种方式就需要有位在线客服来回答用户的问题,这种 就属于对话式的,问题是这种提问是否需要用户登录才能提问

    Video Player
    ×
    Audio Player
    ×
    pdf Player
    ×
    Current View

    看过该图书的还喜欢

    some pictures

    解忧杂货店

    东野圭吾 (作者), 李盈春 (译者)

    亲爱的云图用户,
    光盘内的文件都可以直接点击浏览哦

    无需下载,在线查阅资料!

    loading icon