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