编辑推荐
适读人群 :高等学校计算机类专业学生,软件工程技术人员 《编译技术》重点介绍了编译器基础软件框架LLVM及相关工具的使用实例。书中给出了大量代码,以帮助读者掌握编译器构造的相关技术。以提高学生的动手实践能力为重点,鼓励学生尝试设计并实现一个新的语言编译器。
内容简介
《编译技术》主要内容编排如下:第1章介绍编译器整体结构;第2章介绍一个简单的编译程序构造过程;第3章至第6章分别介绍词法分析、语法解析、语义分析、代码生成等过程中所面临的技术问题及解决方案;第7章介绍运行时存储空间的组织与分配;第8章介绍LCC(Learning Compiler with C)语言编译程序的C语言实现。本书在强调基础理论的同时,力求反映编译技术方面的最新成果,书中给出了大量代码,以帮助读者掌握编译器构造的相关技术。
本书文字简洁易懂,内容循序渐进、深入浅出,便于自学,适合作为高等学校计算机类专业的教材,也可作为软件工程技术人员的参考书。
本书配套授课电子课件,需要的教师可登录www.cmpedu.com免费注册,审核通过后下载,或联系编辑索取。
目录
出版说明
前言
第1章编译概述
1.1编译器与解释器
1.2编译器的组织与结构
1.2.1词法分析
1.2.2语法分析
1.2.3语义分析
1.2.4代码生成与优化
1.2.5符号表管理及错误处理
1.3总结与展望
1.4习题
第2章实现一个简单编译器
2.1语言定义
2.1.1词法定义
2.1.2语法定义
2.2简单编译器的结构
2.3词法分析
2.4递归下降语法解析
2.4.1规则的程序实现
2.4.2预测所选的规则
2.5抽象语法树
2.6语义分析
2.6.1符号表
2.6.2类型检查与转换
2.7中间代码生成
2.7.1三地址代码
2.7.2树的遍历与代码生成
2.8习题
第3章词法分析器
3.1词法分析器概述
3.2单词的识别
3.3状态转换图
3.4正则表达式
3.4.1字母表的概念
3.4.2正则表达式的形式化定义
3.5有限状态自动机与词法分析器
3.5.1确定的有限状态自动机
3.5.2正则表达式到有限状态自动机的转换
3.5.3词法分析器的自动机实现
3.6词法分析器的自动生成
3.6.1Lex中的单词符号定义
3.6.2Lex中的字符处理
3.6.3其他工具简介
3.7习题
第4章文法与语法解析
4.1文法和语法的定义
4.1.1文法的定义
4.1.2上下文无关文法
4.1.3推导与规约
4.1.4语法树
4.2自上而下的语法分析
4.2.1左递归的消除
4.2.2提取公共左因子
4.2.3递归下降分析法
4.2.4表驱动的预测分析法
4.3自下而上的语法分析
4.3.1LR分析过程
4.3.2LR(0)分析表的构造
4.3.3SLR(1)分析表的构造
4.4语法解析相关工具
4.4.1YACC
4.4.2ANTLR
4.5习题
第5章语义分析
5.1语义分析概况
5.1.1语义分析的功能
5.1.2语义分析方法
5.2构建抽象语法树
5.2.1单一类型语法树的设计
5.2.2多类型语法树的设计
5.2.3多类型语法树的遍历
5.3符号表
5.3.1符号表的数据结构
5.3.2哈希符号表的实现
5.3.3分程序结构的作用域
5.3.4分程序结构符号表的实现
5.4说明语句分析
5.4.1简单变量声明
5.4.2结构类型的声明
5.5赋值语句分析
5.6控制语句分析
5.6.1if语句
5.6.2while语句
5.6.3for语句
5.6.4过程调用语句
5.7习题
第6章LLVM代码生成与优化
6.1LLVM系统
6.1.1LLVM框架设计理念
6.1.2LLVM中间代码表示
6.1.3LLVM代码示例分析
6.1.4LLVM工具集
6.2LLVM代码生成
6.2.1常量、局部变量的代码生成
6.2.2表达式的代码生成
6.2.3函数声明与调用
6.3优化概述
6.4基本块与流图
6.4.1基本块
6.4.2程序流图
6.5基本块内的优化
6.6循环优化
6.6.1必经结点
6.6.2回边及循环的查找
6.6.3循环的优化
6.7习题
第7章运行时存储空间的组织与分配
7.1存储组织
7.1.1运行时内存的划分
7.1.2活动记录
7.1.3存储分配策略
7.1.4变量的存储分配
7.2栈式分配
7.2.1只含半静态变量的栈式分配
7.2.2半动态变量的栈式分配
7.3嵌套子程序的存储组织
7.4参数传递方式
7.4.1参数传递的语义模型
7.4.2参数传递的实现模型
7.5习题
第8章LCC语言编译程序的实现
8.1LCC语言简介
8.2词法分析
8.3语法分析
8.3.1LCC语言文法说明
8.3.2YACC与Lex之间的约定
8.3.3抽象语法树结点设计
8.3.4构建抽象语法树
8.3.5文法动作说明
8.4语义分析
8.4.1符号表的实现
8.4.2语义检查
8.4.3数组设计与检查
8.5中间代码生成
8.5.1LLVM代码生成接口
8.5.2LCC语言的代码生成框架
8.5.3表达式的代码生成
8.5.4输入输出语句的代码生成
8.6LCC语言代码运行测试
8.6.1变量作用域测试
8.6.2控制语句测试
8.6.3整型数组测试
8.6.4字符串数组测试
8.7习题
附录缩略语
参考文献
前言/序言
“编译原理”课程是计算机专业一门重要的专业基础课,也是计算机系统软件课程中非常重要的一个分支。在众多的原理性学习课程中,编译原理主要承担了语言实现原理、方法和技术的介绍。该课程内容有一定深度和难度,且综合性比较强,对学生专业知识掌握情况要求也比较高,学生在学习过程中会感到内容抽象、算法复杂,是一门公认的比较难学、比较难教的课程。很多学生也认为“编译原理”只能应用在实现程序语言的编译器上,而他们以后可能不会在编译器及其相关领域方面钻研,所以学习兴趣不高。
其实这是一种误解。通过学习编译程序的构造原理和技术,将有助于深刻理解和正确使用程序设计语言。如正规式和有穷自动机在文本编辑器中的广泛应用。有穷自动机在字符串查找中的运用、必经结点算法在网络中的运用,以及由文法来定义网络协议等。
此外,虽然编译原理基本内容已相对比较成熟,算法相对固定,但编译技术作为计算机语言发展的支柱,是计算机科学中发展最迅速、最成熟的一个分支,特别是近几年大量编译辅助工具应运而生,大大简化了编译器的实现过程。
基于以上因素,本书在编排时以提高学生的动手实践能力为重点,在选择性讲解必要的理论及算法的同时,鼓励学生尝试设计并实现一个新的语言编译器,在此基础上将编译程序中的各种算法和技术应用到各个领域,从而激发学生的创造性思维,培养学生的创新能力,为今后的学习、工作打下坚实的基础。
本书在总体上介绍现代编译系统构造过程中的基本实现技术和一些自动构造工具,旨在让学生掌握编译器构造技术的最新进展,并在此基础上能够根据实际需求快速而高效地实现特定语言的编译器。
全书章节安排如下:第1章是编译器的总体介绍,即现代编译器是如何组织的,其典型结构是什么。第2章给出了一个比较简单的例子,其目的是使学生对编译器各组成部分有一个感性的认识,使其理解不光停留在理论层面,而是付诸于实践。第3章至第6章则分别对典型编译器的各组成部分的实现细节及最新技术进行了介绍。第7章从理论的角度对运行时存储空间的组织与分配进行了介绍。作为总结,第8章给出了一个编译器设计与构造的完整实例,即以C语言为基础,设计并实现了LCC(LearningCompilerwithC)语言的编译程序,以帮助学生从整体上理解并掌握编译器构造相关技术,能够独立地完成编译器开发任务。作为教材,每章后均附有习题。书中除介绍了LEX、YACC使用方法外,还重点介绍了编译器基础软件框架LLVM及相关工具的使用实例。
本书作为高等院校编译技术的教材,体现了编译课程改革的方向。本课程建议授课学时为64学时,其中实验学时不少于20学时,并要求先修C语言、数据结构及汇编语言等课程。
本书由周尔强、周帆、韩蒙、陈文宇编写;全书由陈文宇组织与审阅。
对于书中存在的不足之处,恳请读者批评指正。
编译技术 电子书 下载 mobi epub pdf txt