新書推薦:
《
东欧史(全二册)-“中间地带”的困境
》
售價:NT$
1010.0
《
虚拟资本:金融怎样挪用我们的未来
》
售價:NT$
352.0
《
刻意练习不生气
》
售價:NT$
179.0
《
大宋理财:青苗法与王安石的金融帝国(全彩插图本)
》
售價:NT$
500.0
《
安全感是内心长出的盔甲
》
售價:NT$
305.0
《
快人一步:系统性能提高之道
》
售價:NT$
505.0
《
我们为什么会做梦:让梦不再神秘的新科学
》
售價:NT$
352.0
《
算法图解(第2版)
》
售價:NT$
356.0
|
內容簡介: |
《编译原理》围绕编译程序分析、设计和实现方面的主题,介绍上下文无关文法、有限自动机的基础知识,以及构造程序设计语言编译程序的一般原理、设计方法和实现技术,包括词法分析、语法分析、语义分析、中间代码生成、目标代码生成、运行时刻环境和代码优化;设计了一个案例语言,给出该语言翻译器的分析、设计和实现的完整过程;介绍了开源编译器GCC的逻辑结构、典型中间代码形式和存储管理策略,也围绕目标文件介绍了汇编和链接。
|
目錄:
|
目录第1章 引论 11.1 编译器 11.2 编译器的结构 21.2.1 词法分析 31.2.2 语法分析 31.2.3 语义分析 41.2.4 中间代码生成 41.2.5 代码优化 51.2.6 目标代码生成 51.2.7 编译器的组织 51.3 GCC概述 61.3.1 GCC的语言处理过程 61.3.2 GCC的逻辑结构 71.4 编译程序的发展 81.4.1 程序设计语言的发展 81.4.2 编译技术的发展 8习题 9第2章 上下文无关文法和分析 102.1 概述 102.2 符号串及运算 112.3 文法 122.3.1 上下文无关文法的定义 122.3.2 推导和归约 132.3.3 文法定义的语言 142.3.4 文法的分类 152.3.5 文法在应用中的说明 172.4 语法树 182.4.1 语法树的定义 182.4.2 文法的二义性 202.4.3 短语和句柄 21习题 22第3章 词法分析 253.1 正规表达式 253.2 有限自动机 263.2.1 确定的有限自动机 273.2.2 非确定的有限自动机 283.2.3 含e的非确定的有限自动机 283.2.4 非确定有限自动机的确定化 293.2.5 确定有限自动机的最小化 313.3 正规表达式和有限自动机 323.3.1 从正规表达式到有限自动机 323.3.2 从有限自动机到正规表达式 333.4 有限自动机和正规文法 353.5 词法分析程序 363.5.1 DFA的实现 363.5.2 词法分析程序实现应考虑的问题 37习题 39第4章 语法分析 424.1 自顶向下的语法分析 424.1.1 确定的自顶向下语法分析 424.1.2 LL(1)文法 464.1.3 左递归和左公因子的消除 494.1.4 递归下降的语法分析 514.1.5 表驱动的语法分析 534.2 自底向上的语法分析 554.2.1 移进-归约的语法分析 554.2.2 LR语法分析 574.2.3 项目和项目集 604.2.4 LR(0)分析表构造 624.2.5 SLR(1)分析表构造 644.2.6 LR(1)分析表构造 664.2.7 LALR(1)分析表构造 684.3 语法错误的恢复 714.3.1 递归下降分析中的语法错误的恢复 714.3.2 LL分析中的语法错误的恢复 734.3.3 LR语法分析中的语法错误的恢复 74习题 75第5章 语义分析 775.1 语义分析概述 775.2 属性文法 785.2.1 属性文法及相关概念 785.2.2 语法制导定义 805.3 属性计算 815.3.1 依赖图 815.3.2 属性的计算顺序 835.3.3 S属性和L属性的语法制导定义 835.4 语法制导翻译 855.4.1 自顶向下语法分析中属性计算 855.4.2 自底向上语法分析中综合属性计算 925.4.3 自底向上语法分析中继承属性计算 945.5 符号表 985.5.1 符号表的作用 985.5.2 符号的属性和存储方法 995.5.3 符号表的设计 1035.5.4 符号表的管理 1055.5.5 嵌套作用域的管理 1055.6 声明 1095.7 类型检查 1105.7.1 类型表达式 1105.7.2 类型检查规则 1125.7.3 类型转换 112习题 113第6章 中间代码生成 1196.1 中间代码概述 1196.1.1 线性中间代码 1196.1.2 树型中间代码 1216.1.3 图式中间代码 1216.2 赋值语句的翻译 1226.2.1 简单赋值语句的翻译 1236.2.2 数组引用的翻译 1256.3 布尔表达式的翻译 1276.3.1 直接对布尔表达式求值 1286.3.2 通过控制流翻译布尔表达式 1296.4 典型控制结构的翻译 1326.5 GCC的中间代码 1346.5.1 GENERIC 1346.5.2 GIMPLE 1356.5.3 RTL 136习题 137第7章 运行时刻环境 1397.1 存储组织 1397.1.1 程序运行时的内存映像 1397.1.2 存储分配策略 1397.2 活动记录 1417.2.1 活动记录的一般结构 1417.2.2 变长数据的分配 1437.3 基于栈的过程管理 1437.3.1 过程调用和返回 1437.3.2 过程间的值传递 1457.4 非局部变量的访问 1477.4.1 无嵌套过程的非局部变量 1487.4.2 过程嵌套定义的非局部变量 1487.5 GCC的存储管理策略 1517.5.1 程序运行时的内存映像 1517.5.2 x86-64栈结构 1527.5.3 函数和参数 153习题 156第8章 代码优化 1608.1 基本块和流图 1608.1.1 基本块 1608.1.2 流图 1618.1.3 循环 1618.2 数据流分析 1638.2.1 数据流分析模式 1638.2.2 到达定值分析 1638.2.3 活跃变量分析 1668.2.4 可用表达式分析 1678.3 窥孔优化 1708.4 基本块的优化 1718.4.1 基本块的有向无环图表示 1728.4.2 基于DAG的代码重建 1758.5 循环优化 1758.5.1 代码外提 1758.5.2 归纳变量相关的优化 178习题 179第9章 目标代码生成 1829.1 代码生成的主要问题 1829.1.1 指令选择 1829.1.2 寄存器分配 1839.1.3 指令调度 1839.2 一个简单的代码生成器 1849.2.1 目标语言 1849.2.2 一个目标代码生成算法 1869.2.3 表达式优化代码的生成 1899.3 基于图着色的寄存器分配 1919.4 目标文件 1929.4.1 目标文件格式 1939.4.2 汇编 1959.4.3 链接 197习题 199第10章 简单语言的翻译程序 20210.1 源语言及其定义 20210.1.1 语法定义 20210.1.2 其他约束 20410.2 词法分析的实现 20510.2.1 词法记号 20510.2.2 词法单元的定义 20610.2.3 单词的识别 20610.3 语法分析的实现 20810.3.1 文法的分析和变换 20810.3.2 递归下降的语法分析程序 20910.4 符号表的实现 21010.4.1 符号表的设计 21010.4.2 符号表的管理 21210.5 中间代码生成 21310.5.1 中间代码的定义 21410.5.2 生成中间代码的构造 21510.5.3 中间代码生成和优化 22010.6 目标代码生成 22110.6.1 虚拟目标机 22110.6.2 运行时刻环境 22310.6.3 从中间代码到目标代码的转换 22410.6.4 虚拟机解释程序 22510.7 课程设计 226参考文献 229
|
|