编译器写作之旅

  最近在Github上看到一个十分有趣的项目acwj(A Compiler Writing Journey),一个用C语言编写编译器的项目。身为一个程序员,这在我看来是一件十分酷的事情。于是便跟随着作者的项目学习,在此记录学习过程,并于大家分享。

本系列文章的目标

  • 编写一个可以自编译的编译器,也就是说是一个C语言编译器
  • 至少针对一个硬件平台。
  • 在编译器领域有很多研究。我想在这个旅程中从绝对零开始,所以我倾向于采用实用的方法,而不是重理论的方法。
  • 遵循 KISS 原则:保持简单,傻瓜式!我肯定会在这里使用 Ken Thompson 的原则:“如有疑问,请使用蛮力。”
  • 我会将旅程分解为许多简单的步骤,而不是进行大的飞跃。这将使编译器的每一个新添加都成为一口大小且易于消化的东西。

编译器的工作基础

  编译器的工作是将一种语言(通常是高级语言)的输入翻译成不同的输出语言(通常是比输入低级的语言)。主要步骤是:

编译器debugrelease 编译器开发_github

让我们来依次介绍:

  1. 词法分析:识别词法元素。例如标识符、关键字、运算符等等,我们称其为token
  2. 语法分析:解析输入,即识别输入的语法和结构元素,并确保它们符合语言的语法。
  3. 语义分析:即理解输入的意思。这实际上与识别语法和结构不同。
  4. 转义:将输入的含义翻译成不同的语言。在这里,我们一次将输入部分转换为较低级别的语言。

  本次编译器开发简述到此为止。下一节我们将开始从scanner开始编写,扫描我们的输入文件并找到作为我们语言词汇元素的token。

本文Github地址:https://github.com/Shaw9379/acwj/tree/master/00_Introduction