图书介绍

程序设计语言:实践之路 (第二版)PDF|Epub|txt|kindle电子书版本网盘下载

程序设计语言:实践之路 (第二版)
  • [美]MICHAEL L.SCOTT著 著
  • 出版社: 电子工业出版社
  • ISBN:
  • 出版时间:2007
  • 标注页数:899页
  • 文件大小:274MB
  • 文件页数:933页
  • 主题词:

PDF下载


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

下载说明

程序设计语言:实践之路 (第二版)PDF格式电子书版下载

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

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

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

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

图书目录

第1部分 基础1

第1章 引言3

1.1 语言设计的艺术5

1.2 程序设计语言的谱系8

1.3 为什么研究程序设计语言11

1.4 编译和解释13

1.5 程序设计环境21

1.6 编译概览22

1.6.1 词法和语法分析23

1.6.2 语义分析和中间代码生成25

1.6.3 目标代码生成28

1.6.4 代码改进30

1.7 总结和注记31

1.8 练习32

1.9 探索33

1.10 有关参考文献35

第2章 程序设计语言的语法37

2.1 描述语法:正则表达式和上下文无关文法38

2.1.1 单词和正则表达式39

2.1.2 上下文无关文法42

2.1.3 推导和语法分析树43

2.2 扫描46

2.2.1 生成一个自动机49

2.2.2 扫描器代码54

2.2.3 表驱动扫描58

2.2.4 词法错误58

2.2.5 有意义的注释60

2.3 语法分析61

2.3.1 递归下降64

2.3.2 表格驱动的自上而下语法分析70

2.3.3 自下而上的语法分析80

2.3.4 语法错误93

2.4 理论基础94

2.4.1 有穷自动机95

2.4.2 下推自动机95

2.4.3 文法和语言类95

2.5 总结和注记95

2.6 练习96

2.7 探索101

2.8 有关参考文献101

第3章 名字、作用域和约束103

3.1 约束时间的概念104

3.2 对象生存期和存储管理106

3.2.1 静态分配107

3.2.2 基于栈的分配109

3.2.3 堆分配111

3.2.4 废料收集113

3.3 作用域规则114

3.3.1 静态作用域115

3.3.2 嵌套子程序117

3.3.3 声明的顺序119

3.3.4 模块124

3.3.5 模块类型和类128

3.3.6 动态作用域131

3.4 作用域的实现135

3.4.1 符号表136

3.4.2 关联表和中心引用表3.5 引用环境的约束136

3.5.1 子程序闭包138

3.5.2 一级和二级子程序140

3.6 作用域里的约束142

3.6.1 别名142

3.6.2 重载143

3.6.3 多态性及相关概念145

3.7 分别编译149

3.7.1 C的分别编译149

3.7.2 包和自动头文件推理3.7.3 模块分层结构3.8 总结和注记149

3.9 练习151

3.10 探索157

3.11 有关参考文献158

第4章 语义分析161

4.1 语义分析器所扮演的角色162

4.2 属性文法166

4.3 属性求值168

4.4 动作例程179

4.5 属性的空间管理181

4.5.1 自下而上求值182

4.5.2 自上而下求值182

4.6 语法树的标注182

4.7 总结和注记187

4.8 练习189

4.9 探索193

4.10 有关参考文献194

第5章 目标机体系结构195

5.1 存储器层次结构196

5.2 数据表示199

5.2.1 计算机算术199

5.3 指令集体系结构201

5.3.1 寻址模式201

5.3.2 条件分支202

5.4 体系结构和实现204

5.4.1 微程序设计205

5.4.2 微处理器206

5.4.3 RISC207

5.4.4 两个实例体系结构:x86和MIPS208

5.4.5 伪汇编记法形式209

5.5 为新型处理器做编译210

5.5.1 维持流水线满211

5.5.2 寄存器分配216

5.6 总结和注记221

5.7 练习223

5.8 探索226

5.9 有关参考文献227

第2部分 语言设计的核心问题231

第6章 控制流233

6.1 表达式求值234

6.1.1 优先级和结合性236

6.1.2 赋值238

6.1.3 初始化246

6.1.4 表达式里的顺序问题249

6.1.5 短路求值252

6.2 结构化和非结构化的流程254

