如何编写编译器
外观
许多程序员将编写编译器视为终极挑战。不幸的是,大多数程序员也认为编写编译器是一项极其复杂和艰巨的任务。然而,编写编译器并不需要很复杂。
在深入研究实际编写编译器的过程之前,必须学习一些关键概念。
理解编译器的工作原理的关键之一是理解抽象的概念。例如,当你上车启动发动机时,实际上是在执行大量较小的步骤。你正在使用你的肌肉将你的身体移动到车辆中。你正在将钥匙插入点火装置。然后你转动钥匙直到汽车启动。
同样地,理解编译器要求我们退一步,将该过程视为一系列更大的任务。
我们需要
- 接受一个输入文件。
- 解析它。
- 将解析后的形式转换为另一个内部模型。
- 从模型中生成一个输出文件。
这些步骤中的每一个都被视为一项任务,但每一个都包含许多更小的步骤。例如,接受一个输入文件意味着检查它的存在,检查文件权限以及其他相关任务。同样地,解析文件需要将内容分解成越来越小的单元,然后我们可以根据语言的语法对其进行解释。
编译器到底是什么?嗯,编译器在其最简单的形式中是一个程序,它将高级语言转换为低级语言。这是什么意思?嗯,低级语言更接近目标体系结构,即程序将运行的实际 CPU。
例如,编译器可以将 C 代码翻译成 x86 汇编。
你经常听到与“编译器”相关的词语是“解释器”。什么是解释器?基本上,解释器是一个小型程序,它不会将一种语言翻译成另一种语言,而是仅仅解释文件本身,自行执行指令。
令人困惑吗?希望一个例子能澄清事情
XINTERP 是一个接受 .x 文件的解释器。它打开文件,读取指令,并使用自己的内部代码执行 .x 文件中包含的指令。XINTERP 不是编译器。它不进行翻译。它只是就地执行文件。
现在你已经了解了编译器是什么以及它不是什么,你可以开始编写自己的编译器了。