书籍详情

程序设计语言原理(原书第5版)

程序设计语言原理(原书第5版)

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

出版社:机械工业出版社

出版时间:2004-04-01

ISBN:9787111137559

定价:¥49.00

购买这本书可以去
内容简介
  本书从为什么学习程序设计语言、评估程序设计语言和语言结构的标准、常见的设计权衡以及基本的实现方法开始讲起,然后简略描述了在本书中讨论的大部分语言的演化。并且在第3章讨论语法和语义,还在第4章为不开设编译课程的学校新增了词法和语法分析的内容。本书主要是描述命令式语言的主要结构的设计问题及其实现,涉及变量、数据类型、表达式和赋值语句、控制语句、子程序、数据抽象设施、支持面向对象程序设计的语言特性(继承和动态方法绑定)、并发程序单元和异常处理等内容。在最后两章描述了函数式程序设计语言和逻辑程序设计语言。本书适用面很广,既可用作计算机专业本科生程序设计语言课程的教材,也可用作自学语言的参考书。经验丰富的计算机工作者也可以用它来更新知识。本书通过陈述各种语言结构的设计问题,分析一些常用语言中这些结构的设计选择,并比较不同的选择方案,来描述程序设计语言的基本概念。本书并不教读者如何使用一种语言,而是讨论语言的结构与特征及其在不同语言中的不同设计与实现,以及如何为给定的任务选择合适的语言。本书所使用的描述方式不但为读者提供对现有的和将来的程序设计语言进行批判性评估所需的工具,而且可以增强读者学习新语言和理解语言实现的重要性的能力。本书适合作为计算机专业本科生程序设计语言原理课程的教材,但对于成熟的程序员,这也是一本深入了解程序设计语言的理想书籍。本书特点:●使用Java、JavaScript、C++。Perl、Ada和Fortran来讨论各种语言结构以及设计选择方案●将面向对象程序设计与非面向对象的命令式语言结合起来讨论●提供产生现有语言的特定设计选择的历史背景
作者简介
  RobertW.Sebesta于宾夕法尼亚州立大学获得计算机科学硕士和博士学位,现任科罗拉多大学科罗拉多斯普林斯分校计算机科学系副教授和系主任。他有三十多年的教授计算机科学的经验。他的专业领域和评估程度设计语言、编译器设计及软件测试方法和工具。他是ACM和IEEE计算机学会的成员。
