从零开始,学习如何编写自己的编译器
在这篇文章中,我将介绍编译器的基本知识,并讲解编写编译器的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”会导致语法错误。