6.2.1 goto的结构化替代品255

6.2.2 继续259

6.3 顺序复合260

6.4 选择261

6.4.1 短路条件262

6.4.2 case/switch语句265

6.5 迭代270

6.5.1 枚举控制的循环271

6.5.2 组合循环277

6.5.3 迭代器278

6.5.4 Icon的生成器284

6.5.5 逻辑控制的循环284

6.6 递归287

6.6.1 迭代和递归287

6.6.2 应用序和正则序求值291

6.7 非确定性295

6.8 总结和注记296

6.9 练习298

6.10 探索304

6.11 有关参考文献305

第7章 数据类型307

7.1 类型系统308

7.1.1 类型检查309

7.1.2 多态性309

7.1.3 类型的定义311

7.1.4 类型的分类312

7.1.5 正交性319

7.2 类型检查321

7.2.1 类型等价321

7.2.2 类型相容327

7.2.3 类型推理332

7.2.4 ML的类型系统335

7.3 记录(结构)与变体(联合)336

7.3.1 语法和操作337

7.3.2 存储布局和紧缩338

7.3.3 with语句341

7.3.4 变体记录341

7.4 数组349

7.4.1 语法和操作349

7.4.2 维数、上下界和分配353

7.4.3 存储布局358

7.5 字符串366

7.6 集合367

7.7 指针和递归类型369

7.7.1 语法和操作370

7.7.2 悬空引用379

7.7.3 废料收集383

7.8 表389

7.9 文件和输入/输出392

7.9.1 交互式I/O393

7.9.2 基于文件的I/O393

7.9.3 正文I/O393

7.10 相等检测和赋值393

7.11 总结和注记395

7.12 练习398

7.13 探索404

7.14 有关参考文献405

第8章 子程序和控制抽象407

8.1 重温栈布局408

8.2 调用序列410

8.2.1 区头向量413

8.2.2 实例研究:在MIPS上实现C,在x86上实现Pascal414

8.2.3 寄存器窗口414

8.2.4 在线展开415

8.3 参数传递417

8.3.1 参数模式418

8.3.2 名字调用426

8.3.3 专用的参数427

8.3.4 函数返回432

8.4 泛型过程和模块434

8.4.1 不同的实现方法435

8.4.2 泛型参数的约束条件437

8.4.3 隐式实例化440

8.4.4 C++、Java和C#的泛型440

8.5 异常处理441

8.5.1 异常的定义443

8.5.2 异常的传播445

8.5.3 实例:递归下降语法分析中的短语层恢复448

8.5.4 异常的实现449

8.6 协作程序453

8.6.1 栈分配455

8.6.2 转移457

8.6.3 迭代器458

8.6.4 离散事件模拟458

8.7 总结和注记459

8.8 练习460

8.9 探索466

8.10 有关参考文献467

第9章 数据抽象和面向对象469

9.1 面向对象的程序设计471

9.2 封装和继承481

9.2.1 模块481

9.2.2 类484

9.2.3 类型扩展486

9.3 初始化和终结处理489

9.3.1 构造函数的选择490

9.3.2 引用和值491

9.3.3 执行顺序495

9.3.4 废料收集496

9.4 动态方法约束497

9.4.1 虚方法和非虚方法500

9.4.2 抽象类501

9.4.3 成员查找502

9.4.4 多态性505

9.4.5 闭包508

9.5 多重继承511

9.5.1 语义歧义性512

9.5.2 复本式继承512

9.5.3 共享继承512

9.5.4 混入式继承512

9.6 重温面向对象的程序设计512

9.6.1 Smalltalk的对象模型513

9.7 总结和注记513

9.8 练习515

9.9 探索517

9.10 有关参考文献518

第3部分 其他程序设计模型521

第10章 函数式语言523

10.1 历史渊源524

10.2 函数式程序设计的概念526

10.3 Scheme简介528

10.3.1 约束530

10.3.2 表和数531

10.3.3 相等检测和检索532

10.3.4 控制流和赋值533

10.3.5 程序作为表535

10.3.6 一个扩展的实例:DFA模拟537

10.4 重温求值顺序539

10.4.1 严格求值和惰性求值541

10.4.2 I/O:流和单体542