目录
出版者的话
专家指导委员会
译者序
前言
第1章 基本概念
1.1 学习程序设计语言原理的缘由
1.2 程序设计领域
1.2.1 科学应用
1.2.2 商务应用
1.2.3 人工智能
1.2.4 系统程序设计
1.2.5 脚本语言
1.2.6 专用语言
1.3 语言评估标准
1.3.1 可读性
1.3.2 可写性
1.3.3 可靠性
1.3.4 代价
1.4 影响语言设计的因素
1.4.1 计算机体系结构
1.4.2 程序设计方法学
1.5 语言分类
1.6 语言设计中的权衡
1.7 实现方法
1.7.1 编译方法
1.7.2 单纯解释
1.7.3 混合实现系统
1.8 程序设计环境
本章小结
复习题
练习题
第2章 主要程序设计语言的发展
2.1 Zuse的Plankalkul语言
2.1.1 历史背景
2.1.2 语言概述
2.2 最小硬件的程序设计:伪代码
2.2.1 短代码
2.2.2 快速编码
2.2.3 UNIVAC“编译”系统
2.2.4 相关的工作
2.3 IBM 704计算机和FORTRAN语言
2.3.1 历史背景
2.3.2 设计过程
2.3.3 FORTRAN Ⅰ概况
2.3.4 FORTRAN Ⅱ概况
2.3.5 FORTRAN Ⅳ、FORTRAN 77和FORTRAN 90
2.3.6 评估
2.4 函数式程序设计:LISP语言
2.4.1 人工智能和表数据处理的开始
2.4.2 LISP的设计过程
2.4.3 语言概述
2.4.4 评估
2.4.5 LISP的两种后代语言
2.4.6 相关的语言
2.5 迈向成熟的第一步:ALGOL 60
2.5.1 历史背景
2.5.2 早期设计过程
2.5.3 ALGOL 58概况
2.5.4 ALGOL 58报告的接受
2.5.5 ALGOL 60的设计过程
2.5.6 ALGOL 60语言概述
2.5.7 ALGOL 60的评估
2.6 商务记录的计算机化:COBOL
2.6.1 历史背景
2.6.2 FLOW-MATIC语言
2.6.3 COBOL的设计过程
2.6.4 评估
2.7 分时操作的开始:BASIC
2.7.1 设计过程
2.7.2 语言概述
2.7.3 评估
2.8 用途广泛的语言:PL/I
2.8.1 历史背景
2.8.2 设计过程
2.8.3 语言概述
2.8.4 评估
2.9 两种早期的动态语言:APL和SNOBOL
2.9.1 APL的起源与特征
2.9.2 SNOBOL的起源与特征
2.10 数据抽象的开始:SIMULA 67
2.10.1 设计过程
2.10.2 语言概述
2.11 正交性语言的设计:ALGOL 68
2.11.1 设计过程
2.11.2 语言概述
2.11.3 评估
2.12 ALGOL系列语言的重要后代语言
2.12.1 为简单性而设计的语言:Pascal
2.12.2 可移植的系统语言:C
2.12.3 ALGOL的其他后代语言
2.13 基于逻辑的程序设计:Prolog
2.13.1 设计过程
2.13.2 语言概述
2.13.3 评估
2.14 历史上最大规模的语言设计:Ada
2.14.1 历史背景
2.14.2 设计过程
2.14.3 语言概述
2.14.4 评估
2.14.5 Ada 95
2.15 面向对象的程序设计:Smalltalk
2.15.1 设计过程
2.15.2 语言概述
2.15.3 评估
2.16 结合命令式与面向对象的特性;C++
2.16.1 设计过程
2.16.2 语言概述
2.16.3 评估
2.16.4 一种相关语言:Eiffel
2.17 万维网程序设计:Java
2.17.1 设计过程
2.17.2 语言概述
2.17.3 评估
本章小结
文献注释
复习题
练习题
第3章 描述语法和语义
3.1 介绍
3.2 描述语法的普遍问题
3.2.1 语言识别器
3.2.2 语言生成器
3.3 描述语法的形式方法
3.3.1 巴科斯-诺尔范式与上下文无关文法
3.3.2 扩展的BNF
3.3.3 语法图
3.3.4 文法与识别器
3.4 属性文法
3.4.1 静态语义
3.4.2 基本概念
3.4.3 属性文法定义
3.4.4 内在属性
3.4.5 属性文法的例子
3.4.6 计算属性值
3.4.7 评估
3.5 描述程序的意义:动态语义
3.5.1 操作语义
3.5.2 公理语义
3.5.3 指称语义
本章小结
文献注释
复习题
练习题
第4章 词法分析和语法分析
4.1 介绍
4.2 词法分析
4.3 语法分析问题
4.3.1 语法分析介绍
4.3.2 自顶向下语法分析器
4.3.3 自底向上语法分析器
4.3.4 语法分析的复杂性
4.4 递归下降语法分析
4.4.1 递归下降语法分析过程
4.4.2 LL文法类
4.5 自底向上语法分析
4.5.1 自底向上语法分析器的语法分析问题
4.5.2 移进-归约算法
4.5.3 LR语法分析器
本章小结
复习题
练习题
第5章 名字、绑定、类型检测和作用域
5.1 介绍
5.2 名字
5.2.1 设计问题
5.2.2 名字形式
5.2.3 特殊字
5.3 变量
5.3.1 名字
5.3.2 地址
5.3.3 类型
5.3.4 值
5.4 绑定概念
5.4.1 属性-变量绑定
5.4.2 类型绑定
5.4.3 存储绑定与生存期
5.5 类型检测
5.6 强类型化
5.7 类型兼容性
5.8 作用域
5.8.1 静态作用域
5.8.2 块
5.8.3 静态作用域的评估
5.8.4 动态作用域
5.8.5 动态作用域的评估
5.9 作用域与生存期
5.10 引用环境
5.11 命名常量
5.12 变量初始化
本章小结
复习题
练习题
第6章 数据类型
6.1 介绍
6.2 基本数据类型
6.2.1 数值类型
6.2.2 布尔类型
6.2.3 字符类型
6.3 字符串类型
6.3.1 设计问题
6.3.2 字符串及操作
6.3.3 串长度的选择
6.3.4 评估
6.3.5 字符串类型的实现
6.4 用户定义的序数类型
6.4.1 枚举类型
6.4.2 子范围类型
6.4.3 实现用户定义的序数类型
6.5 数组类型
6.5.1 设计问题
6.5.2 数组和下标
6.5.3 下标绑定和数组类别
6.5.4 数组中的下标数目
6.5.5 数组初始化
6.5.6 数组操作
6.5.7 片
6.5.8 评估
6.5.9 数组类型的实现
6.6 相关数组
6.6.1 结构和操作
6.6.2 实现相关数组
6.7 记录类型
6.7.1 记录的定义
6.7.2 对记录域的引用
6.7.3 记录操作
6.7.4 评估
6.7.5 记录类型的实现
6.8 联合类型
6.8.1 设计问题
6.8.2 自由联合
6.8.3 Pascal联合类型
6.8.4 Ada联合类型
6.8.5 评估
6.8.6 联合类型的实现
6.9 集合类型
6.9.1 Pascal中的集合
6.9.2 评估
6.9.3 集合类型的实现
6.10 指针类型
6.10.1 设计问题
6.10.2 指针操作
6.10.3 指针的一些问题
6.10.4 Pascal语言中的指针
6.10.5 Ada中的指针
6.10.6 C和C++中的指针
6.10.7 FORTRAN 90中的指针
6.10.8 引用类型
6.10.9 评估
6.10.10 指针类型和引用类型的实现
本章小结
文献注释
复习题
练习题
第7章 表达式与赋值语句
7.1 介绍
7.2 算术表达式
7.2.1 操作符求值顺序
7.2.2 操作数求值顺序
7.3 重载操作符
7.4 类型转换
7.4.1 表达式中的强制转换
7.4.2 显式类型转换
7.4.3 表达式中的错误
7.5 关系表达式和布尔表达式
7.5.1 关系表达式
7.5.2 布尔表达式
7.6 短路求值
7.7 赋值语句
7.7.1 简单赋值
7.7.2 多目标
7.7.3 条件目标
7.7.4 复合赋值操作符
7.7.5 一元赋值操作符
7.7.6 赋值作为表达式
7.8 混合模式赋值
本章小结
复习题
练习题
第8章 语句层次的控制结构
8.1 介绍
8.2 复合语句
8.3 选择语句
8.3.1 双向选择语句
8.3.2 多向选择结构
8.4 循环语句
8.4.1 计数器控制的循环
8.4.2 逻辑控制的循环
8.4.3 用户定位的循环控制机制
8.4.4 基于数据结构的重复
8.5 无条件转移
8.5.1 无条件转移中的问题
8.5.2 标号形式
8.6 受保护命令
8.7 结论
本章小结
复习题
练习题
第9章 子程序
9.1 介绍
9.2 子程序的基本原理
9.2.1 子程序的共同特征
9.2.2 基本定义
9.2.3 参数
9.2.4 过程与函数
9.3 子程序的设计问题
9.4 局部引用环境
9.5 参数传递方法
9.5.1 参数传递的语义模型
9.5.2 参数传递的实现模型
9.5.3 主要语言中的参数传递
9.5.4 参数类型检测
9.5.5 实现参数传递方法
9.5.6 多维数组作为参数
9.5.7 设计考虑
9.5.8 参数传递的例子
9.6 子程序名作为参数传递
9.7 重载子程序
9.8 通用子程序
9.8.1 Ada中的通用子程序
9.8.2 C++中的通用函数
9.9 分别编译与独立编译
9.10 函数的设计问题
9.10.1 函数的副作用
9.10.2 返回值的类型
9.11 访问非局部环境
9.11.1 FORTRAN COMMON块
9.11.2 外部声明和模块
9.12 用户定义的重载操作符
9.13 协同程序
本章小结
复习题
练习题
第10章 实现子程序
10.1 调用与返回的一般语义
10.2 实现FORTRAN 77子程序
10.3 在类ALGOL语言中实现子程序
10.3.1 更复杂的活动记录
10.3.2 一个没有递归及非局部引用的例子
10.3.3 递归
10.3.4 实现非局部引用的机制
10.4 块
10.5 实现动态作用域
10.5.1 深访问
10.5.2 浅访问
10.6 子程序名参数的实现
10.6.1 静态链方法
10.6.2 显示
10.6.3 再次讨论引用环境的混乱
本章小结
文献注释
复习题
练习题
第11章 抽象数据类型
11.1 抽象的概念
11.2 封装
11.3 数据抽象的介绍
11.3.1 浮点数作为抽象数据类型
11.3.2 用户定义的抽象数据类型
11.3.3 一个例子
11.4 设计问题
11.5 语言示例
11.5.1 SIMULA 67中的类
11.5.2 Ada中的抽象数据类型
11.5.3 C++中的抽象数据类型
11.6 有参数的抽象数据类型
11.6.1 Ada
11.6.2 C++
本章小结
复习题
练习题
第12章 支持面向对象的程序设计
12.1 介绍
12.2 面向对象程序设计
12.2.1 介绍
12.2.2 继承
12.2.3 多态与动态绑定
12.2.4 面向对象语言的计算
12.3 面向对象语言的设计问题
12.3.1 纯对象模型
12.3.2 子类是子类型吗
12.3.3 实现继承与接口继承
12.3.4 类型检测与多态
12.3.5 单继承与多继承
12.3.6 对象的分配与解除分配
12.3.7 动态绑定与静态绑定
12.4 Smalltalk概况
12.4.1 一般特征
12.4.2 Smalltalk环境
12.5 Smalltalk语言介绍
12.5.1 表达式
12.5.2 方法
12.5.3 赋值语句
12.5.4 块与控制结构
12.5.5 类
12.5.6 方法的更多方面
12.6 Smalltalk程序示例
12.6.1 简单表格处理
12.6.2 LOGO风格的图形
12.7 Smalltalk的轮廓特性
12.7.1 类型检测与多态
12.7.2 继承
12.8 Smalltalk的评估
12.9 C++对面向对象程序设计的支持
12.9.1 一般特征
12.9.2 继承
12.9.3 动态绑定
12.9.4 评估
12.10 Java对面向对象程序设计的支持
12.10.1 一般特征
12.10.2 继承
12.10.3 动态绑定
12.10.4 封装
12.10.5 评估
12.11 Ada 95对面向对象程序设计的支持
12.11.1 一般特征
12.11.2 继承
12.11.3 动态绑定
12.11.4 评估
12.12 Eiffel对面向对象程序设计的支持
12.12.1 一般特征
12.12.2 继承
12.12.3 动态绑定
12.12.4 评估
12.13 JavaScript的对象模型
12.13.1 一般特征
12.13.2 JavaScript对象
12.13.3 对象的创建与修改
12.13.4 评估
12.14 面向对象结构的实现
12.14.1 存储实例数据
12.14.2 消息对方法的动态绑定
本章小结
复习题
练习题
第13章 并发
13.1 介绍
13.1.1 多处理器体系结构
13.1.2 并发的种类
13.1.3 学习并发的动机
13.2 子程序层次并发的介绍
13.2.1 基本概念
13.2.2 为并发而设计的语言
13.2.3 设计问题
13.3 信号量
13.3.1 介绍
13.3.2 合作同步
13.3.3 竞争同步
13.3.4 评估
13.4 管程
13.4.1 介绍
13.4.2 竞争同步
13.4.3 合作同步
13.4.4 评估
13.5 消息传递
13.5.1 介绍
13.5.2 同步消息传递的概念
13.5.3 Ada 83的消息传递模型
13.5.4 合作同步
13.5.5 竞争同步
13.5.6 任务的终止
13.5.7 优先级
13.5.8 二元信号量
13.5.9 评估
13.6 Ada 95中的并发
13.6.1 保护的对象
13.6.2 异步消息
13.7 Java线程
13.7.1 Thread类
13.7.2 优先级
13.7.3 竞争同步
13.7.4 合作同步
13.7.5 评估
13.8 语句层次的并发
本章小结
文献注释
复习题
练习题
第14章 异常处理
14.1 异常处理介绍
14.1.1 基本概念
14.1.2 设计问题
14.1.3 历史
14.2 PL/I中的异常处理
14.2.1 异常处理程序
14.2.2 异常与异常处理程序的绑定
14.2.3 继续
14.2.4 其他设计选择
14.2.5 示例
14.2.6 评估
14.3 Ada中的异常处理
14.3.1 异常处理程序
14.3.2 异常与异常处理程序的绑定
14.3.3 继续
14.3.4 其他设计选择
14.3.5 示例
14.3.6 评估
14.4 C++中的异常处理
14.4.1 异常处理程序
14.4.2 处理与异常处理程序的绑定
14.4.3 继续
14.4.4 其他设计选择
14.4.5 示例
14.4.6 评估
14.5 Java中的异常处理
14.5.1 异常类
14.5.2 异常处理程序
14.5.3 异常与异常处理程序的绑定
14.5.4 继续
14.5.5 其他设计选择
14.5.6 示例
14.5.7 finally子句
14.5.8 评估
本章小结
文献注释
复习题
练习题
第15章 函数式程序设计语言
15.1 介绍
15.2 数学函数
15.2.1 简单函数
15.2.2 函数形式
15.3 函数式程序设计语言的基础
15.4 第一种函数式程序设计语言:LISP
15.4.1 数据类型和结构
15.4.2 第一个LISP解释器
15.5 Scheme介绍
15.5.1 Scheme的起源
15.5.2 原始函数
15.5.3 构造函数的函数
15.5.4 谓词函数
15.5.5 控制流程
15.5.6 Scheme示例函数
15.5.7 函数形式
15.5.8 产生代码的函数
15.5.9 Scheme的命令式特性
15.6 COMMON LISP
15.7 ML
15.8 Haskell
15.9 函数式语言的应用
15.10 函数式语言和命令式语言的比较
本章小结
文献注释
复习题
练习题
第16章 逻辑程序设计语言
16.1 介绍
16.2 谓词演算的简短介绍
16.2.1 命题
16.2.2 子句形式
16.3 谓词演算与定理证明
16.4 逻辑程序设计概述
16.5 Prolog的起源
16.6 Prolog的基本元素
16.6.1 项
16.6.2 事实语句
16.6.3 规则语句
16.6.4 目标语句
16.6.5 Prolog的推理过程
16.6.6 简单算术
16.6.7 链表结构
16.7 Prolog的缺陷
16.7.1 归结次序控制
16.7.2 封闭世界假设
16.7.3 否定问题
16.7.4 内在的限制
16.8 逻辑程序设计的应用
16.8.1 关系数据库管理系统
16.8.2 专家系统
16.8.3 自然语言处理
16.8.4 教育
16.9 结论
本章小结
文献注释
复习题
练习题
参考文献
索引
猜您喜欢

读书导航