前言
21世纪是信息和数据的时代,搜索引擎、云计算、大数据、人工智能等新技术热点不断涌现,各行各业对计算机应用人才的需求十分巨大。为了适应计算机教育不断更新、迅猛发展的需要,编者根据多年来讲授“编译原理”课程的教学经验,编写出适合计算机类专业学生的编译教材。本书第3版自出版至今已印刷10次发行近4万册,在国务院印发《统筹推进世界一流大学和一流学科建设总体方案》的背景下,在广大读者以及电子工业出版社的大力支持下,使得本书有机会修订再版。
“编译原理”是一门研究设计和构造编译程序原理和方法的课程,是计算机类各专业必备的一门重要专业基础课。这门课程蕴含着计算机科学中分析解决问题的思路、形式化问题和解决问题的方法,对应用软件和系统软件的设计与开发有一定的启发和指导作用;编译程序构造的原理和技术在软件工程、逆向工程、软件再工程、语言翻译、搜索引擎及其他领域中有着广泛的应用。
计算机程序如何从源代码变换成能执行的机器码?本书主要介绍设计和构造编译程序的一般原理、基本方法和主要实现技术。通过本课程的学习,使学生掌握编译系统的结构划分、工作流程及编译程序各组成部分的设计原理和常用的编译技术和方法;另外,书中编译器的实验环节,学生需要灵活运用数据结构、汇编语言、自动机理论等多门课程的知识,是培养锻炼学生解决实际问题能力的重要环节。有谁能想到当年编译器中词法自动生成工具Flex的作者之一埃里克·施密特能当上谷歌的CEO,现在Alphabet公司(谷歌母公司)的董事长希望编译原理课程为读者今后从事应用软件和系统软件的开发打下一定的理论和实践基础。
在本书编写过程中,充分考虑本课程的特点,力求将基本概念、基本原理和实现方法的思路阐述清楚、条理清晰、通俗易懂、便于自学,为了帮助学生掌握每章的重点和难点,每章附有小结、自测练习题和习题,书末附有自测练习题和习题参考答案。
本教材参考学时数为60~70学时,书中主要算法、例题、习题均以C语言为背景,其主要内容包括:编译程序结构及各部分功能、文法和语言的基本概念和表示、词法分析、语法分析、属性文法与语法制导翻译技术、符号表、运行时存储空间的组织、代码优化与目标代码生成、并行编译技术概述等。
“编译原理”是一门实践性较强的课程,为了理论联系实际,本书在附录C中拟定了实验内容、要求及实验参考算法,并给出了相应的编译实验程序的C语言框架。附录A、附录B中介绍的自动生成工具也能快速搭建编译器程序框架。
为了方便教学,本书提供电子课件及实验源代码,欢迎任课老师登录华信教育资源网http://www.hxedu.com.cn免费注册下载。
这次修订,除保持第3版简明、实用的风格并在文字上作进一步润饰之外,我们作了下面的修改:
(1) 增加了46节“语法分析程序的编写方法”;
(2) 修改了附录A词法分析程序生成器Lex,对自动生成工具Flex的工作流程、文件格式、规则匹配模式进行了详细描述,并配上示例。
(3) 修改了附录B语法分析程序生成器YACC,在语法分析自动生成部分,针对工具Bison增加了工作流程、Flex与Bison的联合使用,并对不同操作系统环境中安装、运行工具的方法进行归纳。读者可以按附录A、附录B中的介绍,实现下载、安装并使用自动生成工具,完成词法、语法分析实验。
以学习本课程总学时为64学时(52学时讲课+12学时上机实验)为例,建议各章的学时分配如下表所示。
受第3版作者的委托,参加本次修订工作的有刘铭、骆婷、徐丽萍、祝建华。在本书再版过程中,特别感谢胡伦俊老师的支持;还得到了华中科技大学计算机学院领导的关心和支持,感谢徐兰芳、周时阳等老师的宝贵意见;电子工业出版社的编辑和有关同志为本书的编辑再版付出了辛勤的劳动,在此对他们表示衷心的感谢。在成书过程中,编者参考了书末所列出的有关文献,在此,向这些书籍的作者一并表示感谢。
由于编者水平有限,书中难免有些疏忽和错误,恳请读者批评指正。
编者于华中科技大学计算机学院
商品简介
全书系统介绍了编译程序的一般构造原理、基本设计方法和主要实现技术。内容包括:文法和语言基本知识、词法分析程序的设计原理与构造方法、各种语法分析技术、语法制导翻译技术与中间代码生成、符号表的组织和管理、代码优化、运行时存储空间的组织与管理、目标代码生成、并行编译技术基本常识等。
作者简介
刘铭,华中科技大学计算机学院教授,1999年进入华中科技大学任教及科研,2012-2013年美国Syracuse大学访问学者。主持与某研究院合作项目5项、校教学改革项目1项、其他各类横向项目10余项。
目录
第1章编译概述
1.1翻译程序与编译程序
1.2编译过程和编译程序的基本结构
1.3编译程序的生成方法
1.4编译技术在软件开发中的应用
本章小结
扩展阅读
自测练习题1
习题1
第2章文法和语言的基本知识
2.1概述
2.2字母表和符号串的基本概念
2.2.1字母表和符号串
2.2.2符号串的运算
2.3文法和语言的形式定义
2.3.1形式语言
2.3.2文法的形式定义
2.3.3语言的形式定义
2.3.4规范推导和规范归约
2.3.5递归规则与文法的递归性
2.4短语、直接短语和句柄
2.4.1短语和直接短语
2.4.2句柄
2.5语法树与文法的二义性
2.5.1推导和语法树
2.5.2文法的二义性
2.5.3文法二义性的消除
2.6文法和语言的分类
2.7有关文法的实用限制和变换
本章小结
扩展阅读
自测练习题2
习题2
第3章词法分析与有穷自动机
3.1词法分析程序的功能
3.2单词符号及输出单词的形式
3.2.1语言的单词符号
3.2.2词法分析程序输出单词的形式
3.3语言单词符号的两种定义方式
3.3.1正规式与正规集
3.3.2正规文法与正规式
3.4正规式与有穷自动机
3.4.1确定有穷自动机(DFA)
3.4.2非确定有穷自动机(NFA)
3.4.3由正规表达式R构造NFA
3.4.4NFA确定化为DFA的方法
3.4.5DFA的化简
3.4.6有穷自动机到正规式的转换
3.5正规文法与有穷自动机
3.5.1右线性正规文法到有穷自动机的转换方法
3.5.2左线性正规文法到有穷自动机的转换方法
3.5.3有穷自动机到正规文法的转换方法
3.6词法分析程序的编写方法
本章小结
扩展阅读
自测练习题3
习题3
第4章语法分析
4.1语法分析程序的功能
4.2自上而下分析法
4.2.1非确定的自上而下分析法的思想
4.2.2文法的左递归性和回溯的消除
4.2.3某些非LL(1)文法到LL(1)文法的改写
4.2.4递归下降分析法
4.2.5预测分析法与预测分析表的构造
4.3自下而上分析法的一般原理
4.4算符优先分析法
4.4.1方法概述
4.4.2算符优先文法的定义
4.4.3算符优先关系表的构造
4.4.4算符优先分析算法的设计
4.4.5优先函数的构造
4.4.6算符优先分析法的局限性
4.5LR分析法
4.5.1LR分析器的工作原理和过程
4.5.2LR(0)分析法
4.5.3SLR(1)分析法
4.5.4LR(1)分析法
4.5.5LALR(1)分析法
4.5.6LR分析法对二义性文法的应用
4.5.7LR语法分析中的错误恢复技术
4.6语法分析程序的编写方法
本章小结
扩展阅读
自测练习题4
习题4
第5章语法制导翻译技术和中间代码生成
5.1概述
5.2属性文法
5.3语法制导翻译概述
5.4中间语言
5.4.1逆波兰式
5.4.2三元式和树形表示
5.4.3四元式和三地址代码
5.5自下而上语法制导翻译
5.5.1简单算术表达式和赋值语句的翻译
5.5.2布尔表达式的翻译
5.5.3控制语句的翻译
5.5.4循环语句的翻译
5.5.5简单说明语句的翻译
5.5.6含数组元素的赋值语句的翻译
5.5.7过程和函数调用语句的翻译
5.6递归下降语法制导的翻译
本章小结
扩展阅读
自测练习题5
习题5
第6章符号表的组织与管理
6.1符号表的作用
6.2符号表的组织
6.3符号表的建立和查找
本章小结
扩展阅读
自测练习题6
习题6
第7章代码优化
7.1优化概述
7.2局部优化
7.2.1划分基本块的方法
7.2.2基本块的DAG表示
7.2.3利用DAG进行基本块的优化处理
7.3循环优化
7.3.1程序流图与循环
7.3.2循环查找
7.3.3循环优化
7.4窥孔优化
本章小结
扩展阅读
自测练习题7
习题7
第8章运行时的存储组织与管理
8.1概述
8.2静态存储分配
8.3栈式存储分配
8.3.1简单栈式存储分配
8.3.2嵌套过程的栈式存储分配
8.4堆式存储分配
8.5临时变量的存储分配
本章小结
扩展阅读
自测练习题8
习题8
第9章目标代码生成
9.1概述
9.2假想的计算机模型
9.3简单代码生成器
9.3.1待用信息与活跃信息
9.3.2代码生成算法
9.3.3寄存器的分配
9.4代码生成器的自动生成技术
本章小结
扩展阅读
自测练习题9
习题9
第10章并行编译技术基本常识
10.1并行编译技术的引入
10.2并行编译系统的功能和结构
10.2.1并行编译系统的功能
10.2.2并行编译系统的结构
10.3向量语言编译技术
10.3.1向量语法处理
10.3.2向量结构优化
10.4共享存储器并行机并行编译技术
10.4.1预编译
10.4.2可再入的目标代码
本章小结
习题10
附录A词法分析程序生成器Lex
A.1词法分析程序生成器Lex简介
A.2Lex输入文件的格式
A.3正规表达式的Lex约定
A.4Lex源程序中的规则部分
A.5Flex的命令选项
A.6Lex程序示例
附录B语法分析程序生成器YACC
B.1语法分析程序YACC简介
B.2YACC输入文件的格式
B.3YACC各部分的书写格式
B.3.1定义部分
B.3.2规则部分
B.3.3辅助程序部分
B.4YACC的内置名称和定义机制
B.5Flex与Bison的联合使用
附录C编译程序实验
C.1词法分析
C.1.1实验目的
C.1.2实验要求
C.1.3词法分析程序的算法思想
C.1.4词法分析程序的C语言程序框架
C.2语法分析
C.2.1实验目的
C.2.2实验要求
C.2.3语法分析程序的算法思想
C.2.4语法分析程序的C语言程序框架
C.3语义分析
C.3.1实验目的
C.3.2实验要求
C.3.3语义分析程序的C语言程序框架
C.4算符优先分析法
C.5实验实例
C.6正规式转换成自动机的图形表示
C.6.1实验目的
C.6.2实验要求
C.6.3参考设计思路
C.6.4参考算法
附录D自测练习题与习题参考答案
参考文献
内容摘要
全书系统介绍了编译程序的一般构造原理、基本设计方法和主要实现技术。内容包括:文法和语言基本知识、词法分析程序的设计原理与构造方法、各种语法分析技术、语法制导翻译技术与中间代码生成、符号表的组织和管理、代码优化、运行时存储空间的组织与管理、目标代码生成、并行编译技术基本常识等。
以下为对购买帮助不大的评价