内容介绍
基本信息
| 书名: | 程序设计语言编译原理(D3版) |
| 作者: | 陈火旺//刘春林//谭庆平//赵克佳//刘越 | 开本: | |
| YJ: | 39 | 页数: | |
| 现价: | 见1;CY=CY部 | 出版时间 | 2014-12-01 |
| 书号: | 9787118022070 | 印刷时间: | |
| 出版社: | 国防工业出版社 | 版次: | |
| 商品类型: | 正版图书 | 印次: | |
内容提要 作者简介 精彩导读 D一章引论
1.1什么叫编译程序
使用过现代计算机的人都知道,多数用户是应用GJ语言来实现他们所需要的计算的。现代计算机系统一般都含有不止一个的GJ语言编译程序,对有些GJ语言甚至配置了几个不同性能的编译程序,供用户按不同需要进行选择。GJ语言编译程序是计算机系统软件Z重要的组成部分之一,也是用户Z直接关心的工具之一。
在计算机上执行一个GJ语言程序一般要分为两步:D一步,用一个编译程序把GJ语言翻译成机器语言程序;D二步,运行所得的机器语言程序求得计算结果。
通常所说的翻译程序是指这样的一个程序,它能够把某一种语言程序(称为源语言程序)转换成另一种语言程序(称为目标语言程序),而后者与前者在逻辑上是等价的。如果源语言是诸如FORTRAN、Pascal、C、Ada、Smalhalk或Java这样的“GJ语言”,而目标语言是诸如汇编语言或机器语言之类的“低级语言”,这样的一个翻译程序J称为编译程序。
GJ语言程序除了像上面所说的先编译后执行外,有时也可“解释’’执行。一个源语言的解释程序是这样的程序,它以该语言写的源程序作为输入,但不产生目标程序,而是边解释边执行源程序本身。本书将不对解释程序作专门的讨论。实际上,许多编译程序的构造与实现技术同样适用于解释程序。
根据不同的用途和侧重,编译程序还可进一步分类。专门用于帮助程序开发和调试的编译程序称为诊断编译程序(DiagDsticCompiler),着重于提高目标代码效率的编译程序”4优化编译程序(0ptiIIlizingCompiler)。现在很多编译程序同时提供了调试、优化等多种功能,用户可以通过“开关”进行选择。运行编译程序的计算机称宿主机,运行编译程序所产生目标代码的计算机称目标机。如果一个编译程序产生不同于其宿主机的机器代码,则称它为交叉编译程序(CrossCompiler)。如果不需重写编译程序中与机器无关的部分J能改变目标机,则称该编译程序为可变目标编译程序(RetargetableCompile,)。
SJ上D一个编译程序——FORrⅡ认N编译程序是20世纪50年代中期研制成功的。D时,人们普遍认为设计和实现编译程序是一件十分困难、令人生畏的事情。经过40年的努力,编译理论与技术得到迅速发展,现在已形成了一套比较成熟的、系统化的理论与方法,并且开发出了一些好的编译程序的实现语言、环境与工具。在此基础上设计并实现一个编译程序不再是高不可攀的事情。
本书主要介绍设计和构造编译程序的基本原理和方法。我们不想罗列太多细节性的材料,着重讲一些原理性的东西,但将反映一些ZX的进展。
…… 目录 D一章 引论 1.1 什么叫编译程序 1.2 编译过程概述 1.3 编译程序的结构 1.3.1 编译程序总框 1.3.2 表格与表格管理 I.3.3 出错处理 1.3.4 遍 1.3.5 编译前端与后端 1.4 编译程序与程序设计环境 1.5 编译程序的生成 D二章 GJ语言及其语法描述 2.1 程序语言的定义 2.1.1 语法 2.1.2 语义 2.2 GJ语言的一般特性 2.2.1 GJ语言的分类 2.2.2 程序结构 2.2.3 数据类型与操作 2.2.4 语句与控制结构 2.3 程序语言的语法描述 2.3.1 上下文无关文法 2.3.2 语法分析树与二义性 2.3.3 形式语言鸟瞰 练 习 D三章 词法分析 3.1 对于词法分析器的要求 3.1.1 词法分析器的功能和输出形式 3.1.2 词法分析器作为一个D立子程序 3.2 词法分析器的设计 3.2.1 输入、预处理 3.2.2 单词符号的识别:超前搜索 3.2.3 状态转换图 3.2.4 状态转换图的实现 3.3 正规表达式与有限自动机 3.3.1 正规式与正规集 3.3.2 确定有限自动机(DFA) 3.3.3 非确定有限自动机(NFA) 3.3.4 正规文法与有限自动机的等价性 3.3.5 正规式与有限自动机的等价性 3.3.6 确定有限自动机的化简 3.4 词法分析器的自动产生 3.4.1 语言LEX的一般描述 3.4.2 超前搜索 3.4.3 LEX的实现 练 习 D四章 语法分析——自上而下分析 4.1 语法分析器的功能 4.2 自上而下分析面临的问题 4.3 LL(1)分析法 4.3.1 左递归的消除 4.3.2 消除回溯、提左因子 4.3.3 LL(1)分析条件 4.4 递归下降分析程序构造 4.5 预测分析程序 4.5.1 预测分析程序工作过程 4.5.2 预测分析表的构造 4.6 LL(1)分析中的错误处理 练 习 D五章 语法分析——自下而上分析 5.1 自下而上分析基本问题 5.1.1 归约 5.1.2 规范归约简述 5.1.3 符号栈的使用与语法树的表示 5.2 算符优先分析 5.2.1 算符优先文法及优先表构造 5.2.2 算符优先分析算法 5.2.3 优先函数 5.2.4 算符优先分析中的出错处理 *5.3 LR分析法 5.3.1 LR分析器 5.3.2 LR(0)项目集族和LR(0)分析表的构造 5.3.3 SLR分析表的构造 5.3.4 规范LR分析表的构造 5.3.5 LALR分析表的构造 5.3.6 二义文法的应用 5.3.7 LR分析中的出错处理 5.4 语法分析器的自动产生工具YAcc 练 习 D六章 属性文法和语法制导翻译 6.1 属性文法 6.2 基于属性文法的处理方法 6.2.1 依赖图 6.2.2 树遍历的属性计算方法 6.2.3 一遍扫描的处理方法 6.2.4 抽象语法树 6.3 S一属性文法的自下而上计算 6.4 L一属性文法和自1;CY=CY向下翻译 6.4.1 翻译模式 6.4.2 自1;CY=CY向下翻译 6.4.3 递归下降翻译器的设计 6.5 自下而上计算继承属性 6.5.1 从翻译模式中去掉嵌入在产生式中间的动作一 6.5.2 分析栈中的继承属性 6.5.3 模拟继承属性的计算 6.5.4 用综合属性代替继承属性 练 习 D七章 语义分析和中间代码产生 7.1 中间语言 7.1.1 后缀式 7.1.2 图表示法 7.1.3 三地址代码 7.2 说明语句 7.2.1 过程中的说明语句 7.2.2 保留作用域信息 7.2.3 记录中的域名 7.3 赋值语句的翻译 7.3.1 简单算术表达式及赋值语句 7.3.2 数组元素的引用 7.3.3 记录中域的引用 7.4 布尔表达式的翻译 7.4.1 数值表示法 7.4.2 作为条件控制的布尔式翻译 7.5 控制语句的翻译 7.5.1 控制流语句 7.5.2 标号与got语句 7.5.3 CASE语句的翻译 7.6 过程调用的处理 7.7 类型检查 7.7.1 类型系统 7.7.2 类型检查器的规格说明 7.7.3 函数和运算符的重载 7.7.4 多态函数 练 习 D八章 符号表 8.1 符号表的组织与作用 8.1.1 符号表的作用 8.1.2 符号表的组织方式 8.2 整理与查找 8.2.1 线性表 8.2.2 对折查找与二叉树 8.2.3 杂凑技术 8.3 名字的作用范围 8.3.1 FORTRAN的符号表组织 8.3.2 Pascal的符号表组织 8.4 符号表的内容 练 习 D九章 运行时存储空间组织 9.1 目标程序运行时的活动 9.1.1 过程的活动 9.1.2 参数传递 9.2 运行时存储器的划分 9.2.1 运行时存储器的划分 9.2.2 活动记录 9.2.3 存储分配策略 9.3 静态存储分配 9.3.1 数据区 *9.3.2 公用语句的处理 *9.3.3 等价语句的处理 *9.3.4 地址分配 9.3.5 临时变量的地址分配 9.4 简单的栈式存储分配 9.4.1 C的活动记录 9.4.2 C的过程调用、过程进入、数组空间分配和过程返回 9.5 嵌套过程语言的栈式实现 9.5.1 非局部名字的访问的实现 9.5.2 参数传递的实现 9.6 堆式动态存储分配 9.6.1 堆式动态存储分配的实现 9.6.2 隐式存储回收 练 习 D十章 优化 10.1 概述 10.2 局部优化 10.2.1 基本块及流图 10.2.2 基本块的DAG表示及其应用. 10.3 循环优化 10.3.1 代码外提 10.3.2 强度削弱 10.3.3 删除归纳变量 *10.4 数据流分析 10.4.1 任意路径数据流分析 10.4.2 全路径数据流分析 10.4.3 数据流问题的分类 10.4.4 其它主要的数据流问题 10.4.5 利用数据流信息进行全局优化 练 习 D十一章 目标代码生成 11.1 基本问题 11.2 目标机器模型 11.3 一个简单的代码生成器 11.3.1 待用信息 11.3.2 寄存器描述和地址描述 11.3.3 代码生成算法 11.4 寄存器分配 11.5 DAG的目标代码 11.6 窥孔优化 练 习 D十二章 并行编译基础 12.1 并行计算机及其编译系统. 12.1.1 向量计算机 12.1.2 共享存储器多处理机 12.1.3 分布存储器大规模并行计算机 12.1.4 并行编译系统的结构 12.2 基本概念 12.2.1 向量与向量的次序 12.2.2 循环模型与索引空间 12.2.3 输入与输出集合 12.2.4 语句的执行顺序 12.3 依赖关系 12.3.1 依赖关系定义 12.3.2 语句依赖图 12.3.3 依赖距离、依赖方向与依赖层次 12.4 依赖关系问题 12.5 依赖关系测试 12.6 循环的向量化与并行化 12.7 循环变换技术 练 习 参考文献
目录
。。。。。。。。。。
《算法艺术与程序设计:从原理到实践》 在信息技术飞速发展的今天,理解和掌握高效的程序设计能力是每一位开发者必备的核心技能。本书《算法艺术与程序设计:从原理到实践》并非聚焦于特定编程语言的编译过程,而是致力于深入探索算法设计的精妙之处,并辅以丰富的实战案例,帮助读者构建坚实的计算机科学基础,提升解决复杂问题的能力。 本书涵盖了从基础到高级的各类经典算法,并系统地讲解了算法分析的理论框架。我们首先从“算法的本质”这一哲学高度出发,阐释算法在解决计算问题中的核心地位,介绍算法的时间复杂度和空间复杂度等基本度量标准,让读者对算法的效率有初步的认知。 随后,我们将进入数据结构的广阔领域。本书详细剖析了数组、链表、栈、队列等基础数据结构,并深入讲解了树(如二叉树、平衡二叉搜索树、B树)和图(如邻图、邻接表表示法)等更复杂的数据结构。对于每一种数据结构,我们都会从其内部构造、操作方式(插入、删除、查找)以及在实际问题中的应用场景进行详细分析,并辅以清晰的图示和伪代码,帮助读者理解其核心思想和实现细节。 接着,本书将笔触转向排序算法。从简单的冒泡排序、选择排序、插入排序,到更高效的快速排序、归并排序、堆排序,再到桶排序、基排序等非比较排序,我们不仅会逐一讲解它们的实现原理,还会深入探讨它们的稳定性、时间复杂度、空间复杂度以及各自的优缺点。通过对比分析,读者将能够根据具体问题选择最适合的排序算法。 查找算法也是本书的重要组成部分。除了顺序查找,我们将重点介绍二分查找及其变种,并探讨哈希表查找的原理和实现,理解其常数平均时间复杂度的优势。对于在树和图中的查找,如二叉搜索树查找、深度优先搜索(DFS)和广度优先搜索(BFS),本书也进行了详尽的阐述,并展示了它们在迷宫求解、网络遍历等问题中的应用。 在图算法方面,本书将带领读者领略图的魅力。除了DFS和BFS,我们还将深入讲解最短路径算法(如Dijkstra算法、Floyd-Warshall算法)、最小生成树算法(如Prim算法、Kruskal算法)以及拓扑排序等。这些算法在网络路由、资源分配、任务调度等领域有着广泛的应用,本书将通过具体的实例,帮助读者理解算法的设计思路和实现技巧。 本书还关注字符串匹配问题,介绍了朴素匹配算法、KMP算法以及Boyer-Moore算法,分析了它们的效率差异,并讲解了在实际文本处理中的应用。 此外,本书还将触及一些高级算法的概念,例如动态规划、贪心算法、回溯算法等。这些算法设计范式能够解决许多看似复杂但具有特定结构的问题。对于动态规划,我们将通过经典的背包问题、最长公共子序列问题等,阐释其“最优子结构”和“重叠子问题”的特点,以及如何构建状态转移方程。贪心算法则侧重于局部最优选择的累积,本书将通过活动选择问题、霍夫曼编码等案例进行说明。回溯算法则通过“试探”和“剪枝”来搜索解空间,本书将以N皇后问题、数独求解为例,展示其解决组合搜索问题的威力。 本书的另一大特色在于其实践导向。在每个算法章节的末尾,我们都会提供精心设计的编程练习,鼓励读者动手实现算法,并通过调试和测试来加深理解。这些练习从简单到复杂,覆盖了算法在各种实际场景中的应用,例如数据分析、图形学、人工智能初步等。本书还推荐了多种编程语言(如Python, Java, C++)的实现方式,让读者能够根据自己的喜好和项目需求进行选择。 除了算法本身,本书还强调算法思维的培养。我们鼓励读者在面对问题时,首先思考其本质,尝试将其抽象为计算模型,然后设计出最优的算法解决方案。通过大量的例题分析和解题思路的引导,本书旨在锻炼读者的逻辑思维能力、抽象思维能力和创新思维能力。 本书的语言风格力求清晰、准确、易懂,避免使用过于晦涩的术语,同时保留了必要的严谨性。我们相信,《算法艺术与程序设计:从原理到实践》将成为您在算法世界中探索和实践的得力助手,助您在程序设计的道路上走得更远、更稳。