本书以通俗易懂的语言介绍编译原理的理论和常用的方法与技术,并着重介绍各种编译方法的实现途径。全书共分10章,包括形式语言基础、词法分析、语法分析、语义分析及代码生成、符号表管理、运行时的存储分配,以及代码优化等。考虑目前学计算机专业的学生对C语言比较了解,本书中以C语言为雏形设计了一种TEST语言,并在介绍全书内容时,都用TEST语言进行分析与实现,使编译原理的抽象性通过TEST语言编译器的实现而具体化,从而使读者轻松掌握编译原理。
本书理论与实践并重,内容深入浅出,便于自学。每章后都提供了适量的习题。
目录
- 第1章编译概述
- 1.1程序设计语言
- 1.2翻译程序
- 1.3编译程序的组成
- 1.3.1词法分析
- 1.3.2语法分析
- 1.3.3语义分析及中间代码生成
- 1.3.4代码优化
- 1.3.5目标代码生成
- 1.3.6符号表管理
- 1.3.7错误处理
- 1.4编译程序的结构
- 1.4.1单遍编译程序
- 1.4.2多遍编译程序
- 1.4.3编译程序分遍的优缺点
- 1.4.4“端”的概念
- 1.5编译程序的前后处理器
- 1.5.1预处理器
- 1.5.2汇编程序
- 1.5.3连接加载程序
- 1.6TEST语言与编译器
- 1.6.1TEST语言
- 1.6.2TEST编译器
- 1.6.3TEST机
- 习题
- 第2章文法和语言
- 2.1字母表和符号串
- 2.1.1字母表
- 2.1.2符号串
- 2.1.3符号串及其集合的运算
- 2.2文法
- 2.2.1文法形式定义
- 2.2.2文法的EBNF表示
- 2.3推导
- 2.3.1直接推导定义
- 2.3.2推导定义
- 2.3.3规范推导
- 2.4句型和句子
- 2.5语言
- 2.6递归规则与递归文法
- 2.6.1递归规则
- 2.6.2递归文法
- 2.7短语、简单短语和句柄
- 2.8语法树
- 2.9子树与短语
- 2.10由树构造推导过程
- 2.11文法的二义性
- 2.12有关文法的实用限制
- 2.13文法和语言分类
- 习题
- 第3章词法分析
- 3.1词法分析的功能
- 3.2程序语言的单词符号种类及词法分析输出
- 3.3正则文法及状态图
- 3.3.1状态图
- 3.3.2状态图的用法
- 3.4词法分析程序的设计与实现
- 3.4.1TEST语言的词法规则及状态图
- 3.4.2TEST语言词法分析程序的构造
- 3.4.3TEST语言的词法分析程序实现
- 3.5正则表达式
- 3.5.1正则表达式定义
- 3.5.2正则文法到正则表达式的转换
- 3.6有穷自动机
- 3.6.1确定的有穷自动机
- 3.6.2不确定的有穷自动机
- 3.6.3NFA到DFA的转化
- 3.6.4正则表达式与有穷自动机的等价性
- 3.6.5确定的有穷自动机的化简
- 3.6.6根据DFA构造词法分析程序
- 3.7词法分析程序的自动生成器LEX
- 3.7.1用LEX语言表达正则表达式
- 3.7.2LEX源程序结构
- 3.7.3使用LEX生成TEST语言的词法分析程序
- 习题
- 第4章语法分析——自顶向下分析
- 4.1自顶向下分析方法
- 4.2FIRST集合和FOLLOW集合
- 4.2.1FIRST集合定义及构造方法
- 4.2.2FOLLOW集合定义及构造方法
- 4.3递归下降分析
- 4.3.1递归下降分析的基本方法
- 4.3.2递归下降分析中存在的问题及解决方法
- 4.3.3TEST语言的递归下降分析实现
- 4.4LL(1)分析方法
- 4.4.1LL(1)分析的基本方法
- 4.4.2LL(1)分析表的构造方法
- 4.4.3LL(1)分析的主要问题及解决方法
- 习题
- 第5章语法分析——自底向上分析
- 5.1规范推导、规范句型和规范归约
- 5.2自底向上分析方法的一般过程
- 5.3LR分析方法
- 5.3.1LR分析器逻辑结构
- 5.3.2LR分析表构成
- 5.3.3LR分析过程
- 5.4LR(0)分析器
- 5.4.1活前缀和可归前缀
- 5.4.2LR(0)项目
- 5.4.3构造识别活前缀的有穷自动机
- 5.4.4LR(0)分析表的构造
- 5.4.5LR(0)分析器的工作过程
- 5.4.6LR(0)文法
- 5.5SLR(1)分析器
- 5.5.1SLR解决方法的基本思想
- 5.5.2SLR(1)分析表的构造
- 5.6LR(1)分析器
- 5.6.1LR(1)项目
- 5.6.2LR(1)项目集规范族构造算法
- 5.6.3LR(1)分析表的构造
- 5.7LALR(1)分析器
- 5.8语法分析程序的自动生成工具——YACC
- 5.8.1YACC源程序结构
- 5.8.2YACC源程序说明部分的组成
- 5.8.3YACC源程序的语法规则部分的组成
- 5.8.4YACC源程序的程序部分组成
- 5.8.5二义性文法的处理
- 5.8.6YACC示例运行
- 习题
- 第6章语法制导翻译技术
- 6.1翻译文法
- 6.2语法制导翻译
- 6.3自顶向下语法制导翻译
- 6.3.1递归下降翻译
- 6.3.2LL(1)翻译器
- 6.4属性翻译文法
- 6.4.1综合属性
- 6.4.2继承属性
- 6.4.3属性翻译文法定义
- 6.4.4属性翻译文法举例——算术表达式的翻译
- 6.5属性文法的自顶向下翻译
- 6.5.1L-属性翻译文法
- 6.5.2L-属性翻译文法的翻译实现——递归下降翻译
- 6.5.3L-属性翻译文法的翻译实现——LL(1)法
- 6.6自底向上语法制导翻译
- 6.6.1波兰翻译
- 6.6.2S-属性文法
- 6.6.3S-属性波兰翻译文法的翻译实现
- 习题
- 第8章程序运行时的存储组织及管理
- 第9章语义分析和代码生成
- 0章代码优化
- 附录ATEST语言文法规则
- A1TEST语言词法规则
- A2TEST的语法规则
- A3TEST的语义和代码生成规则
- 附录B词法分析程序
- 附录C语法分析程序
- 附录D语义及代码生成程序
- 附录ETEST抽象机模拟器完整程序
- 参考文献