10.5 高阶函数545

10.6 理论基础549

10.6.1 Lambda演算549

10.6.2 控制流549

10.6.3 结构549

10.7 函数式程序设计展望549

10.8 总结和注记552

10.9 练习552

10.10 探索557

10.11 有关参考文献558

第11章 逻辑式语言559

11.1 逻辑式程序设计的概念560

11.2 Prolog561

11.2.1 归结和合一563

11.2.2 表564

11.2.3 算术565

11.2.4 搜索/执行顺序566

11.2.5 一个较大的实例:九宫棋569

11.2.6 命令式控制流571

11.2.7 数据库操作574

11.3 理论基础579

11.3.1 子句形式579

11.3.2 局限性579

11.3.3 Skolem化579

11.4 逻辑式程序设计的展望579

11.4.1 没有覆盖的逻辑部分580

11.4.2 执行顺序580

11.4.3 否定和“闭世界”假设581

11.5 总结和注记583

11.6 练习584

11.7 探索586

11.8 有关参考文献587

第12章 并发589

12.1 基础和动力590

12.1.1 简单历史590

12.1.2 多线程程序的不同情况593

12.1.3 多处理器体系结构597

12.2 并发程序设计基础601

12.2.1 通信和同步601

12.2.2 语言和库603

12.2.3 创建线程的语法604

12.2.4 线程的实现613

12.3 共享存储器619

12.3.1 忙等待同步620

12.3.2 调度器的实现623

12.3.3 信号量627

12.3.4 管程629

12.3.5 条件临界区域634

12.3.6 隐式同步638

12.4 消息传递642

12.4.1 通信对方的命名642

12.4.2 发送646

12.4.3 接收651

12.4.4 远程过程调用656

12.5 总结和注记660

12.6 练习662

12.7 探索668

12.8 有关参考文献669

第13章 脚本语言671

13.1 什么是脚本语言672

13.1.1 公共特性674

13.2 问题领域677

13.2.1 外壳(命令)语言677

13.2.2 文字处理和报表生成684

13.2.3 数学和统计689

13.2.4 “粘结”语言和通用脚本690

13.2.5 扩充语言698

13.3 万维网脚本701

13.3.1 CGI脚本702

13.3.2 嵌入式服务器端脚本703

13.3.3 客户端脚本708

13.3.4 Java小程序708

13.3.5 XSLT712

13.4 新特征722

13.4.1 名字和作用域723

13.4.2 串和模式匹配728

13.4.3 数据类型736

13.4.4 面向对象741

13.5 总结和注记748

13.6 练习750

13.7 探索755

13.8 有关参考文献756

第4部分 对实现的近距离考查759

第14章 构造可运行程序761

14.1 后端编译器结构761

14.1.1 一种可行的多阶段组织762

14.1.2 阶段和遍766

14.2 中间形式766

14.2.1 Diana769

14.2.2 GNU的RTL769

14.3 代码生成769

14.3.1 一个属性文法实例769

14.3.2 寄存器分配772

14.4 地址空间组织775

14.5 汇编776

14.5.1 指令发射778

14.5.2 为名字指定地址780

14.6 连接781

14.6.1 重定位和名字解析782

14.6.2 类型检查783

14.7 动态连接784

14.7.1 与定位无关的代码14.7.2 完全动态连接(惰性连接)14.8 总结和注记786

14.9 练习787

14.10 探索789

14.11 有关参考文献790

第15章 代码改进791

15.1 代码优化阶段793

15.2 窥孔优化793

15.3 基本块内的冗余删除793

15.3.1 一直使用的实例793

15.3.2 值编号793

15.4 全局冗余删除和数据流分析15.4.1 SSA(静态单赋值形式)和全局值编号15.4.2 全局公共子表达式删除15.5 循环改进Ⅰ15.5.1 循环不变量15.5.2 归纳变量15.6 指令调度15.7 循环改进Ⅱ15.7.1 循环展开和软件流水线15.7.2 循环重排15.8 寄存器分配15.9 总结和注记15.10 练习15.11 探索15.12 有关参考文献附录A 本书中提到的程序设计语言793

附录B 语言设计和语言实现803

附录C 编号示例表807

参考书目819

索引837

热门推荐