图书前言

前言

随着芯片技术的高速发展,与之伴随的编译器开发在国内也迅速增多,但相关的技术资料却晦涩难懂。编译器领域由Alfred V. Aho等著的经典名著《编译原理》偏重理论,缺少示例代码,入门难度很高。开源项目LLVM和GCC的代码架构复杂且技术资料多为英文,不太适合初学者入门。作者根据自己对Linux和C/C++的长期使用经验编写了一个纯国产的简单编译器框架(Simple Compiler Framework,SCF),详细讲述了一门编程语言的开发过程,为初学者提供了一个编译器领域的入门途径。

本书以作者编写的SCF编译器框架为基础,以高级语言的编译连接过程为脉络,一步步地讲述编译器的架构及其各模块的实现细节。

本书主要内容

第1章主要讲述编译器的发展史、应用场景和代码架构,让读者对该领域有个初步印象。

第2章由浅入深地讲述词法分析模块的实现细节,以尽量简单通俗的方式引导读者入门。

第3章抛开了编译理论,从实践的角度讲述怎么编写语法分析模块,展现把源代码转换成计算机可以理解的树形数据结构的过程。该树形数据结构即通常所讲的抽象语法树。

第4章讲述语义分析和运算符重载的支持方法。

第5章是三地址码的生成,讲述怎么把树形数据结构变成类似汇编的线性代码序列。

第6章是基本块的划分,介绍编译器内部对程序流程的表示方式。

第7章为中间代码优化,讲述编译器怎么生成简洁高效的代码和怎么支持自动内存管理。

第8章介绍在不同类型的CPU上怎样为变量分配寄存器。

第9章详细讲解X86_64的机器码生成过程,并简单描述ARM64的机器码生成过程。

第10章以Linux为平台讲述连接器的编写和可执行程序的运行。

第11章讲述脚本语言的字节码和虚拟机。

第12章介绍泛编译器问题的数学模型及其简单解法,该章的最后两句为本书的总纲。

阅读建议

编译器属于计算机领域的核心技术,与操作系统和CPU指令的关联较多。前4章的阅读需要熟悉C语言,第5章之后的章节需要读者具有一定的汇编语言基础,第10章需要读者熟悉Linux系统。

资源下载提示

素材(源码)等资源:扫描目录上方的二维码下载。

视频等资源:扫描封底的文泉云盘防盗码,再扫描书中相应章节的二维码,可以在线学习。

致谢

感谢我的父母,感谢清华大学出版社赵佳霓编辑的细心指导,感谢我的所有关注者,正是你们的支持才完成了编译器代码的开发和本书的编写。

由于时间仓促,书中难免存在疏漏之处,请读者见谅,并提出宝贵意见。

于东亮2024年5月