本页面概述了“Build Your Own X”代码库中关于从零开始创建编程语言、编译器和解释器的教程。这些教程通过指导您实现各种语言组件,提供动手实践经验,帮助您从根本上理解编程语言的工作原理。
无论您是想构建一个简单的解释器、一个功能齐全的编译器,还是想理解垃圾收集器或解析器等特定组件,本文档都将帮助您查找可用资源。对于正则表达式引擎等相关技术,请参阅正则表达式引擎;对于命令行Shell,请参阅命令行Shell。
来源: README.md290-333
编程语言实现涉及创建将人类可读代码转换为机器可执行指令的系统。此过程可以根据语言设计和执行模型以不同方式进行。
编译器在执行前将源代码转换为机器代码或中间表示。该代码库提供了各种关于构建编译器的教程
| 语言 | 教程重点 | 实现复杂度 |
|---|---|---|
| C/C++ | 玩具编译器,LLVM集成 | 中到高 |
| Go | 超小型编译器 | 低 |
| OCaml | 编写一个C语言编译器 | 高 |
| Haskell | 让我们构建一个编译器 | 中等 |
| Python | 源代码到机器码 | 中等 |
来源: README.md300-302 README.md305-306 README.md318 README.md307-308 README.md326
解释器直接执行代码,无需明确的编译步骤,这使得它们实现起来更简单,但在运行时可能速度较慢。
| 语言 | 教程重点 | 实现复杂度 |
|---|---|---|
| JavaScript | 超小型解释器,小型 Lisp | 低 |
| Python | Lisp 解释器,简单解释器 | 低到中 |
| Java | 编写解释器 | 中等 |
| C | C语言实现的虚拟机,CHIP-8 | 中等 |
来源: README.md314-317 README.md321-325 README.md311-312 README.md155-159
下图说明了编译器或解释器的典型阶段以及它们如何转换源代码
来源: README.md290-333
该代码库包含实现各种类型语言的教程
Lisp 实现因其简单的语法和强大的语义而在学习编译器/解释器构建方面广受欢迎。
| 教程 | 实现语言 | 重点 |
|---|---|---|
| mal - 制作一个 Lisp | 多种语言 | 完整的 Lisp 实现 |
| 构建你自己的 Lisp | C | 用 C 实现 Lisp |
| 小型 Lisp 解释器 | JavaScript | 简单 Lisp 解释器 |
| 如何编写一个 Lisp 解释器 | Python | 极简 Lisp |
| 自己写一个 Scheme | Haskell | Scheme 实现 |
来源: README.md292 README.md295 README.md315 README.md323 README.md309-310
这些教程侧重于实现具有类 C 语法或目标为机器码的编译器。
| 教程 | 实现语言 | 重点 |
|---|---|---|
| 自解释的 C 解释器 | C | 自解释 C |
| “让我们构建一个编译器”的 C & x86 版本 | C | 传统编译器技术 |
| 构建一个 C 编译器 | OCaml | 完整的 C 编译器 |
| Kaleidoscope | C++ | 基于 LLVM 的编译器 |
来源: README.md297 README.md298-299 README.md318 README.md302
语言处理的第一阶段包括将源代码分解成词元(词法分析),并将这些词元组织成结构化表示(语法分析)。
| 主题 | 教程资源 | 实现复杂度 |
|---|---|---|
| 词法扫描 | 《Go语言中的词法扫描》 | 低 |
| 解析器组合器 | 《理解解析器组合器》(F#),《用 Rust 学习解析器组合器》 | 中等 |
| AST 构建 | 《超小型编译器》(JavaScript/Go) | 低 |
来源: README.md306 README.md303 README.md331 README.md305 README.md313
内存管理是语言实现的关键方面,而垃圾回收是自动内存回收的常见方法。
| 教程 | 实现语言 | 重点 |
|---|---|---|
| 宝宝的第一个垃圾收集器 | C | 基本垃圾回收概念 |
| 编写一个简单的垃圾收集器 | C | 实用垃圾回收实现 |
该代码库涵盖了从极简语言到功能丰富的系统的实现
| 特性级别 | 示例 | 核心概念 |
|---|---|---|
| 最小 | 超小型编译器/解释器 | 基本解析,极简语义 |
| 教育性 | Lisp、Scheme 实现 | 函数式编程,递归 |
| 实用性 | C 编译器,虚拟机实现 | 控制流,数据结构,内存管理 |
| 高级 | 基于 LLVM 的编译器 | 优化,代码生成 |
来源: README.md290-333
对于有兴趣构建自己编程语言的初学者,建议按以下步骤进行学习
从简单的解释器开始
转向基本的编译器概念
探索内存管理
处理更复杂的语言特性
高级主题
来源: README.md312-317 README.md305 README.md324-325 README.md294 README.md296 README.md311 README.md309
“Build Your Own X”代码库提供了构建各种编程语言和编译器的全面资源集合,涵盖了不同的编程语言和实现方法。这些教程提供了宝贵的实践经验,帮助您从基本的解释器到复杂的编译器,理解编程语言的内部工作原理。
无论您是对语言设计、编译器构建感兴趣,还是只是想了解编程语言的底层工作原理,这个代码库中的资源都能为您的学习之旅提供实用指导。
来源: README.md290-333