内容简介
本书系统地介绍了编译器构造的基本原理和实现技术,以C语言作为描述工具,详细讲解了编译器的各个组成部分,包括词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等。
书中结合大量实例,深入浅出地阐述了编译原理中的核心概念和算法,并提供了完整的编译器实现案例,帮助读者将理论知识与实际开发相结合,掌握构建编译器的实用技能。
目录
第1章 绪论
1.1 概述和历史
1.2 编译器可以做什么
1.3 编译器结构
1.4 程序设计语言的语法和语义
1.5 编译器设计与程序设计语言设计
1.6 编译器分类
1.7 影响编译器设计的因素
练习
第2章 一个简单编译器
2.1 Micro编译器结构
2.2 Micro词法分析器
2.3 Micro语法
2.4 递归下降语法分析
2.5 翻译Micro
练习
第3章 词法分析——理论和实践
3.1 概述
3.2 正则表达式
3.3 有限自动机和词法分析器
1.1 概述和历史
1.2 编译器可以做什么
1.3 编译器结构
1.4 程序设计语言的语法和语义
1.5 编译器设计与程序设计语言设计
1.6 编译器分类
1.7 影响编译器设计的因素
练习
第2章 一个简单编译器
2.1 Micro编译器结构
2.2 Micro词法分析器
2.3 Micro语法
2.4 递归下降语法分析
2.5 翻译Micro
练习
第3章 词法分析——理论和实践
3.1 概述
3.2 正则表达式
3.3 有限自动机和词法分析器
3.4 使用词法分析器生成器
3.5 实现时考虑的问题
3.6 将正则表达式转换为有限自动机
练习
第4章 文法和语法分析
4.1 上下文无关文法:概念与记号
4.2 上下文无关文法中的错误
4.3 转换扩展BNF文法
4.4 语法分析器与识别器
4.5 文法分析算法
练习
第5章 LL(1)文法及分析器
5.1 LL(1)Predict函数
5.2 LL(1)分析表
5.3 从LL(1)分析表构造递归下降分析器
5.4 LL(1)分析器驱动程序
5.5 LL(1)动作符号
5.6 文法的LL(1)化
5.7 LL(1)分析中的If-Then-Else问题
5.8 LLGen—LL(1)语法分析器生成器
5.9 LL(1)分析器的性质
5.10 LL(k)分析
练习
第6章 LR分析
6.1 移进-归约分析器
6.2 LR分析器
6.3 LR(1)分析
6.4 SLR(1)分析
6.5 LALR(1)分析
6.6 在移进-归约分析器中调用语义例程
6.7 使用语法分析器生成器
6.8 优化分析表
6.9 实用的LR(1)分析器
6.10 LR分析的性质
6.11 LL(1)和LALR(1)分析方法的比较
6.12 其他的移进-归约技术
练习
第7章 语义处理
7.1 语法制导翻译
7.2 语义处理技术
7.3 中间表示和代码生成
练习
第8章 符号表
8.1 符号表接口
8.2 基本实现技术
8.3 块结构符号表
8.4 块结构符号表的扩展
8.5 隐式声明
8.6 重载
8.7 前向引用
8.8 小结
练习
第9章 运行时存储组织
9.1 静态分配
9.2 栈分配
9.3 堆分配
9.4 内存中的程序布局
9.5 静态链簇和动态链簇
9.6 形式过程
练习
第10章 处理声明
10.1 声明处理的基本原则
10.2 简单声明的动作例程
10.3 高级特性的动作例程
练习
第11章 处理表达式和数据结构引用
11.1 概述
11.2 简单名字、表达式和数据结构的动作例程
11.3 高级特性的动作例程
练习
第12章 翻译控制结构
12.1 if语句
12.2 循环
12.3 编译exit语句
12.4 case语句
12.5 编译goto语句
12.6 异常处理
12.7 短路计算布尔表达式
练习
第13章 翻译过程和函数
13.1 简单子程序
13.2 向子程序传递参数
13.3 处理子程序调用和参数表
13.4 子程序调用
13.5 标号参数
13.6 名字参数
练习
第14章 属性文法和多遍翻译
14.1 属性文法
14.2 树结构的中间表示
练习
第15章 代码生成和局部代码优化
15.1 概述
15.2 寄存器和临时变量管理
15.3 简单的代码生成器
15.4 解释性代码生成
15.5 窥孔优化
15.6 从树结构生成代码
15.7 从dag生成代码
15.8 代码生成器的生成器
练习
第16章 全局优化
16.1 概述——目标与限制
16.2 优化子程序调用
16.3 循环优化
16.4 全局数据流分析
16.5 集成优化技术
练习
第17章 现实世界中的语法分析
17.1 压缩表
17.2 语法错误的恢复与修复
练习
附录 A Ada/CS 语言定义
附录 B ScanGen
附录 C LLGen用户 手册
附录 D LALRGen用户 手册
附录 E LLGen和LALRGen错误修复特性
附录 F 编译器开发实用工具
参考文献
3.5 实现时考虑的问题
3.6 将正则表达式转换为有限自动机
练习
第4章 文法和语法分析
4.1 上下文无关文法:概念与记号
4.2 上下文无关文法中的错误
4.3 转换扩展BNF文法
4.4 语法分析器与识别器
4.5 文法分析算法
练习
第5章 LL(1)文法及分析器
5.1 LL(1)Predict函数
5.2 LL(1)分析表
5.3 从LL(1)分析表构造递归下降分析器
5.4 LL(1)分析器驱动程序
5.5 LL(1)动作符号
5.6 文法的LL(1)化
5.7 LL(1)分析中的If-Then-Else问题
5.8 LLGen—LL(1)语法分析器生成器
5.9 LL(1)分析器的性质
5.10 LL(k)分析
练习
第6章 LR分析
6.1 移进-归约分析器
6.2 LR分析器
6.3 LR(1)分析
6.4 SLR(1)分析
6.5 LALR(1)分析
6.6 在移进-归约分析器中调用语义例程
6.7 使用语法分析器生成器
6.8 优化分析表
6.9 实用的LR(1)分析器
6.10 LR分析的性质
6.11 LL(1)和LALR(1)分析方法的比较
6.12 其他的移进-归约技术
练习
第7章 语义处理
7.1 语法制导翻译
7.2 语义处理技术
7.3 中间表示和代码生成
练习
第8章 符号表
8.1 符号表接口
8.2 基本实现技术
8.3 块结构符号表
8.4 块结构符号表的扩展
8.5 隐式声明
8.6 重载
8.7 前向引用
8.8 小结
练习
第9章 运行时存储组织
9.1 静态分配
9.2 栈分配
9.3 堆分配
9.4 内存中的程序布局
9.5 静态链簇和动态链簇
9.6 形式过程
练习
第10章 处理声明
10.1 声明处理的基本原则
10.2 简单声明的动作例程
10.3 高级特性的动作例程
练习
第11章 处理表达式和数据结构引用
11.1 概述
11.2 简单名字、表达式和数据结构的动作例程
11.3 高级特性的动作例程
练习
第12章 翻译控制结构
12.1 if语句
12.2 循环
12.3 编译exit语句
12.4 case语句
12.5 编译goto语句
12.6 异常处理
12.7 短路计算布尔表达式
练习
第13章 翻译过程和函数
13.1 简单子程序
13.2 向子程序传递参数
13.3 处理子程序调用和参数表
13.4 子程序调用
13.5 标号参数
13.6 名字参数
练习
第14章 属性文法和多遍翻译
14.1 属性文法
14.2 树结构的中间表示
练习
第15章 代码生成和局部代码优化
15.1 概述
15.2 寄存器和临时变量管理
15.3 简单的代码生成器
15.4 解释性代码生成
15.5 窥孔优化
15.6 从树结构生成代码
15.7 从dag生成代码
15.8 代码生成器的生成器
练习
第16章 全局优化
16.1 概述——目标与限制
16.2 优化子程序调用
16.3 循环优化
16.4 全局数据流分析
16.5 集成优化技术
练习
第17章 现实世界中的语法分析
17.1 压缩表
17.2 语法错误的恢复与修复
练习
附录 A Ada/CS 语言定义
附录 B ScanGen
附录 C LLGen用户 手册
附录 D LALRGen用户 手册
附录 E LLGen和LALRGen错误修复特性
附录 F 编译器开发实用工具
参考文献
重要申明:
本书由书友@锦小书发布分享,仅供学习交流使用,版权归原作者所有。如有侵权,请联系我们删除。
本书由书友@锦小书发布分享,仅供学习交流使用,版权归原作者所有。如有侵权,请联系我们删除。
📖 支持知识自由流动
每一本书的稳定访问,都离不开服务器、存储与带宽的长期维护。

