课程介绍

通过从零开始编写解释器和编译器来创建你自己的编程语言。
课程描述
本课程旨在为初学者友好地介绍编译器。随着课程的进展,我们将逐步构建一个非常简单的脚本语言的解释器。
我们将涵盖以下内容:
- 词法分析
- 语法分析
- 解析算法
- 中间表示(抽象语法树)
- 形式语言与文法
- BNF符号与语法图
- 错误识别与报告
- 代码生成
- 编写我们自己的虚拟机
- 发射字节码
- 类型检查
- LLVM中间表示
- 简单的代码优化
- 还有更多!
编译器一直被认为是一个难以掌握的课题,而它们与“龙”的历史联系(始于《龙书》)并没有真正帮助改善这一印象。
我们将尝试以初学者的角度来讲解每一个概念。你可以将这门课视为面向从未编写过解释器的开发者的“第一课”。
我们将要构建的是什么呢?
我们将从零开始,共同构建一种名为 Pinky 的简单编程语言的编译器。可以将其视为一种受 Lua 和 ALGOL W 语法启发的玩具脚本语言。通过这个过程,你将深入了解编译器的工作原理,以及如何从头开始实现一个编译器。
我们的主要宿主语言将是 Python。Python 让我们能够专注于编译器特有的概念,同时保持极高的生产效率。不过,我也会尽量提供一些建议,教你如何使用 C 语言实现我们刚刚学到的想法。
要求
你只需要一个命令行界面、一个简单的代码编辑器和一个 Python 解释器。所有这些工具都是跨平台的,因此无论你使用的是 Windows、macOS 还是 Linux,都可以跟随教程一起编码!
此课程面向哪些人:
如果你从未编写过解释器,或者即使你有过相关经验但仍觉得自己在理解上存在一些盲点,那么这门课程绝对适合你!
这是一个自包含的课程,没有先修要求。然而,如果你已经了解编码的基础知识(如 if-else 语句、循环和函数),那么你将能够从中获得更多的收获。