股资源-股票学习站-学炒股-股票课程-炒股教程-分析选股指标-入门基础知识

 找回密码
 注册昵称

QQ登录

只需一步,快速开始

搜索
上一主题 下一主题

程序员编程语言经典合集(计算机科学丛书套装共5册)

 
    [-----复制链接-----]

22万

主题

22万

帖子

14

精华

积分
11018
楼主
2021-1-20 16:08:55
【资料名称】:程序员编程语言经典合集(共5册)    
【资料描述】:

  内容简介
  2003年《Software Development》杂志最佳书籍Jolt大奖、2003年《Java Developer’s Journal》读者选择最佳书籍奖、2001年《JavaWorld》编辑选择最佳书籍奖、2000年《JavaWorld》读者选择最佳书籍奖、1999年《Software Development》杂志最佳产品奖、1998年《Java Developer’s Journal》编辑选择最佳书籍奖。本书赢得了全球程序员的广泛赞誉,即使是最晦涩的概念,在Bruce Eckel具有亲和力的文字和小而直接的编程示例面前也会化解于无形。从Java的基础语法到最高级特性(深入的面向对象概念、多线程、自动项目构建、单元测试和调试等),本书都能逐步指导你轻松掌握。第4版特点:● 适合初学者与专业人员的经典的面向对象叙述方式,为更新的Java SE5/6增加了新的示例和章节。● 测验框架显示程序输出。● 设计模式贯穿于众多示例中:适配器、桥接器、职责链、命令、装饰器、外观、工厂方法、享元、点名、数据传输对象、空对象、代理、单例、状态、策略、模板方法以及访问者。● 为数据传输引入了XML,为用户界面引入了SWT和Flash。● 重新撰写了有关并发的章节,有助于读者掌握线程的相关知识。● 专门为第4版以及Java SE5/6重写了700多个编译文件中的500多个程序。● 支持网站包含了所有源代码、带注解的解决方案指南、网络日志以及多媒体学习资料。● 覆盖了所有基础知识,同时论述了高级特性。● 详细地阐述了面向对象原理。● 在线可获得Java讲座CD,其中包含Bruce Eckel的全部多媒体讲座。● 在www.MindView.net网站上可以观看现场讲座、咨询和评论。
  目录
  目录
  版权信息
  总目录
  Java编程思想(第4版)
  版权信息
  出版者的话
  读者评论
  关于《Thinking in C++》
  译者序
  译者简介
  题献
  前言
  绪论
  第1章 对象导论
  1.1 抽象过程
  1.2 每个对象都有一个接口
  1.3 每个对象都提供服务
  1.4 被隐藏的具体实现
  1.5 复用具体实现
  1.6 继承
  1.6.1 “是一个”与“像是一个”关系
  1.7 伴随多态的可互换对象
  1.8 单根继承结构
  1.9 容器
  1.9.1 参数化类型
  1.10 对象的创建和生命期
  1.11 异常处理:处理错误
  1.12 并发编程
  1.13 Java与Internet
  1.13.1 Web是什么
  1.13.2 客户端编程
  1.13.3 服务器端编程
  1.14 总结
  第2章 一切都是对象
  2.1 用引用操纵对象
  2.2 必须由你创建所有对象
  2.2.1 存储到什么地方
  2.2.2 特例:基本类型
  2.2.3 Java中的数组
  2.3 永远不需要销毁对象
  2.3.1 作用域
  2.3.2 对象的作用域
  2.4 创建新的数据类型:类
  2.4.1 字段和方法
  2.5 方法、参数和返回值
  2.5.1 参数列表
  2.6 构建一个Java程序
  2.6.1 名字可见性
  2.6.2 运用其他构件
  2.6.3 static关键字
  2.7 你的第一个Java程序
  2.7.1 编译和运行
  2.8 注释和嵌入式文档
  2.8.1 注释文档
  2.8.2 语法
  2.8.3 嵌入式HTML
  2.8.4 一些标签示例
  2.8.5 文档示例
  2.9 编码风格
  2.10 总结
  2.11 练习
  第3章 操作符
  3.1 更简单的打印语句
  3.2 使用Java操作符
  3.3 优先级
  3.4 赋值
  3.4.1 方法调用中的别名问题
  3.5 算术操作符
  3.5.1 一元加、减操作符
  3.6 自动递增和递减
  3.7 关系操作符
  3.7.1 测试对象的等价性
  3.8 逻辑操作符
  3.8.1 短路
  3.9 直接常量
  3.9.1 指数记数法
  3.10 按位操作符
  3.11 移位操作符
  3.12 三元操作符if-else
  3.13 字符串操作符+和+=
  3.14 使用操作符时常犯的错误
  3.15 类型转换操作符
  3.15.1 截尾和舍入
  3.15.2 提升
  3.16 Java没有sizeof
  3.17 操作符小结
  3.18 总结
  第4章 控制执行流程
  4.1 true和false
  4.2 if-else
  4.3 迭代
  4.3.1 do-while
  4.3.2 for
  4.3.3 逗号操作符
  4.4 Foreach语法
  4.5 return
  4.6 break和continue
  4.7 臭名昭著的goto
  4.8 switch
  4.9 总结
  第5章 初始化与清理
  5.1 用构造器确保初始化
  5.2 方法重载
  5.2.1 区分重载方法
  5.2.2 涉及基本类型的重载
  5.2.3 以返回值区分重载方法
  5.3 默认构造器
  5.4 this关键字
  5.4.1 在构造器中调用构造器
  5.4.2 static的含义
  5.5 清理:终结处理和垃圾回收
  5.5.1 finalize()的用途何在
  5.5.2 你必须实施清理
  5.5.3 终结条件
  5.5.4 垃圾回收器如何工作
  5.6 成员初始化
  5.6.1 指定初始化
  5.7 构造器初始化
  5.7.1 初始化顺序
  5.7.2 静态数据的初始化
  5.7.3 显式的静态初始化
  5.7.4 非静态实例初始化
  5.8 数组初始化
  5.8.1 可变参数列表
  5.9 枚举类型
  5.10 总结
  第6章 访问权限控制
  6.1 包:库单元
  6.1.1 代码组织
  6.1.2 创建独一无二的包名
  6.1.3 定制工具库
  6.1.4 用import改变行为
  6.1.5 对使用包的忠告
  6.2 Java访问权限修饰词
  6.2.1 包访问权限
  6.2.2 public:接口访问权限
  6.2.3 private:你无法访问
  6.2.4 protected:继承访问权限
  6.3 接口和实现
  6.4 类的访问权限
  6.5 总结
  第7章 复用类
  7.1 组合语法
  7.2 继承语法
  7.2.1 初始化基类
  7.3 代理
  7.4 结合使用组合和继承
  7.4.1 确保正确清理
  7.4.2 名称屏蔽
  7.5 在组合与继承之间选择
  7.6 protected关键字
  7.7 向上转型
  7.7.1 为什么称为向上转型
  7.7.2 再论组合与继承
  7.8 final关键字
  7.8.1 final数据
  7.8.2 final方法
  7.8.3 final类
  7.8.4 有关final的忠告
  7.9 初始化及类的加载
  7.9.1 继承与初始化
  7.10 总结
  第8章 多态
  8.1 再论向上转型
  8.1.1 忘记对象类型
  8.2 转机
  8.2.1 方法调用绑定
  8.2.2 产生正确的行为
  8.2.3 可扩展性
  8.2.4 缺陷:“覆盖”私有方法
  8.2.5 缺陷:域与静态方法
  8.3 构造器和多态
  8.3.1 构造器的调用顺序
  8.3.2 继承与清理
  8.3.3 构造器内部的多态方法的行为
  8.4 协变返回类型
  8.5 用继承进行设计
  8.5.1 纯继承与扩展
  8.5.2 向下转型与运行时类型识别
  8.6 总结
  第9章 接口
  9.1 抽象类和抽象方法
  9.2 接口
  9.3 完全解耦
  9.4 Java中的多重继承
  9.5 通过继承来扩展接口
  9.5.1 组合接口时的名字冲突
  9.6 适配接口
  9.7 接口中的域
  9.7.1 初始化接口中的域
  9.8 嵌套接口
  9.9 接口与工厂
  9.10 总结
  第10章 内部类
  10.1 创建内部类
  10.2 链接到外部类
  10.3 使用.this与.new
  10.4 内部类与向上转型
  10.5 在方法和作用域内的内部类
  10.6 匿名内部类
  10.6.1 再访工厂方法
  10.7 嵌套类
  10.7.1 接口内部的类
  10.7.2 从多层嵌套类中访问外部类的成员
  10.8 为什么需要内部类
  10.8.1 闭包与回调
  10.8.2 内部类与控制框架
  10.9 内部类的继承
  10.10 内部类可以被覆盖吗
  10.11 局部内部类
  10.12 内部类标识符
  10.13 总结
  第11章 持有对象
  11.1 泛型和类型安全的容器
  11.2 基本概念
  11.3 添加一组元素
  11.4 容器的打印
  11.5 List
  11.6 迭代器
  11.6.1 ListIterator
  11.7 LinkedList
  11.8 Stack
  11.9 Set
  11.10 Map
  11.11 Queue
  11.11.1 PriorityQueue
  11.12 Collection和Iterator
  11.13 Foreach与迭代器
  11.13.1 适配器方法惯用法
  11.14 总结
  第12章 通过异常处理错误
  12.1 概念
  12.2 基本异常
  12.2.1 异常参数
  12.3 捕获异常
  12.3.1 try块
  12.3.2 异常处理程序
  12.4 创建自定义异常
  12.4.1 异常与记录日志
  12.5 异常说明
  12.6 捕获所有异常
  12.6.1 栈轨迹
  12.6.2 重新抛出异常
  12.6.3 异常链
  12.7 Java标准异常
  12.7.1 特例:RuntimeException
  12.8 使用finally进行清理
  12.8.1 finally用来做什么
  12.8.2 在return中使用finally
  12.8.3 缺憾:异常丢失
  12.9 异常的限制
  12.10 构造器
  12.11 异常匹配
  12.12 其他可选方式
  12.12.1 历史
  12.12.2 观点
  12.12.3 把异常传递给控制台
  12.12.4 把“被检查的异常”转换为“不检查的异常”
  12.13 异常使用指南
  12.14 总结
  第13章 字符串
  13.1 不可变String
  13.2 重载“+”与StringBuilder
  13.3 无意识的递归
  13.4 String上的操作
  13.5 格式化输出
  13.5.1 printf()
  13.5.2 System.out.format()
  13.5.3 Formatter类
  13.5.4 格式化说明符
  13.5.5 Formatter转换
  13.5.6 String.format()
  13.6 正则表达式
  13.6.1 基础
  13.6.2 创建正则表达式
  13.6.3 量词
  13.6.4 Pattern和Matcher
  13.6.5 split()
  13.6.6 替换操作
  13.6.7 reset()
  13.6.8 正则表达式与Java I/O
  13.7 扫描输入
  13.7.1 Scanner定界符
  13.7.2 用正则表达式扫描
  13.8 StringTokenizer
  13.9 总结
  第14章 类型信息
  14.1 为什么需要RTTI
  14.2 Class对象
  14.2.1 类字面常量
  14.2.2 泛化的Class引用
  14.2.3 新的转型语法
  14.3 类型转换前先做检查
  14.3.1 使用类字面常量
  14.3.2 动态的instanceof
  14.3.3 递归计数
  14.4 注册工厂
  14.5 instanceof与Class的等价性
  14.6 反射:运行时的类信息
  14.6.1 类方法提取器
  14.7 动态代理
  14.8 空对象
  14.8.1 模拟对象与桩
  14.9 接口与类型信息
  14.10 总结
  第15章 泛型
  15.1 与C++的比较
  15.2 简单泛型
  15.2.1 一个元组类库
  15.2.2 一个堆栈类
  15.2.3 RandomList
  15.3 泛型接口
  15.4 泛型方法
  15.4.1 杠杆利用类型参数推断
  15.4.2 可变参数与泛型方法
  15.4.3 用于Generator的泛型方法
  15.4.4 一个通用的Generator
  15.4.5 简化元组的使用
  15.4.6 一个Set实用工具
  15.5 匿名内部类
  15.6 构建复杂模型
  15.7 擦除的神秘之处
  15.7.1 C++的方式
  15.7.2 迁移兼容性
  15.7.3 擦除的问题
  15.7.4 边界处的动作
  15.8 擦除的补偿
  15.8.1 创建类型实例
  15.8.2 泛型数组
  15.9 边界
  15.10 通配符
  15.10.1 编译器有多聪明
  15.10.2 逆变
  15.10.3 无界通配符
  15.10.4 捕获转换
  15.11 问题
  15.11.1 任何基本类型都不能作为类型参数
  15.11.2 实现参数化接口
  15.11.3 转型和警告
  15.11.4 重载
  15.11.5 基类劫持了接口
  15.12 自限定的类型
  15.12.1 古怪的循环泛型
  15.12.2 自限定
  15.12.3 参数协变
  15.13 动态类型安全
  15.14 异常
  15.15 混型
  15.15.1 C++中的混型
  15.15.2 与接口混合
  15.15.3 使用装饰器模式
  15.15.4 与动态代理混合
  15.16 潜在类型机制
  15.17 对缺乏潜在类型机制的补偿
  15.17.1 反射
  15.17.2 将一个方法应用于序列
  15.17.3 当你并未碰巧拥有正确的接口时
  15.17.4 用适配器仿真潜在类型机制
  15.18 将函数对象用作策略
  15.19 总结:转型真的如此之糟吗?
  15.19.1 进阶读物
  第16章 数组
  16.1 数组为什么特殊
  16.2 数组是第一级对象
  16.3 返回一个数组
  16.4 多维数组
  16.5 数组与泛型
  16.6 创建测试数据
  16.6.1 Arrays.fill()
  16.6.2 数据生成器
  16.6.3 从Generator中创建数组
  16.7 Arrays实用功能
  16.7.1 复制数组
  16.7.2 数组的比较
  16.7.3 数组元素的比较
  16.7.4 数组排序
  16.7.5 在已排序的数组中查找
  16.8 总结
  第17章 容器深入研究
  17.1 完整的容器分类法
  17.2 填充容器
  17.2.1 一种Generator解决方案
  17.2.2 Map生成器
  17.2.3 使用Abstract类
  17.3 Collection的功能方法
  17.4 可选操作
  17.4.1 未获支持的操作
  17.5 List的功能方法
  17.6 Set和存储顺序
  17.6.1 SortedSet
  17.7 队列
  17.7.1 优先级队列
  17.7.2 双向队列
  17.8 理解Map
  17.8.1 性能
  17.8.2 SortedMap
  17.8.3 LinkedHashMap
  17.9 散列与散列码
  17.9.1 理解hashCode()
  17.9.2 为速度而散列
  17.9.3 覆盖hashCode()
  17.10 选择接口的不同实现
  17.10.1 性能测试框架
  17.10.2 对List的选择
  17.10.3 微基准测试的危险
  17.10.4 对Set的选择
  17.10.5 对Map的选择
  17.11 实用方法
  17.11.1 List的排序和查询
  17.11.2 设定Collection或Map为不可修改
  17.11.3 Collection或Map的同步控制
  17.12 持有引用
  17.12.1 WeakHashMap
  17.13 Java 1.0/1.1的容器
  17.13.1 Vector和Enumeration
  17.13.2 Hashtable
  17.13.3 Stack
  17.13.4 BitSet
  17.14 总结
  第18章 Java I/O系统
  18.1 File类
  18.1.1 目录列表器
  18.1.2 目录实用工具
  18.1.3 目录的检查及创建
  18.2 输入和输出
  18.2.1 InputStream类型
  18.2.2 OutputStream类型
  18.3 添加属性和有用的接口
  18.3.1 通过FilterInputStream从InputStream读取数据
  18.3.2 通过FilterOutPutStream向OutputStream写入
  18.4 Reader和Writer
  18.4.1 数据的来源和去处
  18.4.2 更改流的行为
  18.4.3 未发生变化的类
  18.5 自我独立的类:RandomAccessFile
  18.6 I/O流的典型使用方式
  18.6.1 缓冲输入文件
  18.6.2 从内存输入
  18.6.3 格式化的内存输入
  18.6.4 基本的文件输出
  18.6.5 存储和恢复数据
  18.6.6 读写随机访问文件
  18.6.7 管道流
  18.7 文件读写的实用工具
  18.7.1 读取二进制文件
  18.8 标准I/O
  18.8.1 从标准输入中读取
  18.8.2 将System.out转换成PrintWriter
  18.8.3 标准I/O重定向
  18.9 进程控制
  18.10 新I/O
  18.10.1 转换数据
  18.10.2 获取基本类型
  18.10.3 视图缓冲器
  18.10.4 用缓冲器操纵数据
  18.10.5 缓冲器的细节
  18.10.6 内存映射文件
  18.10.7 文件加锁
  18.11 压缩
  18.11.1 用GZIP进行简单压缩
  18.11.2 用Zip进行多文件保存
  18.11.3 Java档案文件
  18.12 对象序列化
  18.12.1 寻找类
  18.12.2 序列化的控制
  18.12.3 使用“持久性”
  18.13 XML
  18.14 Preferences
  18.15 总结
  第19章 枚举类型
  19.1 基本enum特性
  19.1.1 将静态导入用于enum
  19.2 向enum中添加新方法
  19.2.1 覆盖enum的方法
  19.3 switch语句中的enum
  19.4 values()的神秘之处
  19.5 实现,而非继承
  19.6 随机选取
  19.7 使用接口组织枚举
  19.8 使用EnumSet替代标志
  19.9 使用EnumMap
  19.10 常量相关的方法
  19.10.1 使用enum的职责链
  19.10.2 使用enum的状态机
  19.11 多路分发
  19.11.1 使用enum分发
  19.11.2 使用常量相关的方法
  19.11.3 使用EnumMap分发
  19.11.4 使用二维数组
  19.12 总结
  第20章 注解
  20.1 基本语法
  20.1.1 定义注解
  20.1.2 元注解
  20.2 编写注解处理器
  20.2.1 注解元素
  20.2.2 默认值限制
  20.2.3 生成外部文件
  20.2.4 注解不支持继承
  20.2.5 实现处理器
  20.3 使用apt处理注解
  20.4 将观察者模式用于apt
  20.5 基于注解的单元测试
  20.5.1 将@Unit用于泛型
  20.5.2 不需要任何“套件”
  20.5.3 实现@Unit
  20.5.4 移除测试代码
  20.6 总结
  第21章 并发
  21.1 并发的多面性
  21.1.1 更快的执行
  21.1.2 改进代码设计
  21.2 基本的线程机制
  21.2.1 定义任务
  21.2.2 Thread类
  21.2.3 使用Executor
  21.2.4 从任务中产生返回值
  21.2.5 休眠
  21.2.6 优先级
  21.2.7 让步
  21.2.8 后台线程
  21.2.9 编码的变体
  21.2.10 术语
  21.2.11 加入一个线程
  21.2.12 创建有响应的用户界面
  21.2.13 线程组
  21.2.14 捕获异常
  21.3 共享受限资源
  21.3.1 不正确地访问资源
  21.3.2 解决共享资源竞争
  21.3.3 原子性与易变性
  21.3.4 原子类
  21.3.5 临界区
  21.3.6 在其他对象上同步
  21.3.7 线程本地存储
  21.4 终结任务
  21.4.1 装饰性花园
  21.4.2 在阻塞时终结
  21.4.3 中断
  21.4.4 检查中断
  21.5 线程之间的协作
  21.5.1 wait()与notifyAll()
  21.5.2 notify()与notifyAll()
  21.5.3 生产者与消费者
  21.5.4 生产者-消费者与队列
  21.5.5 任务间使用管道进行输入/输出
  21.6 死锁
  21.7 新类库中的构件
  21.7.1 CountDownLatch
  21.7.2 CyclicBarrier
  21.7.3 DelayQueue
  21.7.4 PriorityBlockingQueue
  21.7.5 使用ScheduledExecutor的温室控制器
  21.7.6 Semaphore
  21.7.7 Exchanger
  21.8 仿真
  21.8.1 银行出纳员仿真
  21.8.2 饭店仿真
  21.8.3 分发工作
  21.9 性能调优
  21.9.1 比较各类互斥技术
  21.9.2 免锁容器
  21.9.3 乐观加锁
  21.9.4 ReadWriteLock
  21.10 活动对象
  21.11 总结
  21.11.1 进阶读物
  第22章 图形化用户界面
  22.1 applet
  22.2 Swing基础
  22.2.1 一个显示框架
  22.3 创建按钮
  22.4 捕获事件
  22.5 文本区域
  22.6 控制布局
  22.6.1 BorderLayout
  22.6.2 FlowLayout
  22.6.3 GridLayout
  22.6.4 GridBagLayout
  22.6.5 绝对定位
  22.6.6 BoxLayout
  22.6.7 最好的方式是什么
  22.7 Swing事件模型
  22.7.1 事件与监听器的类型
  22.7.2 跟踪多个事件
  22.8 Swing组件一览
  22.8.1 按钮
  22.8.2 图标
  22.8.3 工具提示
  22.8.4 文本域
  22.8.5 边框
  22.8.6 一个迷你编辑器
  22.8.7 复选框
  22.8.8 单选按钮
  22.8.9 组合框
  22.8.10 列表框
  22.8.11 页签面板
  22.8.12 消息框
  22.8.13 菜单
  22.8.14 弹出式菜单
  22.8.15 绘图
  22.8.16 对话框
  22.8.17 文件对话框
  22.8.18 Swing组件上的HTML
  22.8.19 滑块与进度条
  22.8.20 选择外观
  22.8.21 树、表格和剪贴板
  22.9 JNLP与Java Web Start
  22.10 Swing与并发
  22.10.1 长期运行的任务
  22.10.2 可视化线程机制
  22.11 可视化编程与JavaBean
  22.11.1 JavaBean是什么
  22.11.2 使用Introspector抽取出BeanInfo
  22.11.3 一个更复杂的Bean
  22.11.4 JavaBean与同步
  22.11.5 把Bean打包
  22.11.6 对Bean更高级的支持
  22.11.7 有关Bean的其他读物
  22.12 Swing的可替代选择
  22.13 用Flex构建Flash Web客户端
  22.13.1 Hello,Flex
  22.13.2 编译MXML
  22.13.3 MXML与ActionScript
  22.13.4 容器与控制
  22.13.5 效果与样式
  22.13.6 事件
  22.13.7 连接到Java
  22.13.8 数据模型与数据绑定
  22.13.9 构建和部署
  22.14 创建SWT应用
  22.14.1 安装SWT
  22.14.2 Hello,SWT
  22.14.3 根除冗余代码
  22.14.4 菜单
  22.14.5 页签面板、按钮和事件
  22.14.6 图形
  22.14.7 SWT中的并发
  22.14.8 SWT还是Swing
  22.15 总结
  22.15.1 资源
  附录A 补充材料
  附录B 资源
  索引
  编译原理(第2版)
  版权信息
  译者序
  前言
  第1章 引论
  1.1 语言处理器
  1.2 一个编译器的结构
  1.2.1 词法分析
  1.2.2 语法分析
  1.2.3 语义分析
  1.2.4 中间代码生成
  1.2.5 代码优化
  1.2.6 代码生成
  1.2.7 符号表管理
  1.2.8 将多个步骤组合成趟
  1.2.9 编译器构造工具
  1.3 程序设计语言的发展历程
  1.3.1 走向高级程序设计语言
  1.3.2 对编译器的影响
  1.3.3 1.3节的练习
  1.4 构建一个编译器的相关科学
  1.4.1 编译器设计和实现中的建模
  1.4.2 代码优化的科学
  1.5 编译技术的应用
  1.5.1 高级程序设计语言的实现
  1.5.2 针对计算机体系结构的优化
  1.5.3 新计算机体系结构的设计
  1.5.4 程序翻译
  1.5.5 软件生产率工具
  1.6 程序设计语言基础
  1.6.1 静态和动态的区别
  1.6.2 环境与状态
  1.6.3 静态作用域和块结构
  1.6.4 显式访问控制
  1.6.5 动态作用域
  1.6.6 参数传递机制
  1.6.7 别名
  1.6.8 1.6节的练习
  1.7 第1章总结
  1.8 第1章参考文献
  第2章 一个简单的语法制导翻译器
  2.1 引言
  2.2 语法定义
  2.2.1 文法定义
  2.2.2 推导
  2.2.3 语法分析树
  2.2.4 二义性
  2.2.5 运算符的结合性
  2.2.6 运算符的优先级
  2.2.7 2.2节的练习
  2.3 语法制导翻译
  2.3.1 后缀表示
  2.3.2 综合属性
  2.3.3 简单语法制导定义
  2.3.4 树的遍历
  2.3.5 翻译方案
  2.3.6 2.3节的练习
  2.4 语法分析
  2.4.1 自顶向下分析方法
  2.4.2 预测分析法
  2.4.3 何时使用∈产生式
  2.4.4 设计一个预测分析器
  2.4.5 左递归
  2.4.6 2.4节的练习
  2.5 简单表达式的翻译器
  2.5.1 抽象语法和具体语法
  2.5.2 调整翻译方案
  2.5.3 非终结符号的过程
  2.5.4 翻译器的简化
  2.5.5 完整的程序
  2.6 词法分析
  2.6.1 剔除空白和注释
  2.6.2 预读
  2.6.3 常量
  2.6.4 识别关键字和标识符
  2.6.5 词法分析器
  2.6.6 2.6节的练习
  2.7 符号表
  2.7.1 为每个作用域设置一个符号表
  2.7.2 符号表的使用
  2.8 生成中间代码
  2.8.1 两种中间表示形式
  2.8.2 语法树的构造
  2.8.3 静态检查
  2.8.4 三地址码
  2.8.5 2.8节的练习
  2.9 第2章总结
  第3章 词法分析
  3.1 词法分析器的作用
  3.1.1 词法分析及语法分析
  3.1.2 词法单元、模式和词素
  3.1.3 词法单元的属性
  3.1.4 词法错误
  3.1.5 3.1节的练习
  3.2 输入缓冲
  3.2.1 缓冲区对
  3.2.2 哨兵标记
  3.3 词法单元的规约
  3.3.1 串和语言
  3.3.2 语言上的运算
  3.3.3 正则表达式
  3.3.4 正则定义
  3.3.5 正则表达式的扩展
  3.3.6 3.3节的练习
  3.4 词法单元的识别
  3.4.1 状态转换图
  3.4.2 保留字和标识符的识别
  3.4.3 完成我们的例子
  3.4.4 基于状态转换图的词法分析器的体系结构
  3.4.5 3.4节的练习
  3.5 词法分析器生成工具Lex
  3.5.1 Lex的使用
  3.5.2 Lex程序的结构
  3.5.3 Lex中的冲突解决
  3.5.4 向前看运算符
  3.5.5 3.5节的练习
  3.6 有穷自动机
  3.6.1 不确定的有穷自动机
  3.6.2 转换表
  3.6.3 自动机中输入字符串的接受
  3.6.4 确定的有穷自动机
  3.6.5 3.6节的练习
  3.7 从正则表达式到自动机
  3.7.1 从NFA到DFA的转换
  3.7.2 NFA的模拟
  3.7.3 NFA模拟的效率
  3.7.4 从正则表达式构造NFA
  3.7.5 字符串处理算法的效率
  3.7.6 3.7节的练习
  3.8 词法分析器生成工具的设计
  3.8.1 生成的词法分析器的结构
  3.8.2 基于NFA的模式匹配
  3.8.3 词法分析器使用的DFA
  3.8.4 实现向前看运算符
  3.8.5 3.8节的练习
  3.9 基于DFA的模式匹配器的优化
  3.9.1 NFA的重要状态
  3.9.2 根据抽象语法树计算得到的函数
  3.9.3 计算nullable、firstpos及lastpos
  3.9.4 计算followpos
  3.9.5 根据正则表达式构建DFA
  3.9.6 最小化一个DFA的状态数
  3.9.7 词法分析器的状态最小化
  3.9.8 DFA模拟中的时间和空间权衡
  3.9.9 3.9节的练习
  3.10 第3章总结
  3.11 第3章参考文献
  第4章 语法分析
  4.1 引论
  4.1.1 语法分析器的作用
  4.1.2 代表性的文法
  4.1.3 语法错误的处理
  4.1.4 错误恢复策略
  4.2 上下文无关文法
  4.2.1 上下文无关文法的正式定义
  4.2.2 符号表示的约定
  4.2.3 推导
  4.2.4 语法分析树和推导
  4.2.5 二义性
  4.2.6 验证文法生成的语言
  4.2.7 上下文无关文法和正则表达式
  4.2.8 4.2节的练习
  4.3 设计文法
  4.3.1 词法分析和语法分析
  4.3.2 消除二义性
  4.3.3 左递归的消除
  4.3.4 提取左公因子
  4.3.5 非上下文无关语言的构造
  4.3.6 4.3节的练习
  4.4 自顶向下的语法分析
  4.4.1 递归下降的语法分析
  4.4.2 FIRST和FOLLOW
  4.4.3 LL(1)文法
  4.4.4 非递归的预测分析
  4.4.5 预测分析中的错误恢复
  4.4.6 4.4节的练习
  4.5 自底向上的语法分析
  4.5.1 归约
  4.5.2 句柄剪枝
  4.5.3 移入-归约语法分析技术
  4.5.4 移入-归约语法分析中的冲突
  4.5.5 4.5节的练习
  4.6 LR语法分析技术介绍:简单LR技术
  4.6.1 为什么使用LR语法分析器
  4.6.2 项和LR(0)自动机
  4.6.3 LR语法分析算法
  4.6.4 构造SLR语法分析表
  4.6.5 可行前缀
  4.6.6 4.6节的练习
  4.7 更强大的LR语法分析器
  4.7.1 规范LR(1)项
  4.7.2 构造LR(1)项集
  4.7.3 规范LR(1)语法分析表
  4.7.4 构造LALR语法分析表
  4.7.5 高效构造LALR语法分析表的方法
  4.7.6 LR语法分析表的压缩
  4.7.7 4.7节的练习
  4.8 使用二义性文法
  4.8.1 用优先级和结合性解决冲突
  4.8.2 “悬空-else”的二义性
  4.8.3 LR语法分析中的错误恢复
  4.8.4 4.8节的练习
  4.9 语法分析器生成工具
  4.9.1 语法分析器生成工具Yacc
  4.9.2 使用带有二义性文法的Yacc规约
  4.9.3 用Lex创建Yacc的词法分析器
  4.9.4 Yacc中的错误恢复
  4.9.5 4.9节的练习
  4.10 第4章总结
  4.11 第4章参考文献
  第5章 语法制导的翻译
  5.1 语法制导定义
  5.1.1 继承属性和综合属性
  5.1.2 在语法分析树的结点上对SDD求值
  5.1.3 5.1节的练习
  5.2 SDD的求值顺序
  5.2.1 依赖图
  5.2.2 属性求值的顺序
  5.2.3 S属性的定义
  5.2.4 L属性的定义
  5.2.5 具有受控副作用的语义规则
  5.2.6 5.2节的练习
  5.3 语法制导翻译的应用
  5.3.1 抽象语法树的构造
  5.3.2 类型的结构
  5.3.3 5.3节的练习
  5.4 语法制导的翻译方案
  5.4.1 后缀翻译方案
  5.4.2 后缀SDT的语法分析栈实现
  5.4.3 产生式内部带有语义动作的SDT
  5.4.4 从SDT中消除左递归
  5.4.5 L属性定义的SDT
  5.4.6 5.4节的练习
  5.5 实现L属性的SDD
  5.5.1 在递归下降语法分析过程中进行翻译
  5.5.2 边扫描边生成代码
  5.5.3 L属性的SDD和LL语法分析
  5.5.4 L属性的SDD的自底向上语法分析
  5.5.5 5.5节的练习
  5.6 第5章总结
  5.7 第5章参考文献
  第6章 中间代码生成
  6.1 语法树的变体
  6.1.1 表达式的有向无环图
  6.1.2 构造DAG的值编码方法
  6.1.3 6.1节的练习
  6.2 三地址代码
  6.2.1 地址和指令
  6.2.2 四元式表示
  6.2.3 三元式表示
  6.2.4 静态单赋值形式
  6.2.5 6.2节的练习
  6.3 类型和声明
  6.3.1 类型表达式
  6.3.2 类型等价
  6.3.3 声明
  6.3.4 局部变量名的存储布局
  6.3.5 声明的序列
  6.3.6 记录和类中的字段
  6.3.7 6.3节的练习
  6.4 表达式的翻译
  6.4.1 表达式中的运算
  6.4.2 增量翻译
  6.4.3 数组元素的寻址
  6.4.4 数组引用的翻译
  6.4.5 6.4节的练习
  6.5 类型检查
  6.5.1 类型检查规则
  6.5.2 类型转换
  6.5.3 函数和运算符的重载
  6.5.4 类型推导和多态函数
  6.5.5 一个合一算法
  6.5.6 6.5节的练习
  6.6 控制流
  6.6.1 布尔表达式
  6.6.2 短路代码
  6.6.3 控制流语句
  6.6.4 布尔表达式的控制流翻译
  6.6.5 避免生成冗余的goto指令
  6.6.6 布尔值和跳转代码
  6.6.7 6.6节的练习
  6.7 回填
  6.7.1 使用回填技术的一趟式目标代码生成
  6.7.2 布尔表达式的回填
  6.7.3 控制转移语句
  6.7.4 break语句、continue语句和goto语句
  6.7.5 6.7节的练习
  6.8 switch语句
  6.8.1 switch语句的翻译
  6.8.2 switch语句的语法制导翻译
  6.8.3 6.8节的练习
  6.9 过程的中间代码
  6.10 第6章总结
  6.11 第6章参考文献
  第7章 运行时刻环境
  7.1 存储组织
  7.2 空间的栈式分配
  7.2.1 活动树
  7.2.2 活动记录
  7.2.3 调用代码序列
  7.2.4 栈中的变长数据
  7.2.5 7.2节的练习
  7.3 栈中非局部数据的访问
  7.3.1 没有嵌套过程时的数据访问
  7.3.2 和嵌套过程相关的问题
  7.3.3 一个支持嵌套过程声明的语言
  7.3.4 嵌套深度
  7.3.5 访问链
  7.3.6 处理访问链
  7.3.7 过程型参数的访问链
  7.3.8 显示表
  7.3.9 7.3节的练习
  7.4 堆管理
  7.4.1 存储管理器
  7.4.2 一台计算机的存储层次结构
  7.4.3 程序中的局部性
  7.4.4 碎片整理
  7.4.5 人工回收请求
  7.4.6 7.4节的练习
  7.5 垃圾回收概述
  7.5.1 垃圾回收器的设计目标
  7.5.2 可达性
  7.5.3 引用计数垃圾回收器
  7.5.4 7.5节的练习
  7.6 基于跟踪的回收的介绍
  7.6.1 基本的标记-清扫式回收器
  7.6.2 基本抽象
  7.6.3 标记-清扫式算法的优化
  7.6.4 标记并压缩的垃圾回收器
  7.6.5 拷贝回收器
  7.6.6 开销的比较
  7.6.7 7.6节的练习
  7.7 短停顿垃圾回收
  7.7.1 增量式垃圾回收
  7.7.2 增量式可达性分析
  7.7.3 部分回收概述
  7.7.4 世代垃圾回收
  7.7.5 列车算法
  7.7.6 7.7节的练习
  7.8 垃圾回收中的高级论题
  7.8.1 并行和并发垃圾回收
  7.8.2 部分对象重新定位
  7.8.3 类型不安全的语言的保守垃圾回收
  7.8.4 弱引用
  7.8.5 7.8节的练习
  7.9 第7章总结
  7.10 第7章参考文献
  第8章 代码生成
  8.1 代码生成器设计中的问题
  8.1.1 代码生成器的输入
  8.1.2 目标程序
  8.1.3 指令选择
  8.1.4 寄存器分配
  8.1.5 求值顺序
  8.2 目标语言
  8.2.1 一个简单的目标机模型
  8.2.2 程序和指令的代价
  8.2.3 8.2节的练习
  8.3 目标代码中的地址
  8.3.1 静态分配
  8.3.2 栈分配
  8.3.3 名字的运行时刻地址
  8.3.4 8.3节的练习
  8.4 基本块和流图
  8.4.1 基本块
  8.4.2 后续使用信息
  8.4.3 流图
  8.4.4 流图的表示方式
  8.4.5 循环
  8.4.6 8.4节的练习
  8.5 基本块的优化
  8.5.1 基本块的DAG表示
  8.5.2 寻找局部公共子表达式
  8.5.3 消除死代码
  8.5.4 代数恒等式的使用
  8.5.5 数组引用的表示
  8.5.6 指针赋值和过程调用
  8.5.7 从DAG到基本块的重组
  8.5.8 8.5节的练习
  8.6 一个简单的代码生成器
  8.6.1 寄存器和地址描述符
  8.6.2 代码生成算法
  8.6.3 函数getReg的设计
  8.6.4 8.6节的练习
  8.7 窥孔优化
  8.7.1 消除冗余的加载和保存指令
  8.7.2 消除不可达代码
  8.7.3 控制流优化
  8.7.4 代数化简和强度消减
  8.7.5 使用机器特有的指令
  8.7.6 8.7节的练习
  8.8 寄存器分配和指派
  8.8.1 全局寄存器分配
  8.8.2 使用计数
  8.8.3 外层循环的寄存器指派
  8.8.4 通过图着色方法进行寄存器分配
  8.8.5 8.8节的练习
  8.9 通过树重写来选择指令
  8.9.1 树翻译方案
  8.9.2 通过覆盖一个输入树来生成代码
  8.9.3 通过扫描进行模式匹配
  8.9.4 用于语义检查的例程
  8.9.5 通用的树匹配方法
  8.9.6 8.9节的练习
  8.10 表达式的优化代码的生成
  8.10.1 Ershov数
  8.10.2 从带标号的表达式树生成代码
  8.10.3 寄存器数量不足时的表达式求值
  8.10.4 8.10节的练习
  8.11 使用动态规划的代码生成
  8.11.1 连续求值
  8.11.2 动态规划的算法
  8.11.3 8.11节的练习
  8.12 第8章总结
  8.13 第8章参考文献
  第9章 机器无关优化
  9.1 优化的主要来源
  9.1.1 冗余的原因
  9.1.2 一个贯穿本章的例子:快速排序
  9.1.3 保持语义不变的转换
  9.1.4 全局公共子表达式
  9.1.5 复制传播
  9.1.6 死代码消除
  9.1.7 代码移动
  9.1.8 归纳变量和强度消减
  9.1.9 9.1节的练习
  9.2 数据流分析简介
  9.2.1 数据流抽象
  9.2.2 数据流分析模式
  9.2.3 基本块上的数据流模式
  9.2.4 到达定值
  9.2.5 活跃变量分析
  9.2.6 可用表达式
  9.2.7 小结
  9.2.8 9.2节的练习
  9.3 数据流分析基础
  9.3.1 半格
  9.3.2 传递函数
  9.3.3 通用框架的迭代算法
  9.3.4 数据流解的含义
  9.3.5 9.3节的练习
  9.4 常量传播
  9.4.1 常量传播框架的数据流值
  9.4.2 常量传播框架的交汇运算
  9.4.3 常量传播框架的传递函数
  9.4.4 常量传递框架的单调性
  9.4.5 常量传播框架的不可分配性
  9.4.6 对算法结果的解释
  9.4.7 9.4节的练习
  9.5 部分冗余消除
  9.5.1 冗余的来源
  9.5.2 可能消除所有冗余吗
  9.5.3 懒惰代码移动问题
  9.5.4 表达式的预期执行
  9.5.5 懒惰代码移动算法
  9.5.6 9.5节的练习
  9.6 流图中的循环
  9.6.1 支配结点
  9.6.2 深度优先排序
  9.6.3 深度优先生成树中的边
  9.6.4 回边和可归约性
  9.6.5 流图的深度
  9.6.6 自然循环
  9.6.7 迭代数据流算法的收敛速度
  9.6.8 9.6节的练习
  9.7 基于区域的分析
  9.7.1 区域
  9.7.2 可归约流图的区域层次结构
  9.7.3 基于区域的分析技术概述
  9.7.4 有关传递函数的必要假设
  9.7.5 一个基于区域的分析算法
  9.7.6 处理不可归约流图
  9.7.7 9.7节的练习
  9.8 符号分析
  9.8.1 参考变量的仿射表达式
  9.8.2 数据流问题的公式化
  9.8.3 基于区域的符号化分析
  9.8.4 9.8节的练习
  9.9 第9章总结
  9.10 第9章参考文献
  第10章 指令级并行性
  10.1 处理器体系结构
  10.1.1 指令流水线和分支延时
  10.1.2 流水线执行
  10.1.3 多指令发送
  10.2 代码调度约束
  10.2.1 数据依赖
  10.2.2 寻找内存访问之间的依赖关系
  10.2.3 寄存器使用和并行性之间的折衷
  10.2.4 寄存器分配阶段和代码调度阶段之间的顺序
  10.2.5 控制依赖
  10.2.6 对投机执行的支持
  10.2.7 一个基本的机器模型
  10.2.8 10.2节的练习
  10.3 基本块调度
  10.3.1 数据依赖图
  10.3.2 基本块的列表调度方法
  10.3.3 带优先级的拓扑排序
  10.3.4 10.3节的练习
  10.4 全局代码调度
  10.4.1 基本的代码移动
  10.4.2 向上的代码移动
  10.4.3 向下的代码移动
  10.4.4 更新数据依赖关系
  10.4.5 全局调度算法
  10.4.6 高级代码移动技术
  10.4.7 和动态调度器的交互
  10.4.8 10.4节的练习
  10.5 软件流水线化
  10.5.1 引言
  10.5.2 循环的软件流水线化
  10.5.3 寄存器分配和代码生成
  10.5.4 Do-Across循环
  10.5.5 软件流水线化的目标和约束
  10.5.6 一个软件流水线化算法
  10.5.7 对无环数据依赖图进行调度
  10.5.8 对有环数据依赖图进行调度
  10.5.9 对流水线化算法的改进
  10.5.10 模数变量扩展
  10.5.11 条件语句
  10.5.12 软件流水线化的硬件支持
  10.5.13 10.5节的练习
  10.6 第10章总结
  10.7 第10章参考文献
  第11章 并行性和局部性优化
  11.1 基本概念
  11.1.1 多处理器
  11.1.2 应用中的并行性
  11.1.3 循环层次上的并行性
  11.1.4 数据局部性
  11.1.5 仿射变换理论概述
  11.2 矩阵乘法:一个深入的例子
  11.2.1 矩阵相乘算法
  11.2.2 优化
  11.2.3 高速缓存干扰
  11.2.4 11.2节的练习
  11.3 迭代空间
  11.3.1 从循环嵌套结构中构建迭代空间
  11.3.2 循环嵌套结构的执行顺序
  11.3.3 不等式组的矩阵表示方法
  11.3.4 混合使用符号常量
  11.3.5 控制执行的顺序
  11.3.6 坐标轴的变换
  11.3.7 11.3节的练习
  11.4 仿射的数组下标
  11.4.1 仿射访问
  11.4.2 实践中的仿射访问和非仿射访问
  11.4.3 11.4节的练习
  11.5 数据复用
  11.5.1 数据复用的类型
  11.5.2 自复用
  11.5.3 自空间复用
  11.5.4 组复用
  11.5.5 11.5节的练习
  11.6 数组数据依赖关系分析
  11.6.1 数组访问的数据依赖关系的定义
  11.6.2 整数线性规划
  11.6.3 GCD测试
  11.6.4 解决整数线性规划的启发式规则
  11.6.5 解决一般性的整数线性规划问题
  11.6.6 小结
  11.6.7 11.6节的练习
  11.7 寻找无同步的并行性
  11.7.1 一个介绍性的例子
  11.7.2 仿射空间分划
  11.7.3 空间分划约束
  11.7.4 求解空间分划约束
  11.7.5 一个简单的代码生成算法
  11.7.6 消除空迭代
  11.7.7 从最内层循环中消除条件测试
  11.7.8 源代码转换
  11.7.9 11.7节的练习
  11.8 并行循环之间的同步
  11.8.1 固定多个同步运算
  11.8.2 程序依赖图
  11.8.3 层次结构化的时间
  11.8.4 并行化算法
  11.8.5 11.8节的练习
  11.9 流水线化技术
  11.9.1 什么是流水线化
  11.9.2 连续过松弛方法:一个例子
  11.9.3 完全可交换循环
  11.9.4 把完全可交换循环流水线化
  11.9.5 一般性的理论
  11.9.6 时间分划约束
  11.9.7 用Farkas引理求解时间分划约束
  11.9.8 代码转换
  11.9.9 具有最小同步量的并行性
  11.9.10 11.9节的练习
  11.10 局部性优化
  11.10.1 计算结果数据的时间局部性
  11.10.2 数组收缩
  11.10.3 分划单元的交织
  11.10.4 合成
  11.10.5 11.10节的练习
  11.11 仿射转换的其他用途
  11.11.1 分布式内存计算机
  11.11.2 多指令发送处理器
  11.11.3 向量和SIMD指令
  11.11.4 数据预取
  11.12 第11章总结
  11.13 第11章参考文献
  第12章 过程间分析
  12.1 基本概念
  12.1.1 调用图
  12.1.2 上下文相关
  12.1.3 调用串
  12.1.4 基于克隆的上下文相关分析
  12.1.5 基于摘要的上下文相关分析
  12.1.6 12.1节的练习
  12.2 为什么需要过程间分析
  12.2.1 虚方法调用
  12.2.2 指针别名分析
  12.2.3 并行化
  12.2.4 软件错误和漏洞的检测
  12.2.5 SQL注入
  12.2.6 缓冲区溢出
  12.3 数据流的一种逻辑表示方式
  12.3.1 Datalog简介
  12.3.2 Datalog规则
  12.3.3 内涵断言和外延断言
  12.3.4 Datalog程序的执行
  12.3.5 Datalog程序的增量计算
  12.3.6 有问题的Datalog规则
  12.3.7 12.3节的练习
  12.4 一个简单的指针分析算法
  12.4.1 为什么指针分析有难度
  12.4.2 一个指针和引用的模型
  12.4.3 控制流无关性
  12.4.4 在Datalog中的表示方法
  12.4.5 使用类型信息
  12.4.6 12.4节的练习
  12.5 上下文无关的过程间分析
  12.5.1 一个方法调用的效果
  12.5.2 在Datalog中发现调用图
  12.5.3 动态加载和反射
  12.5.4 12.5节的练习
  12.6 上下文相关指针分析
  12.6.1 上下文和调用串
  12.6.2 在Datalog规则中加入上下文信息
  12.6.3 关于相关性的更多讨论
  12.6.4 12.6节的练习
  12.7 使用BDD的Datalog的实现
  12.7.1 二分决策图
  12.7.2 对BDD的转换
  12.7.3 用BDD表示关系
  12.7.4 用BDD操作实现关系运算
  12.7.5 在指针指向分析中使用BDD
  12.7.6 12.7节的练习
  12.8 第12章总结
  12.9 第12章参考文献
  附录A 一个完整的编译器前端
  附录B 寻找线性独立解
  Python程序设计(原书第2版)
  版权信息
  出版者的话
  译者序
  前言
  第1章 概述
  1.1 计算机程序
  1.2 深入剖析计算机
  1.3 Python编程语言
  1.4 熟悉编程环境
  1.5 分析第一个程序
  1.6 错误
  1.7 问题解决:算法设计
  本章小结
  复习题
  编程练习
  第2章 数字与字符串编程
  2.1 变量
  2.1.1 定义变量
  2.1.2 数字类型
  2.1.3 变量名
  2.1.4 常量
  2.1.5 注释
  2.2 算术运算
  2.2.1 基本算术运算
  2.2.2 幂运算
  2.2.3 整除和余数
  2.2.4 调用函数
  2.2.5 数学函数
  2.3 问题解决:首先手工完成
  2.4 字符串
  2.4.1 字符串类型
  2.4.2 连接与重复
  2.4.3 转换数字和字符串
  2.4.4 字符串与字符
  2.4.5 字符串方法
  2.5 输入输出
  2.5.1 用户输入
  2.5.2 输入数字
  2.5.3 格式化输出
  2.6 图形:简单绘图
  2.6.1 创建窗口
  2.6.2 线和多边形
  2.6.3 内部填充的形状与颜色
  2.6.4 椭圆、圆和文本
  本章小结
  复习题
  编程练习
  第3章 选择结构
  3.1 if语句
  3.2 关系运算符
  3.3 嵌套的分支
  3.4 多重选择
  3.5 问题解决:流程图
  3.6 问题解决:测试用例
  3.7 布尔变量和运算符
  3.8 分析字符串
  3.9 应用:输入验证
  本章小结
  复习题
  编程练习
  第4章 循环
  4.1 while循环
  4.2 问题解决:手工跟踪
  4.3 应用:处理警戒值
  4.4 问题解决:故事板
  4.5 常见循环算法
  4.5.1 数值求和与平均
  4.5.2 匹配计数
  4.5.3 遇到匹配项之前一直提示
  4.5.4 最大值与最小值
  4.5.5 比较相邻值
  4.6 for循环
  4.7 嵌套循环
  4.8 处理字符串
  4.8.1 统计匹配项
  4.8.2 查找所有匹配
  4.8.3 查找第一个或最后一个匹配项
  4.8.4 验证字符串
  4.8.5 构建新字符串
  4.9 应用:随机数和模拟
  4.9.1 生成随机数
  4.9.2 模拟掷骰子
  4.9.3 蒙特卡罗方法
  4.10 图形:数字图像处理
  4.10.1 图像过滤
  4.10.2 重构图像
  4.11 问题解决:先解决一个简单些的问题
  本章小结
  复习题
  编程练习
  第5章 函数
  5.1 函数如同黑盒子
  5.2 实现和测试函数
  5.2.1 实现函数
  5.2.2 测试函数
  5.2.3 包含函数的程序
  5.3 参数传递
  5.4 返回值
  5.5 没有返回值的函数
  5.6 问题解决:可复用的函数
  5.7 问题解决:逐步提炼
  5.8 变量作用域
  5.9 图形:实现图像处理工具包
  5.9.1 准备开始
  5.9.2 比较图像
  5.9.3 调整图像亮度
  5.9.4 旋转图像
  5.9.5 使用工具包
  5.10 递归函数(可选)
  本章小结
  复习题
  编程练习
  第6章 列表
  6.1 列表基本属性
  6.1.1 创建列表
  6.1.2 访问列表元素
  6.1.3 遍历列表
  6.1.4 列表引用
  6.2 列表操作
  6.2.1 追加元素
  6.2.2 插入元素
  6.2.3 查找元素
  6.2.4 删除元素
  6.2.5 连接与重复
  6.2.6 相等性测试
  6.2.7 求和、最大值、最小值和排序
  6.2.8 复制列表
  6.3 常用列表算法
  6.3.1 填充
  6.3.2 合并列表元素
  6.3.3 元素分隔符
  6.3.4 最大值和最小值
  6.3.5 线性搜索
  6.3.6 收集和统计匹配项
  6.3.7 删除匹配项
  6.3.8 交换元素
  6.3.9 读取输入
  6.4 在函数中使用列表
  6.5 问题解决:修改算法
  6.6 问题解决:通过处理物理对象发现算法
  6.7 表格
  6.7.1 创建表格
  6.7.2 访问元素
  6.7.3 定位邻居元素
  6.7.4 计算行和列的总和
  6.7.5 在函数中使用表格
  本章小结
  复习题
  编程练习
  第7章 文件与异常
  7.1 读取和写入文本文件
  7.1.1 打开文件
  7.1.2 读取文件
  7.1.3 写入文件
  7.1.4 文件处理案例
  7.2 文本输入和输出
  7.2.1 迭代文件中的行
  7.2.2 读取单词
  7.2.3 读取字符
  7.2.4 读取记录
  7.3 命令行参数
  7.4 二进制文件与随机访问(可选)
  7.4.1 读写二进制文件
  7.4.2 随机访问
  7.4.3 图像文件
  7.4.4 处理BMP文件
  7.5 异常处理
  7.5.1 抛出异常
  7.5.2 处理异常
  7.5.3 finally子句
  7.6 应用:处理输入错误
  本章小结
  复习题
  编程练习
  第8章 集合与字典
  8.1 集合
  8.1.1 创建和使用集合
  8.1.2 增加和删除元素
  8.1.3 子集
  8.1.4 并集、交集和差集
  8.2 字典
  8.2.1 创建字典
  8.2.2 访问字典的值
  8.2.3 增加和修改项
  8.2.4 删除项
  8.2.5 遍历字典
  8.3 复杂结构
  8.3.1 包含集合的字典
  8.3.2 包含列表的字典
  本章小结
  复习题
  编程练习
  第9章 对象和类
  9.1 面向对象编程
  9.2 实现一个简单的类
  9.3 指定类的公开接口
  9.4 设计数据表示
  9.5 构造函数
  9.6 实现方法
  9.7 测试一个类
  9.8 问题解决:跟踪对象
  9.9 问题解决:对象数据的模式
  9.9.1 记录总数
  9.9.2 事件计数
  9.9.3 收集值
  9.9.4 管理对象的属性
  9.9.5 使用唯一状态建模对象
  9.9.6 描述对象的位置
  9.10 对象引用
  9.10.1 共享引用
  9.10.2 None引用
  9.10.3 self引用
  9.10.4 对象的生命周期
  9.11 应用:编写一个Fraction类
  9.11.1 Fraction类的设计
  9.11.2 构造函数
  9.11.3 特殊方法
  9.11.4 算术运算
  9.11.5 逻辑运算
  本章小结
  复习题
  编程练习
  第10章 继承
  10.1 继承层次结构
  10.2 实现子类
  10.3 调用超类构造函数
  10.4 覆盖方法
  10.5 多态
  10.6 应用:几何形状类层次结构
  10.6.1 基类
  10.6.2 基本形状
  10.6.3 形状分组
  本章小结
  复习题
  编程练习
  第11章 递归
  11.1 再看三角数
  11.2 问题解决:递归思维
  11.3 递归辅助函数
  11.4 递归的效率
  11.5 排列
  11.6 回溯
  11.7 互递归
  本章小结
  复习题
  编程练习
  第12章 排序和搜索
  12.1 选择排序
  12.2 分析选择排序算法
  12.3 分析选择排序算法的性能
  12.4 归并排序
  12.5 分析归并排序算法
  12.6 搜索
  12.6.1 线性搜索
  12.6.2 二分搜索
  12.7 问题解决:估计算法的运行时间
  12.7.1 线性时间
  12.7.2 二次时间
  12.7.3 三角模式
  12.7.4 对数时间
  本章小结
  复习题
  编程练习
  程序设计导论:Python 计算与应用开发实践(原书第2版)
  版权信息
  出版者的话
  译者序
  前言
  第1章 计算机科学导论
  1.1 计算机科学
  1.1.1 计算机专业人员的工作
  1.1.2 模型、算法和程序
  1.1.3 必备的工具
  1.1.4 什么是计算机科学
  1.2 计算机系统
  1.2.1 计算机硬件
  1.2.2 操作系统
  1.2.3 网络和网络协议
  1.2.4 程序开发语言
  1.2.5 软件库
  1.3 Python程序设计语言
  1.3.1 Python简史
  1.3.2 构建Python开发环境
  1.4 计算思维
  1.4.1 一个示例问题
  1.4.2 抽象和建模
  1.4.3 算法
  1.4.4 数据类型
  1.4.5 赋值语句和执行控制结构
  1.4.6 本章小结
  第2章 Python数据类型
  2.1 表达式、变量和赋值语句
  2.1.1 代数表达式和函数
  2.1.2 布尔表达式和运算符
  2.1.3 变量和赋值语句
  2.1.4 变量名称
  2.2 字符串
  2.2.1 字符串运算符
  2.2.2 索引运算符
  2.3 列表和元组
  2.3.1 列表运算符
  2.3.2 列表是可变类型,字符串是不可变类型
  2.3.3 元组
  2.3.4 元组和列表的方法
  2.4 对象和类
  2.4.1 对象类型
  2.4.2 数值类型的有效值
  2.4.3 数值类型的运算符
  2.4.4 创建对象
  2.4.5 隐式类型转换
  2.4.6 显式类型转换
  2.4.7 类方法和面向对象的程序设计
  2.5 Python标准库
  2.5.1 math模块
  2.5.2 fractions模块
  2.6 电子教程案例研究:海龟图形
  2.7 本章小结
  2.8 练习题答案
  2.9 习题
  第3章 命令式编程
  3.1 Python程序
  3.1.1 我们的第一个Python程序
  3.1.2 Python模块
  3.1.3 内置函数print()
  3.1.4 使用input()函数实现交互式输入
  3.1.5 eval()函数
  3.2 执行控制结构
  3.2.1 单分支结构
  3.2.2 双分支结构
  3.2.3 循环结构
  3.2.4 嵌套的控制流结构
  3.2.5 range()函数
  3.3 用户自定义函数
  3.3.1 我们自定义的第一个函数
  3.3.2 函数输入参数
  3.3.3 print()与return的比较
  3.3.4 函数定义实际上是“赋值”语句
  3.3.5 注释
  3.3.6 文档字符串
  3.4 Python变量和赋值语句
  3.4.1 可变类型和不可变类型
  3.4.2 赋值语句和可变性
  3.4.3 交换
  3.5 参数传递
  3.5.1 不可变类型参数传递
  3.5.2 可变类型参数传递
  3.6 电子教程案例研究:自动化海龟图形
  3.7 本章小结
  3.8 练习题答案
  3.9 习题
  3.10 思考题
  第4章 文本数据、文件和异常
  4.1 深入研究字符串
  4.1.1 字符串表示
  4.1.2 深入研究索引运算符
  4.1.3 字符串方法
  4.2 格式化输出
  4.2.1 函数print()
  4.2.2 字符串方法format()
  4.2.3 按列对齐排列数据
  4.2.4 获取与格式化日期和时间
  4.3 文件
  4.3.1 文件系统
  4.3.2 打开和关闭文件
  4.3.3 读取文本文件的模式
  4.3.4 写入文本文件
  4.4 错误和异常
  4.4.1 语法错误
  4.4.2 内置异常
  4.5 电子教程案例研究:图像文件
  4.6 本章小结
  4.7 练习题答案
  4.8 习题
  4.9 思考题
  第5章 执行控制结构
  5.1 选择控制和if语句
  5.1.1 三路以及多路分支
  5.1.2 条件的排列顺序
  5.2 for循环和迭代模式
  5.2.1 循环模式:迭代循环
  5.2.2 循环模式:计数器循环
  5.2.3 循环模式:累加器循环
  5.2.4 其他类型的累加
  5.2.5 循环模式:嵌套循环
  5.3 深入研究列表:二维列表
  5.3.1 二维列表
  5.3.2 二维列表和嵌套循环模式
  5.4 while循环
  5.5 更多循环模式
  5.5.1 循环模式:序列循环
  5.5.2 循环模式:无限循环
  5.5.3 循环模式:循环和折半
  5.6 其他迭代控制语句
  5.6.1 break语句
  5.6.2 continue语句
  5.6.3 pass语句
  5.7 电子教程案例研究:图像处理
  5.8 本章小结
  5.9 练习题答案
  5.10 习题
  5.11 思考题
  第6章 容器和随机性
  6.1 字典
  6.1.1 用户自定义索引作为字典的动机
  6.1.2 字典类属性
  6.1.3 字典运算符
  6.1.4 字典方法
  6.1.5 字典作为多路分支if语句的替代方法
  6.1.6 字典作为计数器集合
  6.1.7 元组对象可以作为字典的键
  6.2 集合
  6.2.1 使用set构造函数移除重复项
  6.2.2 set运算符
  6.2.3 set方法
  6.3 字符编码和字符串
  6.3.1 字符编码
  6.3.2 ASCII
  6.3.3 Unicode
  6.3.4 Unicode字符的UTF-8编码
  6.4 random模块
  6.4.1 选择一个随机整数
  6.4.2 选择一个随机“实数”
  6.4.3 随机混排、挑选和抽样
  6.5 电子教程案例研究:机会游戏
  6.6 本章小结
  6.7 练习题答案
  6.8 习题
  6.9 思考题
  第7章 名称空间
  7.1 函数封装
  7.1.1 代码重用
  7.1.2 模块化
  7.1.3 封装
  7.1.4 局部变量
  7.1.5 与函数调用相关的名称空间
  7.1.6 名称空间与程序栈
  7.2 全局名称空间和局部名称空间
  7.2.1 全局变量
  7.2.2 局部作用范围的变量
  7.2.3 全局作用范围的变量
  7.2.4 在函数中改变全局变量
  7.3 异常控制流
  7.3.1 异常和异常控制流
  7.3.2 捕获和处理异常
  7.3.3 默认异常处理程序
  7.3.4 捕获给定类型的异常
  7.3.5 多重异常处理程序
  7.3.6 控制异常流
  7.4 模块作为名称空间
  7.4.1 模块属性
  7.4.2 导入模块时发生了什么
  7.4.3 模块搜索路径
  7.4.4 顶层模块
  7.4.5 导入模块属性的不同方法
  7.5 类作为名称空间
  7.5.1 一个类是一个名称空间
  7.5.2 类方法是在类名称空间中定义的函数
  7.6 电子教程案例研究:使用调试器进行调试
  7.7 本章小结
  7.8 练习题答案
  7.9 习题
  7.10 思考题
  第8章 面向对象的程序设计
  8.1 定义新的Python类
  8.1.1 类Point的方法
  8.1.2 类和名称空间
  8.1.3 每个对象都有一个关联的名称空间
  8.1.4 类Point的实现
  8.1.5 实例变量
  8.1.6 实例继承类属性
  8.1.7 类定义的一般格式
  8.1.8 编写类的文档
  8.1.9 类Animal
  8.2 用户自定义类示例
  8.2.1 构造函数重载
  8.2.2 默认构造函数
  8.2.3 扑克牌类
  8.3 设计新的容器类
  8.3.1 设计一个表示一副扑克牌的类
  8.3.2 实现Deck类
  8.3.3 容器类Queue
  8.3.4 实现Queue类
  8.4 运算符重载
  8.4.1 运算符是类方法
  8.4.2 使Point类对用户友好
  8.4.3 构造函数和repr()运算符之间的约定
  8.4.4 使Queue类对用户友好
  8.5 继承
  8.5.1 继承类的属性
  8.5.2 类定义的一般格式
  8.5.3 重写父类方法
  8.5.4 扩展父类方法
  8.5.5 通过继承list实现一个Queue类
  8.6 用户自定义异常
  8.6.1 抛出一个异常
  8.6.2 用户自定义异常类
  8.6.3 改进类Queue的封装
  8.7 电子教程案例研究:索引和迭代器
  8.8 本章小结
  8.9 练习题答案
  8.10 习题
  8.11 思考题
  第9章 图形用户界面
  9.1 tkinter图形用户界面开发基本知识
  9.1.1 组件Tk:GUI窗口
  9.1.2 组件Label:显示文本
  9.1.3 显示图像
  9.1.4 布局组件
  9.1.5 将组件布局为表格
  9.2 基于事件的tkinter组件
  9.2.1 Button组件及事件处理程序
  9.2.2 事件、事件处理程序和mainloop()
  9.2.3 Entry组件
  9.2.4 Text组件和绑定事件
  9.2.5 事件模式和tkinter类Event
  9.3 设计图形用户界面
  9.3.1 组件Canvas
  9.3.2 作为组织容器的组件Frame
  9.4 面向对象的图形用户界面
  9.4.1 GUI面向对象程序设计基本知识
  9.4.2 把共享组件赋值给实例变量
  9.4.3 把共享数据赋值给实例变量
  9.5 电子教程案例研究:开发一个计算器
  9.6 本章小结
  9.7 练习题答案
  9.8 习题
  9.9 思考题
  第10章 递归
  10.1 递归简介
  10.1.1 调用自身的函数
  10.1.2 停止条件
  10.1.3 递归函数的特性
  10.1.4 递归思想
  10.1.5 递归函数调用和程序栈
  10.2 递归示例
  10.2.1 递归数列模式
  10.2.2 分形图形
  10.2.3 病毒扫描
  10.2.4 线性递归
  10.3 运行时间分析
  10.3.1 指数函数
  10.3.2 运算次数
  10.3.3 斐波那契数列
  10.3.4 运行时间的实验分析
  10.4 查找
  10.4.1 线性查找
  10.4.2 二分查找
  10.4.3 线性查找和二分查找比较



【下载地址隐藏】:                    点:回复可见地址
游客,如果您要查看本帖隐藏内容请回复






上一篇:问话绝技:问话能力.就是「解决问题」的能力
下一篇:复利效应 6步骤引爆收入、生活和各项成就倍数成长 复利思维
回复

举报

QQ|

GMT+8, 2024-9-21 18:47

快速回复 返回顶部 返回列表