蚁工厂
23-08-31 08:27 微博认证:科技博主

基于 LLVM 自制编译器
http://t.cn/A6OGy7HJ
在本系列教程中,我们将介绍并实现一门简单的编程语言——Kaleidoscope,教程的每一章都会逐步对其编译器进行完善。与此同时,我们会介绍编译原理相关的理论和知识,以及 LLVM 相关概念。在每一章中,我们会花费很大的篇幅对相关的代码实现进行解释。因此,强烈建议每一位读者亲自对代码进行实践。

教程总共分为十章,每一章包含不同的主题,各章之间属于循序渐进的关系,各章相关的代码,也是通过增量修改实现的。如下所示,为各章的主题与内容简介。
**第 1 章 - Kaleidoscope 与词法分析器**。介绍了我们的目标,以及实现的基本功能。词法分析器是为一门编程语言构建解析器的基础,我们使用 C++ 实现一个简单的词法分析器。
**第 2 章 - AST 与解析器**。介绍了解析器相关技术,以及抽象语法树的构造。关于解析技术,本教程使用的是递归下降分析法和算符优先级分析法。
**第 3 章 - LLVM IR 代码生成**。介绍了如何基于 AST 生成 LLVM IR,通过一种简单的方法将 LLVM 引入到编译器实现中。
**第 4 章 - JIT 与优化器支持**。基于 LLVM 为 Kaleidoscope 实现 JIT 编译功能,同时加入对于优化器的支持。
**第 5 章 - 语言扩展:控制流**。对 Kaleidoscope 进行语言扩展,实现控制流能力(if 语句和 for 语句)。同时,简单介绍了 SSA 的构造。
**第 6 章 - 语言扩展:自定义运算符**。对 Kaleidoscope 进行语言扩展,实现自定义运算符能力,允许用户自定义一元运算符和二元运算符(支持运算符优先级)。
**第 7 章 - 语言扩展:可变变量**。对 Kaleidoscope 进行语言扩展,实现局部变量和赋值操作符。同时,介绍了一种隐式的方法让 LLVM 自动构造 SSA。
**第 8 章 - 目标文件编译**。介绍了如何基于 LLVM IR 编译生成目标文件。
**第 9 章 - 调试信息**。支持调试器,添加调试信息,允许在 Kaleidoscope 函数中设置断点,打印参数变量和调用函数。
**第 10 章 - 总结**。主要讨论语言扩展的进阶内容,比如指针、垃圾回收、异常、调试等。

发布于 山东