出版时间:2010-10 出版社:人民邮电出版社 作者:林奕 等著 页数:205
前言
编译原理是计算机领域中一门较为“古老”和“偏僻”的课程。说它“古老”,是因为其中很多主要技术都源自20世纪80年代以前的老技术;说它“偏僻”,是因为很多人也许永远也不会参与一个编译器的设计项目。虽然这门课程既“古老”又“偏僻”,但编译原理课程并没有成为“古董”。实际上,除了对传统意义上的编译优化技术进行深入研究之外,编译技术可以用在所有使用程序设计语言的地方,如浏览器对HTML、XML的解析,Adobe Acrobat和AutoCAD对格式化文档的解析,对:ISP、ASP、ActionScript等脚本语言的解析,分布式计算中DCOM、CORBA等接口定义语言(IDL)的翻译以及各种软件工具的设计。在虚拟机、多核编程、嵌入式程序设计等领域,编译技术也得到了广泛应用。因此,学好编译技术对于学生未来从事计算机软件相关的工作具有重要价值。编译原理是一门理论和实践性都很强的课程。在我们的教学实践中,教师和学生普遍感觉这门课程难讲、难学。为了更好地帮助学生理解和学习本课程的内容,本书在保证编译理论较为完整的同时,提供了很多例题并给出了详细的解答。同时,为了保持内容的简洁和清晰,本书对所讲述的理论和技术进行了有针对性的选择。
内容概要
本书系统地介绍了编译程序的基本结构、工作流程、关键算法与思想以及辅助设计工具。主要内容包括程序设计语言基本理论,词法分析、语法分析的主要模型和算法,语义分析和属性文法,语法制导的代码生成技术,运行时存储空间组织与管理以及代码生成和优化等。本书简洁明了地论述了编译器设计中采用的主要技术,并提供了大量例题及其解答。学习本书不仅可以使学生掌握编译思想和技术,而且也为加深对程序设计语言的理解和理解软件底层运行机理奠定了基础。书中每章都有难度适宜的习题,可以使学生更好地掌握所学知识。 本书可作为高等学校计算机及相关专业的教材,也可以作为考研学生的参考书。
书籍目录
第1章 绪论 1.1 汇编语言和高级程序设计语言 1.2 程序设计语言的编译技术 1.3 编译技术的基本构造与工作原理 1.4 程序设计语言的编译技术 1.4.1 词法分析 1.4.2 语法分析 1.4.3 语义分析 1.4.4 中间代码的生成 1.4.5 代码优化 1.4.6 目标代码生成 1.4.7 程序信息管理与错误检查和处理 1.5 编译程序的工作过程 1.6 文法及其分类 1.6.1 文法 1.6.2 文法及语言的Chomskey分类 1.6.3 规范推导 1.6.4.文法的二义性 1.7 本书内容简介 习题第2章 扫描器与正规语言 2.1 正规表达式 2.1.1 正规表达式代数 2.1.2 正规表达式的性质 2.2 有限状态自动机 2.3 非确定的有限状态自动机 2.4 将正规文法转换为自动机 2.5 NFDA的确定化及化简 2.6 从有限状态自动机转换到正规文法 2.7 有限自动机在计算机中的实现 2.8 扫描器实现中的特殊问题 2.8.1 输入符号表 2.8.2 扫描器自动机中的终止状态 2.8.3 删除空白符号与注释 2.8.4 输出单词 2.9 字符串表的实现 2.10 保留字 2.11 使用扫描器自动生成工具 2.12 例题解析 习题第3章 语法分析与前后文无关文法 3.1 下推自动机 3.1.1 停机条件的等价性 3.1.2 从前后文无关文法CFG构造PDA 3.2 LL(K)范文法 3.2.1 FIRST集与FOLLOW集 3.2.2 选择集合 3.3 文法的左递归性 3.4 公共左因子 3.5 用正规表达式运算符拓广CFG 3.6 递归下降分析程序 3.7 作为下推自动机的递归下降分析程序 3.8 自底向上的语法分析器的构造 3.8.1 自底向上的语法分析 3.8.2 LR(K)分析法 3.9 语法分析器生成工具简介 习题第4章 语法制导的代码生成 4.1 常见的中间语言简介 4.1.1 逆波兰表示 4.1.2 四元式 4.1.3 其他表示法 4.2 赋值语句的翻译 4.3 布尔表达式的翻译 4.4 程序流程控制语句的翻译 4.4.1 常见控制结构的翻译 4.4.2 语句标号及GOTO语句的翻译 4.4.3 多分支语句的翻译 4.5 含数组元素的算术表达式及赋值语句的翻译 4.5.1 下标变量地址的计算 4.5.2 含有下标变量的赋值语句的翻译 4.6 过程说明和过程调用的翻译 4.6.1 过程说明的翻译 4.6.2 实参和形参间的信息传递 4.6.3 过程语句的翻译 4.6.4 关于形实结合的进一步讨论 4.7 说明语句的翻译 4.7.1 类型说明(变量及数组定义)语句的翻译 4.7.2 数据类型定义语句的翻译 习题第5章 符号表 5.1 概述 5.2 符号表的内容、用途与创建过程 5.2.1 符号及其所表示的信息 5.2.2 符号表 5.2.3 符号表的用途 5.3 设计符号表时需要考虑的几个问题 5.4 符号表的创建和使用 5.4.1 符号表的创建及其在语义分析中的使用 5.4.2 符号表在内存分配和代码生成阶段的使用 5.5 符号表的数据结构与算法 5.5.1 符号表数据结构和算法的选择 5.5.2 哈希表设计 5.5.3 支持作用域的符号表 习题第6章 静态与运行时的存储管理 6.1 可执行程序的产生和执行过程 6.2 可执行程序的存储布局与操作 6.3 内存管理技术:静态内存管理 6.4 动态内存管理 6.5 栈式内存管理 6.5.1 递归调用引起的问题 6.5.2 栈 6.5.3 活动树 6.5.4 栈模型和活动树模型的比较 6.5.5 栈式内存管理的基本思想和必须解决的问题 6.5.6 活动记录和调用序列 6.6 堆式管理和垃圾回收技术 习题第7章 代码优化 7.1 概述 7.2 中间代码生成阶段的代码优化 7.3 代码优化的基本原则、思路和范围 7.4 基本块及其优化方法 7.4.1 基本块、基本块划分算法和控制流图 7.4.2 基于DAG模型的基本块优化技术 7.4.3 基于值编号技术的基本块优化算法 7.4.4 基本块中的其他优化 7.4.5 更大范围的优化 7.5 数据流分析 7.5.1 基于数据流分析的冗余表达式删除 7.5.2 活性分析 7.5.3 过程间数据流分析 7.6 循环优化 7.6.1 循环的识别 7.6.2 循环优化 习题第8章 代码生成 8.1 代码生成的基本功能 8.2 代码生成的不同方式 8.3 代码生成的关键技术简介 8.3.1 代码生成技术需要考虑的内容 8.3.2 代码生成的关键技术 8.3.3 指令筛选技术简介 8.3.4 指令调度技术简介 8.3.5 寄存器分配技术简介 8.4 代码生成、软件调试和其他技术 习题参考文献
章节摘录
插图:1.狭义的编译器概念高级语言为程序员提供了比汇编语言更为方便的程序设计工具,使程序员的工作效率得到了极大的提高。然而,对于底层计算机硬件系统来说,CPU仍然只能执行由二进制指令序列表示的程序代码。这样一来,高级语言编写的程序只有被翻译为具有相同功能的汇编语言程序或被直接翻译为可执行指令序列后,才能被CPU真正地执行。由于高级语言程序和CPU指令系统在形式和内容上的差别远比汇编语言和二进制指令的差别大得多,因此需要更为复杂的技术将其翻译为等价的可执行指令序列(或先翻译为汇编程序,再由汇编器将其转换为可执行指令序列)。编译器就是实现这种把高级语言编写的程序翻译为具有相同功能的底层指令序列或汇编程序的软件系统。编译器设计时采用的各种技术统称为编译技术。一般来说,编译器需要具有两个基本的功能。判断程序的合法性。识别输入的源程序是否符合语言定义的要求。例如,对于C语言程序来说,变量是否以字母开头,if语句是否包含了合法的表达式等。程序的等价翻译和错误提示。如果源程序合法,则可将其转换为另一种语言表示的程序(称为目标程序)。否则,将给出程序的出错提示,以方便软件开发人员查找和修改程序中的错误。
编辑推荐
《编译原理》从总体上介绍了编译器各子系统的工作原理与相互关系,着重论述了词法分析、语法分析、语义分析、代码优化和代码生成等关键阶段的核心原理、算法与机制。《编译原理》内容全面,并结合实际软件运行环境展开论述,做到重视理论但不脱离实际,便于学生从整体和实际软件系统的角度理解编译器的内在工作机理。注重编译器全系统工作原理的完整介绍全面讲解编译器设计中的关键模型和算法结合实例介绍实际目标代码结构与执行机理
图书封面
评论、评分、阅读与下载