万本电子书0元读

万本电子书0元读

顶部广告

编译器设计实战:基于Racket的增量式设计电子书

编译器向来被视为最难教授和理解的程序之一。大多数编译书籍按阶段逐章讲解,这种结构掩盖了语言特性如何驱动设计选择的逻辑。相比之下,这本创新教材采用增量式方法,让学生能够亲自编写每一行代码。书中引导读者为一种小型但功能强大的编程语言构建自己的编译器,并随着章节推逐步添加复杂的语言特性。作者阐释了现代编译器背后的核心概念、算法和数据结构,为读者学习后续高级主题奠定了基础。

售       价:¥

纸质售价:¥66.70购买纸书

0人正在读 | 0人评论 6.8

作       者:(美)杰里米·G· 希克(Jeremy G· Siek)

出  版  社:机械工业出版社

出版时间:2025-10-16

字       数:12.5万

所属分类: 科技 > 计算机/网络 > 计算机理论与教程

温馨提示:数字商品不支持退换货,不提供源文件,不支持导出打印

为你推荐

  • 读书简介
  • 目录
  • 累计评论(条)
  • 读书简介
  • 目录
  • 累计评论(条)
本书将带领读者使用Racket语言动手构建编译器,通过循序渐的方法,在设计和实现编译器的过程中了解基本概念、算法和数据结构等相关知识。本书将每章作为构建编译器的一个基本“步骤”,逐步为编译器添加功能。全书涵盖变量、寄存器、条件、循环、元组、函数、动态类型、通用类型等内容。本书适合作为高等院校编译原理等课程的教材,也适合相关技术人员参考。<br/>【推荐语】<br/>编译器向来被视为最难教授和理解的程序之一。大多数编译书籍按阶段逐章讲解,这种结构掩盖了语言特性如何驱动设计选择的逻辑。相比之下,这本创新教材采用增量式方法,让学生能够亲自编写每一行代码。书中引导读者为一种小型但功能强大的编程语言构建自己的编译器,并随着章节推逐步添加复杂的语言特性。作者阐释了现代编译器背后的核心概念、算法和数据结构,为读者学习后续高级主题奠定了基础。 本书内容严谨且易于理解,提倡读者通过实践来学习,适合作为高等院校编译原理等课程的教材,也适合相关技术人员参考。 本书特色: 将编译器构建的复杂挑战分解为易于掌握的小块内容。 通过将语言特性与编译器设计选择联系起来,增强学习效果。 采用“做中学”方法,加深读者对程序如何映射到计算机硬件的理解。 经过课堂验证,在GitHub上配有源代码。<br/>【作者】<br/>Jeremy G. Siek,印第安纳大学信息与计算学院的计算机科学教授,教授编程、编程语言、编译器、逻辑学和其他计算机科学领域的课程。他设计了新的语言特性来帮助程序员创建和使用软件库和特定于领域的语言,特别是通用的和高性能的语言。通过Walid Taha,他发明了在同一种语言中混合静态和动态类型检查的渐类型方法。在此之前,他是Boost Graph Library一书的合著者。     刘晓鸿,北京邮电大学计算机学院副教授。1994年博士毕业于中国科学院自动化研究所模式识别与智能控制专业,1995年起任教于北京邮电大学至今。主要研究领域为模式识别与人工智能、嵌式系统。此外,还关注智能交通系统,包括车载系统的导航和监控指挥中心的软件发;集群系统与并行处理,及蜂窝无线通信系统的协议栈实现。主讲编译原理等课程。<br/>
目录展开

译者序

前言

第1章 预备知识

1.1 抽象语法树

1.2 语法

1.3 模式匹配

1.4 递归函数

1.5 解释器

1.6 编译器示例:部分求值器

第2章 整数与变量

2.1 LVar语言

2.1.1 通过方法覆盖来扩展解释器

2.1.2 LVar语言的定义性解释器

2.2 x86Int汇编语言

2.3 规划x86汇编语言之旅

2.4 唯一化变量

2.5 移除复杂操作数

2.6 详细控制

