第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.3 与编译器有关的程序
1.3.1 解释程序
1.3.2 汇编程序
1.3.3 链接和装入程序
1.3.4 预处理器
1.3.5 调试程序
1.4 一个简单的编译程序
1.4.1 语言概述
1.4.2 词法分析程序
1.4.3 递归下降语法分析
1.4.4 中间代码生成及优化
练习
第2章 词法分析
2.1 扫描处理及缓冲
2.2 正规表达式
2.3 有限自动机
2.3.1 确定有限自动机
2.3.2 非确定有限自动机
2.4 从正则表达式到有限自动机
2.4.1 从正规式到NFA
2.4.2 从NFA到DFA
2.4.3 状态数最小化
2.5 词法分析中要解决的几个问题
2.6 利用LEX建立词法分析器
练习
第3章 上下文无关文法与语言
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 乔姆斯基层次及上下文无关文法的局限
练习
第4章 自顶向下语法分析
4.1 递归程序实现预测语法的分析器
4.2 非递归预测分析法
4.3 First集和Follow集概念及构造
4.4 预测分析表构造
4.5 LL(1)文法
4.6 预测分析中的错误恢复方法
练习
第5章 自下而上语法分析
5.1 自底向上方法概述
5.2 算符优先分析法
5.2.1 算符优先分析算法
5.2.2 优先函数
5.2.3 算符优先分析中的出错处理
5.3 LR语法分析器基本思想与概念
5.3.1 LR文法
5.4 SLR语法分析表构造
5.5 规范LR语法分析表构造
5.6 IALR语法分析表构造
5.7 LR语法分析表的压缩
5.8 LR语法分析中的错误恢复
5.9 二义性文法应用
5.9.1 使用优先级与结合规则解决动作的冲突
5.9.2 悬空else的二义性
5.9.3 特例产生式引起的二义性
5.10 语法分析器自动生成工具YACC
5.10.1 YACC工具介绍
5.10.2 用YA,CC处理二义性
5.10.3 用LEX建立YACC的词法分析器
5.10.4 YACC中的错误恢复
练习
第6章 语法制导翻译
6.1 语法制导定义
6.2 属性的计算
6.2.1 属性和属性语法
6.2.2 依赖图
6.2.3 计算次序
6.2.4 自底向上计算继承属性
6.2.5 临时属性的计算和外部数据结构
6.2.6 Knuth定理
6.3 类型检查
6.3.1 类型系统
6.3.2 类型表达式的等价
6.3.3 类型推论和类型检查
6.3.4 类型转换
6.3.5 重载
6.3.6 多态函数
6.4 符号表
6.4.1 符号表的表项和符号表的操作
6.4.2 声明和同层声明
6.4.3 符号表的数据结构
6.4.4 作用域规则和块结构
练习
第7章 运行时环境
7.1 存储组织及存储分配策略
7.2 静态分配
7.3 栈式
7.3.1 没有局部过程的基于栈的环境
7.3.2 带有局部过程的基于栈的运行时环境
7.3.3 带有过程参数的基于栈的运行时环境
7.4 堆式
7.5 参数传递
7.5.1 值传递
7.5.2 引用传递
7.5.3 值-结果传递
7.5.4 名字传递
练习
第8章 中间代码生成
8.1 中间语言
8.1.1 后缀式
8.1.2 图表示法
8.1.3 三地址代码
8.2 说明语句
8.2.1 过程中的说明语句
8.2.2 保留作用域信息
8.2.3 记录中的域名
8.3 赋值语句的翻译
8.3.1 简单算术表达式及赋值语句
8.3.2 数组元素的引用
8.3.3 记录中域的引用
8.4 布尔表达式的翻译
8.4.1 数值表示法
8.4.2 作为条件控制的布尔式表达翻译
8.5 控制语句的翻译
8.5.1 控制流语句
8.5.2 标号与goto语句
8.5.3 CASE语句的翻译
8.6 过程调用的处理
练习
第9章 代码生成和代码优化
9.1 代码生成器中的基本问题
9.2 目标机器
9.3 寄存器与临时单元的管理
9.4 一个简单的代码生成器
9.5 一个简单的寄存器分配方案
9.6 代码生成器的自动化技术
9.6.1 基于文法的代码生成器
9.7 代码优化
9.7.1 分析器优化
9.7.2 线性优化
9.7.3 语法树上的优化
练习
参考文献