菜单

编程语言和编译器

相关源文件

目的与范围

本页面概述了“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
PythonLisp 解释器,简单解释器低到中
Java编写解释器中等
CC语言实现的虚拟机,CHIP-8中等

来源: README.md314-317 README.md321-325 README.md311-312 README.md155-159

编译器和解释器架构

下图说明了编译器或解释器的典型阶段以及它们如何转换源代码

来源: README.md290-333

该代码库包含实现各种类型语言的教程

类 Lisp 语言

Lisp 实现因其简单的语法和强大的语义而在学习编译器/解释器构建方面广受欢迎。

教程实现语言重点
mal - 制作一个 Lisp多种语言完整的 Lisp 实现
构建你自己的 LispC用 C 实现 Lisp
小型 Lisp 解释器JavaScript简单 Lisp 解释器
如何编写一个 Lisp 解释器Python极简 Lisp
自己写一个 SchemeHaskellScheme 实现

来源: README.md292 README.md295 README.md315 README.md323 README.md309-310

低级语言实现

这些教程侧重于实现具有类 C 语法或目标为机器码的编译器。

教程实现语言重点
自解释的 C 解释器C自解释 C
“让我们构建一个编译器”的 C & x86 版本C传统编译器技术
构建一个 C 编译器OCaml完整的 C 编译器
KaleidoscopeC++基于 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实用垃圾回收实现

来源: README.md294 README.md296

实现方法

按语言实现技术

按目标语言特性集

该代码库涵盖了从极简语言到功能丰富的系统的实现

特性级别示例核心概念
最小超小型编译器/解释器基本解析,极简语义
教育性Lisp、Scheme 实现函数式编程,递归
实用性C 编译器,虚拟机实现控制流,数据结构,内存管理
高级基于 LLVM 的编译器优化,代码生成

来源: README.md290-333

语言实现的学习路径

对于有兴趣构建自己编程语言的初学者,建议按以下步骤进行学习

  1. 从简单的解释器开始

    • 《超小型解释器》(JavaScript)
    • 《小型 Lisp 解释器》(JavaScript)
    • 《如何编写一个 Lisp 解释器》(Python)
  2. 转向基本的编译器概念

    • 《超小型编译器》(JavaScript/Go)
    • 《让我们构建一个简单的解释器》(Python)
  3. 探索内存管理

    • 《宝宝的第一个垃圾收集器》(C)
    • 《编写一个简单的垃圾收集器》(C)
  4. 处理更复杂的语言特性

    • 《编写解释器》(Java)
    • 《自己写一个 Scheme》(Haskell)
  5. 高级主题

    • 《Kaleidoscope:用 LLVM 实现一种语言》(C++)
    • 《编写一个 C 编译器》(OCaml)

来源: README.md312-317 README.md305 README.md324-325 README.md294 README.md296 README.md311 README.md309

结论

“Build Your Own X”代码库提供了构建各种编程语言和编译器的全面资源集合,涵盖了不同的编程语言和实现方法。这些教程提供了宝贵的实践经验,帮助您从基本的解释器到复杂的编译器,理解编程语言的内部工作原理。

无论您是对语言设计、编译器构建感兴趣,还是只是想了解编程语言的底层工作原理,这个代码库中的资源都能为您的学习之旅提供实用指导。

来源: README.md290-333