> 文章列表 > 从零开始,学习如何编写自己的编译器

从零开始,学习如何编写自己的编译器

从零开始,学习如何编写自己的编译器

在这篇文章中,我将介绍编译器的基本知识,并讲解编写编译器的5个主要阶段。

什么是编译器?

编译器、转译器和解释器是三个类似的概念。

编译器是一种程序,它将整个程序的源代码转换为计算机处理器可以执行的机器代码。

转译器用于将一种高级语言转换为另一种高级语言,例如将Java转换为Javascript。

解释器是一种直接读取并执行源代码的程序,不会创建可执行程序。

编译器流程

过去60年来,人们对语言和编译器进行了深入研究,并发展了理论和最佳实践。在许多编译器中,翻译发生在多个阶段:

Source code -> Parsing -> Semantic Analysis -> Optimization -> Code Generation -> Target code

Parsing

Parsing将源代码转换为更易于进行语义分析的数据结构,通常是一棵树(“语法树”)。

例如,a = 3 + sin(x) 的语法树如下


Assignment/    \\
a      Expression Add/         \\3           Function call/        \\sin         x

Parsing还检查源代码是否遵循源语言的语法。例如,“a 3 = +sin)x”会导致语法错误。

Lexing