小苏子
小苏子PDF在线图书

编译原理(第2版)[Compilers:Principle,Techniques and Tools] 内容简介

编译原理(第2版)[Compilers:Principle,Techniques and Tools] 内容简介

编译原理(第2版)[Compilers:Principle,Techniques and Tools] 目录

编译原理(第2版)[Compilers:Principle,Techniques and Tools] 精彩文摘

《计算机科学丛书:编译原理(第2版)》全面、深入地探讨了编译器设计方面的重要主题,包括词法分析、语法分析、语法制导定义和语法制导翻译、运行时刻环境、目标代码生成、代码优化技术、并行性检测以及过程间分析技术,并在相关章节中给出大量的实例。与上一版相比,《计算机科学丛书:编译原理(第2版)》进行了全面的修订,涵盖了编译器开发方面的全新进展。每章中都提供了大量的系统及参考文献。《计算机科学丛书:编译原理(第2版)》是编译原理课程方面的经典教材,内容丰富,适合作为高等院校计算机及相关专业本科生及研究生的编译原理课程的教材,也是广大技术人员的很好参考读物。《计算机科学丛书:编译原理(第2版)》是编译原理课程方面的经典教材,内容丰富,适合作为高等院校计算机及相关专业本科生及研究生的编译原理课程的教材,也是广大技术人员的很好参考读物。前言第1章 引论1.1 语言处理器1.2 一个编译器的结构1.2.1 词法分析1.2.2 语法分析1.2.3 语义分析1.2.4 中间代码生成1.2.5 代码优化1.2.6 代码生成1.2.7 符号表管理1.2.8 将多个步骤组合成趟1.2.9 编译器构造工具1.3 程序设计语言的发展历程1.3.1 走向高级程序设计语言1.3.2 对编译器的影响1.3.3 1.3节的练习1.4 构建一个编译器的相关科学1.4.1 编译器设计和实现中的建模1.4.2 代码优化的科学1.5 编译技术的应用1.5.1 高级程序设计语言的实现1.5.2 针对计算机体系结构的优化1.5.3 新计算机体系结构的设计1.5.4 程序翻译1.5.5 软件生产率工具1.6 程序设计语言基础1.6.1 静态和动态的区别1.6.2 环境与状态1.6.3 静态作用域和块结构1.6.4 显式访问控制1.6.5 动态作用域1.6.6 参数传递机制1.6.7 别名1.6.8 1.6节的练习1.7 第1章的总结1.8 第1章的参考书目第2章 一个简单的语法制导翻译器2.1 引言2.2 语法定义2.2.1 文法定义2.2.2 推导2.2.3 语法分析树2.2.4 二义性2.2.5 运算符的结合性2.2.6 运算符的优先级2.2.7 2.2节的练习2.3 语法制导翻译2.3.1 后缀表示2.3.2 综合属性2.3.3 简单语法制导定义2.3.4 树的遍历2.3.5 翻译方案2.3.6 2.3节的练习2.4 语法分析2.4.1 自顶向下分析方法2.4.2 预测分析法2.4.3 何时使用产生式2.4.4 设计一个预测语法分析器2.4.5 左递归2.4.6 2.4节的练习2.5 简单表达式的翻译器2.5.1抽象语法和具体语法2.5.2调整翻译方案2.5.3非终结符号的过程2.5.4 翻译器的简化2.5.5 完整的程序2.6 词法分析2.6.1 剔除空白和注释2.6.2 预读2.6.3 常量2.6.4 识别关键字和标识符2.6.5 词法分析器2.6.6 2.6节的练习2.7 符号表2.7.1 为每个作用域设置一个符号表2.7.2 符号表的使用2.8 中间代码生成2.8.1 两种中间表示形式2.8.2 语法树的构造2.8.4 三地址码2.8.5 2.8节的练习2.9 第2章的总结第3章 词法分析3.1 词法分析器的作用3.1.1 词法分析及解析3.1.2 词法单元、模式、词素3.1.3 词法单元的属性3.1.4 词法错误3.1.5 3.1节的练习3.2 输入缓冲3.2.1 缓冲区对3.2.2 哨兵标记3.3 词法单元的规约3.3.1 串和语言3.3.2 语言上的运算3.3.3 正则表达式3.3.4 正则定义3.3.5 正则表达式的扩展3.3.6 3.3节的练习3.4 词法单元的识别3.4.1 状态转换图3.4.2 保留字和标识符的识别3.4.3 完成我们的连续性例子3.4.4 基于状态转换图的词法分析器的体系结构3.4.5 3.4节的练习3.5 词法分析器生成工具Lex3.5.1 Lex的使用3.5.2 Lex程序的结构3.5.3 Lex中的冲突解决3.5.4 向前看运算符3.5.5 3.5节练习3.6 有穷自动机3.6.1 不确定的有穷自动机3.6.2 转换表3.6.3 NFA接受输入字符串3.6.4 确定的有穷自动机3.6.5 3.6节的练习3.7 从正则表达式到自动机3.7.1 从NFA到DFA的转换3.7.2 NFA的模拟3.7.3 NFA模拟效率3.7.4 从正则表达式构造NFA3.7.5 字符串处理算法的效率3.7.6 3.7节的练习3.8 词法分析器生成工具的设计3.8.1 被生成的词法分析器的结构3.8.2 基于NFA的模式匹配3.8.3 词法分析器使用的DFA3.8.4 实现向前看运算符3.8.5 3.8的练习3.9 基于DFA的模式匹配器的优化3.9.1 NFA的重要状态3.9.2 根据抽象语法树计算得到的函数3.9.3 计算nullable、firstpos及lastpos3.9.4 计算followpos3.9.5 根据正则表达式构建DFA3.9.6 最小化一个DFA的状态数3.9.7 词法分析器的状态最小化3.9.8 在DFA模拟中用时间换取空间3.9.9 3.9节的练习3.9.10 第3章的总结3.11 第3章参考文献第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.2.5 二义性4.2.6 验证文法生成的语言4.2.7上下文无关文法和正则表达式4.2.8 4.2节的练习4.3 设计文法4.3.1 词法分析和语法分析4.3.2 消除二义性4.3.3 左递归的消除4.3.4 提取左公因子4.3.5 非上下文无关的语言构造4.3.6 4.3节的练习4.4 自顶向下的语法分析4.4.1 递归下降的语法分析4.4.2 FIRST和FOLLOW4.4.3 LL(1)文法4.4.4 非递归的预测分析4.4.5 预测分析中的错误恢复4.4.6 4.4节的练习4.5 自底向上的语法分析4.5.1 归约4.5.2 句柄剪枝4.5.3 移入-归约语法分析技术4.5.4 移入-归约语法分析中的冲突4.5.5 4.5节的练习4.6 LR语法分析技术介绍:简单LR技术4.6.1 为什么使用LR语法分析器?4.6.2 项和LR(0)自动机4.6.3 LR-语法分析算法4.6.4 构造SLR-分析表4.6.5 可行前缀4.6.6 4.6节的练习4.7 更强大的LR语法分析器4.7.1 规范LR(1)项4.7.2 构造LR(1)项集4.7.3 规范LR(1)分析表4.7.4 构造LALR语法分析表4.7.5 LALR语法分析表的高效构造方法4.7.6 LR语法分析表的压缩4.7.7 4.7节的练习4.8 使用二义性文法4.8.1 用优先级和结合性解决冲突4.8.2 “悬空-else”二义性4.8.3 LR语法分析中的错误恢复4.8.4 4.8节的练习4.9 语法分析器的生成工具4.9.1 语法分析器的生成工具Yacc4.9.2 使用Yacc处理二义性文法4.9.3 用Lex创建Yacc的词法分析器4.9.4 Yacc中的错误恢复4.9.5 4.9节的练习4.10:第4章的小结4.11 第4章的参考文献第5章 语法制导的翻译5.1 语法制导定义5.1.1 继承属性和综合属性5.1.2 在一棵语法分析树的结点上对一个SDD求值5.1.3 5.1节的练习5.2 SDD的求值顺序5.2.1 依赖图5.2.2 属性求值的顺序5.2.3 S-属性定义5.2.4 L-属性定义5.2.5 具有受控副作用的语义规则5.2.6 5.2节的练习5.3 语法制导翻译的应用5.3.1 抽象语法树的构造5.3.2 类型的结构5.3.3 5.3节的练习5.4 语法制导的翻译方案5.4.1 后缀翻译方案5.4.2 后缀SDT的语法分析栈实现5.4.3 产生式内部带有语义动作的SDT5.4.4 从SDT中消除左递归5.4.5 L-属性定义的SDT5.4.6 5.4节的练习5.5 实现L-属性的SDD5.5.1 在递归下降语法分析过程中进行翻译5.5.2 边扫描边生成代码5.5.3 L-属性的SDD和LL语法分析5.5.4 L-属性的SDD的自底向上语法分析5.5.5 5.5节的练习5.6 第5章的总结5.7 第5章的参考文献第6章 中间代码生成第7章 运行时刻环境第7章 总结第8章 代码生成第9章 机器无关优化第10章 指令级并行第11章 并行性和局部性的优化第12章 过程间分析第二个目标是编译器应该有效提高很多输入程序的性能。性能通常意味着程序执行的速度。我们也希望能够尽可能降低生成代码的大小,在嵌入式系统中更是如此。而对于移动设备的情况,尽量降低代码的能耗也是我们期待的。在通常情况下,提高执行效率的优化也能够节约能耗。除了性能,错误报告和调试等的可用性方面也是很重要的。第三,我们需要使编译时间保持在较短的范围内,以支持快速的开发和调试周期。当机器变得越来越快,这个要求会越来越容易达到。开始时,一个程序经常在没有进行优化的情况下开发和调试。这么做不仅可以降低编译时间,更重要的是未经优化的程序比较容易调试。这是因为编译器引入的优化经常使得源代码和目标代码之间的关系变得模糊。在编译器中开启优化有时会暴露出源程序中的新问题,因此需要对经过优化的代码再次进行测试。因为可能需要额外的测试工作,有时会阻止人们在应用中使用优化技术,当应用的性能不很重要的时候更是如此。最后,编译器是一个复杂的系统,我们必须使系统保持简单以保证编译器的设计和维护费用是可管理的。我们可以实现的优化技术有无穷多种,而创建一个正确有效的优化过程需要相当大的工作量。我们必须划分不同优化技术的优先级别,只实现那些可以对实践中遇到的源程序带来最大好处的技术。因此,我们在研究编译器时不仅要学习如何构造一个编译器,还要学习解决复杂和开放性问题的一般方法学。在编译器开发中用到的方法涉及理论和实验。在开始的时候,我们通常根据直觉确定有哪些重要的问题并把它们明确描述出来。

赞(0)
未经允许不得转载:小苏子图书 » 编译原理(第2版)[Compilers:Principle,Techniques and Tools] 内容简介