-
内容大纲
本书以简单的算法、清晰的架构讲述了把高级语言转换成Linux程序的全过程,以及其中蕴含的数学原理。
本书共12章,按照源码编译的顺序分为入门篇和进阶篇。入门篇(第1~4章)详细介绍词法分析、语法分析、语义分析,涵盖编译器前端的所有内容。进阶篇(第5~12章)进一步说明怎么把抽象语法树转换成可执行程序的全过程,包含三地址码的生成、中间代码优化、寄存器分配、机器码的生成、ELF文件格式、连接器和虚拟机的实现,以及作者对泛编译器问题的进一步思考。
本书适合初学者学习编译原理,也可用作资深程序员在开发一门新语言时的技术资料,还可用作高等院校和培训机构的教学参考书。 -
作者介绍
于东亮,SCF编译器作者,资深C程序员和FFmpeg工程师,毕业于天津大学,长期从事Linux下的编程工作。先后制作了“C语言技术内幕”“Linux环境的编程详解”“怎么用C语言写一个简单EDA”“编译器入门”等原创视频合集。本书为作者的第一部实体书,以SCF编译器为例讲述了一门高级语言的开发过程。 -
目录
入门篇
第1章 编译器简介
1.1 编程语言的发展史
1.2 编译器在IT行业里的核心地位
1.3 编译器的代码架构
第2章 词法分析
2.1 “理想语言”的词法分析
2.2 实际编程语言的词法扩展
2.2.1 编程语言的标志符
2.2.2 关键字
2.2.3 数字
2.2.4 数据结构
2.3 词法分析的数学解释
第3章 语法分析
3.1 语句类型的划分
3.2 语句的嵌套和递归分析
3.2.1 变量声明语句的分析
3.2.2 类型定义语句的分析
3.2.3 顺序块的分析
3.2.4 表达式的分析
3.2.5 运算符的优先级和结合性
3.2.6 表达式树的构造步骤
3.2.7 完整的抽象语法树
3.2.8 抽象语法树的数据结构
3.2.9 变量和类型的数据结构
3.2.10 变量的诸法检查
3.2.11 屋号和乘法的区分
3.3 语法的灵活编辑和有限自动机框梁
3.3.1 有限自动机的简介
3.3.2 语法的编辑
3.3.3 编程语言的语法图
3.3.4 SCF框架怎么实现“递归”
3.3.5 语法分析框架的模块上下文
3.3.6 for循环的语法分析模块
3.3.7 小括号的多种含义
3.4 语法分析的数学解释
第4章 语义分析
4.1 类型检查
4.2 语义分析框架
4.2.1 语义分析的回调函数
4.2.2 语义分析中的递归
4.3 运算符重载
4.3.1 运算符重载的实现
4.3.2 函数调用
4.3.3 重载函数的查找
4.3.4 代码实现
4.3.5 SCF编译器的类对象
4.4 new关键字
4.5 多值函数
4.5.1 应用程序二进制接口
4.5.2 语法层面的支持
4.5.3 语义层面的支持
进阶篇
第5章 三地址码的生成
5.1 回填技术
5.1.1 回填的数据结构
5.1.2 三地址码的数据结构
5.1.3 回填的步骤
5.2 if-else的三地址码
5.3 循环的入口和出口
5.4 指针与数组的赋值
5.5 new关键字的三地址码
5.6 跳转的优化
5.6.1 跳转的优化简介
5.6.2 逻辑运算符的短路优化
5.6.3 死代码消除
5.6.4 代码实现
第6章 基本块的划分
6.1 比较、跳转导致的基本块划分
6.2 函数调用
6.3 基本块的流程图
第7章 中间代码优化
7.1 代码框架
7.2 内联函数
7.3 有向无环图
7.3.1 公共子表达式
7.3.2 数据结构
7.3.3 有向无环图的生成
7.4 图的搜索算法
7.4.1 基本块的数据结构
7.4.2 宽度优先搜索
7.4.3 深度优先搜索
7.5 指针分析
7.5.1 指针解引用的分析
7.5.2 数组和结构体的指针分析
7.6 跨函数的指针分析
7.7 变量活跃度分析
7.7.1 变量的活跃度
7.7.2 单个基本块的变量活跃度分析
7.7.3 基本块流程图上的分析
7.7.4 代码实现
7.8 自动内存管理
7.9 DAG优化
7.9.1 无效运算
7.9.2 相同子表达式的判断
7.9.3 出口活跃变量的优化
7.9.4 后十十的优化
7.9.5 逻辑运算符的优化
7.9.6 DAG优化的代码实现
7.10 循环分析
7.10.1 循环的识别
7.10.2 循环的优化
第8章 寄存器分配
8.1 不同CPU架构的寄存器组
8.2 变量之间的冲突
8.3 图的着色算法
8.3.1 简单着色算法
8.3.2 改进的着色算法
第9章 机器码的生成
9.1 RISC架构的优势
9.2 寄存器溢出
9.2.1 寄存器的数据结构
9.2.2 寄存器的冲突
9.2.3 寄存器的溢出
9.3 X86 64的机器码生成
9.3.1 X86_64的机器指令
9.3.2 机器码的生成
9.3.3 目标文件
9.4 ARM64的机器码生成
9.4.1 指令特点
9.4.2 机器码生成
第10章 ELF格式和可执行程序的连接
10.1 ELF格式
10.1.1 文件头
10.1.2 节头表
10.1.3 程序头表
10.1.4 ELF格式的实现
10.2 连接器
10.2.1 连接
10.2.2 静态连接
10.2.3 动态连接
10.2.4 编译器的主流程
10.3 可执行文件的运行
10.3.1 进程创建
10.3.2 程序的加载和运行
10.3.3 动态库函数的加载
10.3.4 源代码的编译、连接、运行
第11章 Naja字节码和虚拟机
11.1 Naja字节码
11.2 虚拟机
11.2.1 虚拟机的数据结构
11.2.2 虚拟机的运行
11.2.3 动态库函数的加载
第12章 信息编码的数学哲学
12.1 信息编码格式的转换
12.2 多项式时间的算法
12.3 自然指数e和梯度下降算法
12.4 复杂问题的简单解法
同类热销排行榜
- C语言与程序设计教程(高等学校计算机类十二五规划教材)16
- 电机与拖动基础(教育部高等学校自动化专业教学指导分委员会规划工程应用型自动化专业系列教材)13.48
- 传感器与检测技术(第2版高职高专电子信息类系列教材)13.6
- ASP.NET项目开发实战(高职高专计算机项目任务驱动模式教材)15.2
- Access数据库实用教程(第2版十二五职业教育国家规划教材)14.72
- 信号与系统(第3版下普通高等教育九五国家级重点教材)15.08
- 电气控制与PLC(普通高等教育十二五电气信息类规划教材)17.2
- 数字电子技术基础(第2版)17.36
- VB程序设计及应用(第3版十二五职业教育国家规划教材)14.32
- Java Web从入门到精通(附光盘)/软件开发视频大讲堂27.92
推荐书目
-

孩子你慢慢来/人生三书 华人世界率性犀利的一枝笔,龙应台独家授权《孩子你慢慢来》20周年经典新版。她的《...
-

时间简史(插图版) 相对论、黑洞、弯曲空间……这些词给我们的感觉是艰深、晦涩、难以理解而且与我们的...
-

本质(精) 改革开放40年,恰如一部四部曲的年代大戏。技术突变、产品迭代、产业升级、资本对接...
[