2.7 选择指令

2.8 分配变量存储

2.9 修补指令

2.10 生成起始和收尾代码

2.11 挑战:LVar的部分求值器

第3章 寄存器分配

3.1 寄存器和调用约定

3.2 活跃性分析

3.3 构建干涉图

3.4 利用数独进行图着色

3.5 修补指令

3.6 起始和收尾代码

3.7 挑战:传送偏置

3.8 延伸阅读

第4章 布尔值和条件表达式

4.1 LIf语言

4.2 LIf程序的类型检查

4.3 CIf中间语言

4.4 x86If语言

4.5 收缩LIf语言

4.6 唯一化变量

4.7 移除复杂操作数

4.8 详细控制

4.8.1 详细尾部和赋值处理

4.8.2 创建块

4.8.3 谓词详细处理

4.8.4 详细控制和收缩之间的相互作用

4.9 选择指令

4.10 寄存器分配

4.10.1 活跃性分析

4.10.2 构建干涉图

4.11 修补指令

4.12 挑战:优化块和去除跳转

4.12.1 优化块

4.12.2 去除跳转

4.13 延伸阅读

第5章 循环和数据流分析

5.1 LWhile语言

5.2 循环控制流和数据流分析

5.3 可变变量和移除复杂操作数

5.4 揭示get!

5.5 移除复杂操作数

5.6 详细控制和C↺

5.7 选择指令

5.8 寄存器分配

第6章 元组和垃圾回收

6.1 LTup语言

6.2 垃圾回收

6.2.1 双空间复制收集器

6.2.2 通过Cheney算法进行图复制

6.2.3 数据表示

6.2.4 垃圾回收器的实现

6.3 显露分配

6.4 移除复杂操作数

6.5 详细控制和CTup语言

6.6 选择指令和x86Global语言

6.7 寄存器分配

6.8 起始和收尾代码

6.9 挑战:简单结构

6.10 挑战:数组

6.10.1 数据表示

6.10.2 重载解析

6.10.3 边界检查

6.10.4 显露分配

6.11 揭示get!

6.11.1 移除复杂操作数

6.11.2 详细控制

6.11.3 选择指令

6.12 挑战:分代收集

6.13 延伸阅读

第7章 函数

7.1 LFun语言

7.2 x86汇编下的函数

7.2.1 调用约定

7.2.2 高效尾调用

7.3 收缩LFun语言

7.4 揭示函数和LFunRef语言

7.5 限制函数

7.6 移除复杂操作数

7.7 详细控制和CFun语言

7.8 选择指令和语言

7.9 寄存器分配

7.9.1 活跃性分析

7.9.2 构建干涉图

7.9.3 分配寄存器

7.10 修补指令

7.11 起始和收尾代码

7.12 转换举例

第8章 词法作用域函数

8.1 Lλ语言

8.2 赋值和词法作用域函数

8.3 赋值转换

8.4 闭包转换

8.5 转换举例

8.6 显露分配

8.7 详细控制和CClos语言

8.8 选择指令

8.9 挑战:优化闭包

8.10 延伸阅读

第9章 动态类型

9.1 LDyn语言

9.2 标记值的表示

9.3 LAny语言

9.4 强制转换插入:编译LDyn为LAny

9.5 揭示强制转换

9.6 移除复杂操作数

9.7 详细控制和CAny

9.8 选择指令

9.9 LAny的寄存器分配

第10章 渐变类型

10.1 类型检查L?

10.2 解释LCast

10.3 插入强制转换

10.4 低层类型转换

10.5 区分代理

10.6 揭示强制转换

10.7 闭包转换

10.8 选择指令

10.9 延伸阅读

第11章 泛型

11.1 编译泛型

11.2 解析实例化

11.3 擦除泛型类型

附录

A.1 解译器

A.2 实用函数

A.3 x86指令集快速参考

参考文献

累计评论(条) 个书友正在讨论这本书 发表评论

发表评论

发表评论,分享你的想法吧!

买过这本书的人还买过

读了这本书的人还在读

回顶部