《程序设计语言——实践之路》目录

(Michael Scott, Programming Language Pragmatics, Morgen Kaufmann, 2000)

裘宗燕译


前言

第1章引言 1
1.1语言设计的艺术
1.2程序设计语言的谱系
1.3为什么研究程序设计语言
1.4编译和解释
1.5程序设计环境
1.6编译概览
1.6.1词法和语法分析
1.6.2语义分析和中间代码生成
1.6.3目标代码生成
1.6.4代码改进
1.7总结和注记
1.8复习
1.9练习
1.10有关参考文献

第2章程序设计语言的语法 31
2.1描述语法:正则表达式和上下文无关文法
2.1.1单词和正则表达式
2.1.2上下文无关文法
2.1.3推导和语法分析树
2.2识别语法:扫描器和语法分析器
2.2.1扫描
2.2.2自上而下和自下而上的语法分析
2.2.3递归下降
2.2.4语法错误
2.2.5表格驱动的自上而下语法分析
2.2.6自下而上的语法分析
2.3*理论基础
2.3.1有穷自动机
2.3.2下推自动机
2.3.3文法和语言类
2.4总结和注记
2.5复习
2.6练习
2.7有关参考文献

第3章名字,作用域和约束 105
3.1约束时间的概念
3.2对象生存期和存储管理
3.2.1基于堆栈的分配
3.2.2堆分配
3.2.3废料收集
3.3作用域规则
3.3.1静态作用域
3.3.2动态作用域
3.3.3符号表
3.3.4关联表和中心引用表列
3.4引用环境的约束
3.4.1子程序闭包
3.4.2一级和二级子程序
3.5重载和相关概念
3.6语言设计中与名字有关的缺陷
3.6.1作用域规则
3.6.2分别编译
3.7总结和注记
3.8复习
3.9练习
3.10有关参考文献

第4章语义分析 165
4.1语义分析器所扮演的角色
4.2属性文法
4.3属性流
4.4动作例程
4.5属性的空间管理
4.5.1自下而上求值
4.5.2自上而下求值
4.6语法树的标注
4.7总结和注记
4.8复习
4.9练习
4.10有关参考文献

第5章汇编层计算机体系结构 203
5.1工作站的微体系结构
5.2存储器层次结构
5.3数据表示
5.3.1整数算术
5.3.2浮点算术
5.4指令集的体系结构
5.4.1寻址模式
5.4.2条件分支
5.5处理器体系结构的演化
5.5.1两个实例体系结构:680x0和MIPS
5.5.2伪汇编记法形式
5.6为新型处理器做编译
5.6.1维持流水线满
5.6.2寄存器分配
5.7总结和注记
5.8复习
5.9练习
15.10有关参考文献

第6章控制流 249
6.1表达式求值
6.1.1优先级和结合性
6.1.2赋值
6.1.3表达式里的顺序
6.1.4短路求值
6.2结构化和非结构化的流程
6.3顺序复合
6.4选择
6.4.1短路条件
6.4.2分情况/开关语句
6.5迭代
6.5.1枚举控制的循环
6.5.2组合循环
6.5.3迭代器
6.5.4逻辑控制的循环
6.6递归
6.6.1迭代和递归
6.6.2应用序和正则序求值
6.7非确定性
6.8总结和注记
6.9复习
6.10练习
6.11有关参考文献

第7章数据类型 319
7.1类型系统
7.1.1类型的定义
7.1.2类型的分类
7.2类型检查
7.2.1类型等价
7.2.2类型变换和转换
7.2.3类型相容和强制
7.2.4类型推理
7.2.5ML的类型系统
7.3记录(结构)与变体(联合)
7.3.1语法和操作
7.3.2存储布局和紧缩
7.3.3With语句
7.3.4变体记录
7.4数组
7.4.1语法和操作
7.4.2维数.c上下界和分配
7.4.3数组的布局
7.5字符串
7.6集合
7.7指针和递归类型
7.7.1语法和操作
7.7.2悬空引用
7.7.3废料收集
7.8表
7.9文件和输入/输出
7.9.1交互式I/O
7.9.2基于文件的I/O
7.9.3正文I/O
7.10相等检测和赋值
7.11总结和注记
7.12复习
7.13练习
7.14有关参考文献

第8章子程序和控制抽象 427
8.1重温堆栈布局
8.2调用序列
8.2.1实例研究:在MIPS上实现C
8.2.2实例研究:在680x0上实现Pascal
8.2.3在线展开
8.3参数传递
8.3.1参数模式
8.3.2专用的参数
8.3.3函数返回
8.4通用型过程和模块
8.5异常处理
8.5.1异常的定义
8.5.2异常的传播
8.5.3实例:递归下降语法分析中的短语层恢复
8.5.4异常的实现
8.6协作程序
8.6.1堆栈分配
8.6.2转移
8.6.3迭代器
8.6.4实例:离散事件模拟
8.7总结和注记
8.8复习
8.9练习
8.10有关参考文献

第9章构造可运行程序 491
9.1后端编译器结构
9.1.1一个实例
9.1.2阶段和遍
9.2中间形式
9.2.1Diana
9.2.2GNU的RTL
9.3代码生成
9.3.1一个属性文法实例
9.3.2寄存器分配
9.4地址空间组织
9.5汇编
9.5.1指令发射
9.5.2为名字指定地址
9.6连接
9.6.1重定位和名字解析
9.6.2类型检查
9.7动态连接
9.7.1与定位无关的代码
9.7.2完全动态连接(惰性连接)
9.8总结和注记
9.9复习
9.10练习
9.11有关参考文献

第10章数据抽象和面向对象 529
10.1面向对象的程序设计
10.2封装和继承
10.2.1模块
10.2.2类
10.2.3类型扩展
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成员查找
10.4.4相关概念
10.5多重继承
10.5.1语义歧义性
10.5.2复本式继承
10.5.3共享继承
10.5.4混入式继承
10.6重温面向对象的程序设计
10.6.1Smalltalk的对象模型
10.7总结和注记
10.8复习
10.9练习
10.10有关参考文献

第11章非命令式程序设计模型:函数式和逻辑式语言 589
11.1历史渊源
11.2函数式程序设计
11.2.1Scheme简介
11.2.2重温求值顺序
11.2.3高阶函数
11.2.4理论基础
11.2.5函数式程序设计展望
11.3逻辑式程序设计
11.3.1Prolog
11.3.2理论基础
11.3.3逻辑式程序设计的展望
11.4总结和注记
11.5复习
11.6练习
11.7有关参考文献

第12章并发 659
12.1基础和动力
12.1.1简单历史
12.1.2多线程程序的不同情况
12.1.3多处理器体系结构
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.4消息传递
12.4.1通信对方的命名
12.4.2传送
12.4.3接收
12.4.4远程过程调用
12.5总结和注记
12.6复习
12.7练习
12.8有关参考文献

第13章代码改进 733
13.1代码优化的阶段
13.2窥孔优化
13.3基本块内的冗余删除
13.4全局冗余删除和数据流分析
13.4.1静态单赋值形式和全局值编号
13.4.2全局公共子表达式删除
13.5循环改进 I
13.5.1循环不变量
13.5.2归纳变量
13.6指令调度
13.7循环改进 II
13.7.1循环展开和软件流水线
13.7.2循环重排
13.8寄存器分配
13.9总结和注记
13.10复习
13.11练习
13.12有关参考文献

附录A本书中提到的程序设计语言 787

附录B语言设计和语言实现 795

参考书目 801

索引 827


本页相关材料为裘宗燕或原作者所有,可以自由用于学习和教学活动,其他使用必须得到正式许可。
2005.11