编译原理 第3版[PDF电子书版本下载] | 您所在的位置:网站首页 › 编译原理教程第四版pdf › 编译原理 第3版[PDF电子书版本下载] |
图书介绍
编译原理 第3版pdf电子书版本下载
陈意云,张昱编著 著
出版社: 北京:高等教育出版社
ISBN:9787040404913
出版时间:2014
标注页数:441页
文件大小:80MB
文件页数:455页
主题词:编译程序-程序设计-高等学校-教材
PDF下载
立即下载
[复制下载地址]
温馨提示:(请使用BT下载软件FDM进行下载)软件下载地址页
点击复制MD5值:29c520fdebe2916d87065381ea544017
下载说明
编译原理 第3版PDF格式电子书版下载下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。 点击复制85GB完整离线版磁力链接到迅雷FDM等BT下载工具进行下载 详情点击-查看共享计划 建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如 BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载! (文件页数 要大于 标注页数,上中下等多册电子书除外)
注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具 图书目录第1章 引论 1 1.1 编译器概述 1 1.1.1 词法分析 1 1.1.2 语法分析 3 1.1.3 语义分析 3 1.1.4 中间代码生成 4 1.1.5 代码优化 4 1.1.6 代码生成 5 1.1.7 符号表管理 5 1.1.8 阶段的分组 6 1.1.9 解释器 7 1.2 编译器技术的应用 7 1.2.1 高级语言的实现 8 1.2.2 针对计算机体系结构的优化 9 1.2.3 新计算机体系结构的设计 10 1.2.4 程序翻译 10 1.2.5 提高软件开发效率的工具 11 习题1 12 第2章 词法分析 13 2.1 词法记号及属性 13 2.1.1 词法记号、模式、词法单元 14 2.1.2 词法记号的属性 15 2.1.3 词法错误 16 2.2 词法记号的描述与识别 16 2.2.1 串和语言 16 2.2.2 正规式 18 2.2.3 正规定义 19 2.2.4 状态转换图 20 2.3 有限自动机 23 2.3.1 不确定的有限自动机 24 2.3.2 确定的有限自动机 25 2.3.3 NFA到DFA的变换 26 2.3.4 DFA的化简 29 2.4 从正规式到有限自动机 31 2.5 词法分析器的生成器 34 习题2 37 第3章 语法分析 40 3.1 上下文无关文法 40 3.1.1 上下文无关文法的定义 41 3.1.2 推导 42 3.1.3 分析树 43 3.1.4 二义性 44 3.2 语言和文法 45 3.2.1 正规式和上下文无关文法的比较 45 3.2.2 分离词法分析器的理由 46 3.2.3 验证文法产生的语言 46 3.2.4 适当的表达式文法 47 3.2.5 消除二义性 48 3.2.6 消除左递归 49 3.2.7 提左因子 50 3.2.8 非上下文无关的语言构造 51 3.2.9 形式语言鸟瞰 52 3.3 自上而下分析 54 3.3.1 自上而下分析的一般方法 54 3.3.2 LL(1)文法 55 3.3.3 递归下降的预测分析 56 3.3.4 非递归的预测分析 57 3.3.5 构造预测分析表 60 3.3.6 预测分析的错误恢复 61 3.4 自下而上分析 65 3.4.1 归约 65 3.4.2 句柄 65 3.4.3 用栈实现移进-归约分析 66 3.4.4 移进-归约分析的冲突 68 3.5 LR分析器 69 3.5.1 LR分析算法 69 3.5.2 LR文法和LR分析方法的特点 73 3.5.3 构造SLR分析表 74 3.5.4 构造规范的LR分析表 81 3.5.5 构造LALR分析表 85 3.5.6 非二义且非LR的上下文无关文法 88 3.6 二义文法的应用 89 3.6.1 使用算符的优先级和结合性来解决冲突 90 3.6.2 使用其他约定来解决冲突 92 3.6.3 LR分析的错误恢复 93 3.7 语法分析器的生成器 95 3.7.1 分析器的生成器Yacc 95 3.7.2 用Yacc处理二义文法 98 3.7.3 Yacc的错误恢复 101 习题3 103 第4章 语法制导的翻译 109 4.1 语法制导的定义 109 4.1.1 语法制导定义的形式 110 4.1.2 综合属性 111 4.1.3 继承属性 111 4.1.4 属性依赖图 112 4.1.5 属性计算次序 113 4.2 S属性定义的自下而上计算 114 4.2.1 语法树 115 4.2.2 构造语法树的语法制导定义 115 4.2.3 S属性的自下而上计算 117 4.3 L属性定义的自上而下计算 119 4.3.1 L属性定义 120 4.3.2 翻译方案 120 4.3.3 预测翻译器的设计 124 4.3.4 用综合属性代替继承属性 126 4.4 L属性的自下而上计算 126 4.4.1 删除翻译方案中嵌入的动作 127 4.4.2 分析栈上的继承属性 127 4.4.3 模拟继承属性的计算 130 习题4 132 第5章 类型检查 135 5.1 类型在编程语言中的作用 135 5.1.1 执行错误和安全语言 136 5.1.2 类型化语言和类型系统 136 5.1.3 类型化语言的优点 139 5.2 类型系统的描述语言 139 5.2.1 定型断言 140 5.2.2 定型规则 141 5.2.3 类型检查和类型推断 142 5.3 一个简单类型检查器的规范 143 5.3.1 一个简单的语言 143 5.3.2 类型系统 143 5.3.3 类型检查 145 5.3.4 类型转换 147 5.4 多态函数 148 5.4.1 为什么要使用多态函数 148 5.4.2 类型变量 149 5.4.3 一个含多态函数的语言 151 5.4.4 代换、实例与合一 153 5.4.5 多态函数的类型检查 154 5.5 类型表达式的等价 158 5.5.1 类型表达式的结构等价 158 5.5.2 类型表达式的名字等价 159 5.5.3 记录类型 160 5.5.4 类型表示中的环 161 5.6 函数和算符的重载 162 5.6.1 子表达式的可能类型集合 162 5.6.2 缩小可能类型的集合 163 习题5 164 第6章 运行时存储空间的组织和管理 171 6.1 局部存储分配 172 6.1.1 过程 172 6.1.2 名字的作用域和绑定 172 6.1.3 活动记录 174 6.1.4 局部数据的布局 175 6.1.5 程序块 175 6.2 全局栈式存储分配 177 6.2.1 运行时内存的划分 177 6.2.2 活动树和运行栈 178 6.2.3 调用序列 180 6.2.4 栈上可变长度数据 183 6.2.5 悬空引用 183 6.3 非局部名字的访问 184 6.3.1 无过程嵌套的静态作用域 185 6.3.2 有过程嵌套的静态作用域 185 6.3.3 动态作用域 189 6.4 参数传递 190 6.4.1 值调用 190 6.4.2 引用调用 191 6.4.3 换名调用 191 6.5 堆管理 192 6.5.1 内存管理器 192 6.5.2 计算机内存分层 193 6.5.3 程序局部性 195 6.5.4 手工回收请求 195 习题6 196 第7章 中间代码生成 212 7.1 中间语言 213 7.1.1 后缀表示 213 7.1.2 图形表示 213 7.1.3 三地址代码 214 7.1.4 静态单赋值形式 216 7.2 声明语句 217 7.2.1 过程中的声明 217 7.2.2 作用域信息的保存 218 7.2.3 记录的域名 220 7.3 赋值语句 221 7.3.1 符号表中的名字 221 7.3.2 数组元素的地址计算 222 7.3.3 数组元素地址计算的翻译方案 223 7.3.4 类型转换 225 7.4 布尔表达式和控制流语句 226 7.4.1 布尔表达式 227 7.4.2 控制流语句的翻译 227 7.4.3 布尔表达式的控制流翻译 229 7.4.4 开关语句的翻译 231 7.4.5 过程调用的翻译 233 习题7 234 第8章 代码生成 241 8.1 代码生成器设计中的问题 241 8.1.1 目标程序 241 8.1.2 指令选择 242 8.1.3 寄存器分配 243 8.1.4 计算次序选择 243 8.2 目标语言 244 8.2.1 目标机器的指令集 244 8.2.2 指令代价 245 8.3 基本块和流图 247 8.3.1 基本块 248 8.3.2 基本块的优化 249 8.3.3 流图 250 8.3.4 下次引用信息 251 8.4 一个简单的代码生成器 252 8.4.1 寄存器描述和地址描述 252 8.4.2 代码生成算法 253 8.4.3 寄存器选择函数 254 8.4.4 为变址和指针语句产生代码 255 8.4.5 条件语句 256 习题8 257 第9章 独立于机器的优化 267 9.1 优化的主要种类 267 9.1.1 优化的主要源头 268 9.1.2 一个实例 268 9.1.3 公共子表达式删除 270 9.1.4 复写传播 272 9.1.5 死代码删除 273 9.1.6 代码外提 274 9.1.7 强度削弱和归纳变量删除 274 9.2 数据流分析介绍 276 9.2.1 数据流抽象 277 9.2.2 数据流分析模式 278 9.2.3 到达-定值 279 9.2.4 活跃变量 284 9.2.5 可用表达式 285 9.2.6 小结 287 9.3 数据流分析的基础 288 9.3.1 半格 289 9.3.2 迁移函数 291 9.3.3 一般框架的迭代算法 293 9.3.4 数据流解的含义 295 9.4 常量传播 297 9.4.1 常量传播框架的数据流值 297 9.4.2 常量传播框架的迁移函数 298 9.4.3 常量传播框架的单调性 298 9.4.4 常量传播框架的非分配性 299 9.4.5 结果的解释 300 9.5 部分冗余删除 301 9.5.1 冗余的根源 301 9.5.2 能否删除所有的冗余 303 9.5.3 惰性代码移动问题 304 9.5.4 预期表达式 305 9.5.5 惰性代码移动算法 305 9.6 流图中的循环 310 9.6.1 支配结点 311 9.6.2 回边和可归约性 312 9.6.3 流图的深度 314 9.6.4 自然循环 314 9.6.5 迭代流图算法的收敛速度 315 习题9 317 第10章 依赖于机器的优化 329 10.1 处理器体系结构 330 10.1.1 指令流水线和分支延迟 330 10.1.2 流水化的执行 331 10.1.3 多指令发射 331 10.2 代码调度的约束 332 10.2.1 数据相关 332 10.2.2 发现内存访问中的相关性 333 10.2.3 寄存器使用和并行执行之间的折中 334 10.2.4 寄存器分配和代码调度的次序安排 335 10.2.5 控制相关 336 10.2.6 投机执行的支持 336 10.2.7 一个基本的机器模型 337 10.3 基本块调度 338 10.3.1 数据依赖图 338 10.3.2 基本块的表调度 340 10.3.3 区分优先级的拓扑次序 341 10.4 全局代码调度 341 10.4.1 简单的代码移动 342 10.4.2 向上的代码移动 343 10.4.3 向下的代码移动 344 10.4.4 更新数据相关 345 10.4.5 全局调度的其他问题 345 10.4.6 静态调度器和动态调度器的相互影响 346 10.5 软件流水 346 10.5.1 引言 347 10.5.2 循环的软件流水 348 10.5.3 寄存器分配和代码生成 350 10.5.4 Do-Across循环 351 10.5.5 软件流水的目标和约束 352 10.5.6 软件流水算法 354 10.5.7 无环数据依赖图的调度 355 10.6 并行性和数据局部性优化概述 356 10.6.1 多处理器 357 10.6.2 应用中的并行性 358 10.6.3 循环级并行 359 10.6.4 数据局部性 360 10.6.5 矩阵乘法算法 362 10.6.6 矩阵乘法算法的优化 364 习题10 365 第11章 编译系统和运行时系统 369 11.1 C语言的编译系统 369 11.1.1 预处理器 370 11.1.2 汇编器 371 11.1.3 连接器 371 11.1.4 目标文件的格式 373 11.1.5 符号解析 375 11.1.6 静态库 376 11.1.7 可执行目标文件及装入 378 11.1.8 动态连接 379 11.1.9 处理目标文件的一些工具 381 11.2 Java语言的运行时系统 381 11.2.1 Java虚拟机语言简介 382 11.2.2 Java虚拟机 382 11.2.3 即时编译器 384 11.3 无用单元收集 386 11.3.1 标记和清扫 386 11.3.2 引用计数 388 11.3.3 复制收集 388 11.3.4 分代收集 390 11.3.5 渐增式收集 391 11.3.6 编译器与收集器之间的相互影响 391 习题11 394 第12章 面向对象语言的编译 399 12.1 面向对象语言的概念 399 12.1.1 对象和对象类 399 12.1.2 继承 400 12.1.3 信息封装 402 12.2 方法的编译 402 12.3 继承的编译方案 405 12.3.1 单一继承的编译方案 406 12.3.2 多重继承的编译方案 408 习题12 412 第13章 函数式语言的编译 415 13.1 函数式编程语言简介 415 13.1.1 语言构造 415 13.1.2 参数传递机制 417 13.1.3 变量的自由出现和约束出现 418 13.2 函数式语言的编译简介 419 13.2.1 几个受启发的例子 420 13.2.2 编译函数 422 13.2.3 环境与约束 422 13.3 抽象机的体系结构 423 13.3.1 抽象机的栈 424 13.3.2 抽象机的堆 425 13.3.3 名字的寻址 426 13.3.4 约束的建立 427 13.4 指令集和编译 428 13.4.1 表达式 428 13.4.2 变量的引用性出现 430 13.4.3 函数定义 431 13.4.4 函数应用 432 13.4.5 构造和计算闭包 436 13.4.6 letrec表达式和局部变量 437 习题13 439 参考文献 441 |
CopyRight 2018-2019 实验室设备网 版权所有 |