编辑推荐
贯穿编译、汇编、链接、加载的全过程!
内容简介
本书将带领读者从头开始制作一门语言的编译器。笔者特意为本书设计了C?语言,C?可以说是C语言的子集,实现了包括指针运算等在内的C语言的主要部分。本书所实现的编译器就是C?语言的编译器, 是实实在在的编译器,而非有诸多限制的玩具。另外,除编译器之外,本书对以编译器为中心的编程语言的运行环境,即编译器、汇编器、链接器、硬件、运行时环境等都有所提及,介绍了程序运行的所有环节。
作者简介
作者青木峰郎,程序员,著有《Ruby程序设计268技(第2版)》《Ruby源代码完全解说》《Linux程序设计》等多部编程相关著作。并积极参与标准库维护、文档维护等各种各样的活动。
章节目录
版权信息
译者序
前言
第1章 开始制作编译器
1.1 本书的概要
1.2 编译过程
1.3 使用 C♭ 编译器进行编译
第2章 C♭ 和 cbc
2.1 C♭ 语言的概要
2.2 C♭ 编译器 cbc 的构成
第1部分 代码分析
第3章 语法分析的概要
3.1 语法分析的方法
3.2 解析器生成器
3.3 JavaCC 的概要
第4章 词法分析
4.1 基于 JavaCC 的扫描器的描述
4.2 扫描没有结构的单词
4.3 扫描不生成 token 的单词
4.4 扫描具有结构的单词
第5章 基于 JavaCC 的解析器 的描述
5.1 基于 EBNF 语法的描述
5.2 语法的二义性和 token 的超前扫描
第6章 语法分析
6.1 定义的分析
6.2 语句的分析
6.3 表达式的分析
6.4 项的分析
第2部分 抽象语法树和中间代码
第7章 JavaCC 的 action 和抽象语法树
7.1 JavaCC 的 action
7.2 抽象语法树和节点
第8章 抽象语法树的生成
8.1 表达式的抽象语法树
8.2 语句的抽象语法树
8.3 声明的抽象语法树
8.4 cbc 的解析器的启动
第9章 语义分析(1)引用的消解
9.1 语义分析的概要
9.2 变量引用的消解
9.3 类型名称的消解
第10章 语义分析(2)静态类型检查
10.1 类型定义的检查
10.2 表达式的有效性检查
10.3 静态类型检查
第11章 中间代码的转换
11.1 cbc 的中间代码
11.2 IRGenerator 类的概要
11.3 流程控制语句的转换
11.4 没有副作用的表达式的转换
11.5 左值的转换
11.6 存在副作用的表达式的转换
第3部分 汇编代码
第12章 x86 架构的概要
12.1 计算机的系统结构
12.2 x86 系列 CPU 的历史
12.3 IA-32 的概要
12.4 数据的表现形式和格式
第13章 x86 汇编器编程
13.1 基于 GNU 汇编器的编程
13.2 GNU 汇编器的语法
13.3 传输指令
13.4 算术运算指令
13.5 位运算指令
13.6 流程的控制
第14章 函数和变量
14.1 程序调用约定
14.2 Linux/x86 下的函数调用
14.3 Linux/x86 下函数调用的细节
第15章 编译表达式和语句
15.1 确认编译结果
15.2 x86 汇编的对象与 DSL
15.3 cbc 的 x86 汇编 DSL
15.4 CodeGenerator 类的概要
15.5 编译单纯的表达式
15.6 编译二元运算
15.7 引用变量和赋值
15.8 编译 jump 语句
第16章 分配栈帧
16.1 操作栈
16.2 参数和局部变量的内存分配
16.3 利用虚拟栈分配临时变量
16.4 调整栈访问的偏移量
16.5 生成函数序言和尾声
6.6 alloca 函数的实现
第17章 优化的方法
17.1 什么是优化
17.2 优化的分类
17.3 cbc 中的优化
17.4 更深层的优化
第4部分 链接和加载
第18章 生成目标文件
18.1 ELF 文件的结构
18.2 全局变量及其在 ELF 文件中的表示
18.3 编译全局变量
18.4 生成目标文件
第19章 链接和库
19.1 链接的概要
19.2 什么是链接
19.3 动态链接和静态链接
19.4 生成库
第20章 加载程序
20.1 加载 ELF 段
20.2 动态链接过程
20.3 动态加载
20.4 GNU ld 的链接
第21章 生成地址无关代码
21.1 地址无关代码
21.2 全局变量引用的实现
21.3 链接器调用的实现
21.4 从程序解析到执行
第22章 扩展阅读
22.1 参考书推荐
22.2 链接、加载相关
22.3 各种编程语言的功能
附录
A.1 参考文献
A.2 在线资料
A.3 源代码
看完了
自制编译器是2016年由人民邮电出版社·图灵出品出版,作者[日]青木峰郎。
得书感谢您对《自制编译器》关注和支持,如本书内容有不良信息或侵权等情形的,请联系本网站。