编译原理之基础篇

对于传统编译语言,程序中一段源代码在执行前会经历三个步骤(统称为“编译”):javascript

分词/词法分析(Tokenizing/Lexing)

分词/词法分析就是将程序代码分解成对编程语言来讲有意义的代码块,这些代码块被称为词法单元(token)java

咱们直接举例子说明:编程

var a = 2;

这段程序通过词法分析后会被分解成下面这些词法单元:var、a、=、二、;
image.pngsegmentfault

空格是否被看成词法单元,取决于空格在这门语言中是否具备意义

解析/语法分析(Parsing)

解析/语法分析就是将词法单元流(数组)转换为一个由元素逐级嵌套所组成的表明了程序语法结构的树——抽象语法树(Abstract Syntax Tree, AST)数组

咱们来看一下 var a = 2; 通过语法分析后生成的AST是什么样子的:
image.png编程语言

image.png

从上面的截图中,能够看到这段程序的类型是 VariableDeclaration,也就是说这段代码是用来声明变量的。ide

AST 相关的知识本人也正在学习中,因此文章中不会对 AST 进行详细解释,后续会发表相关文章。若是想了解 AST,请查看 AST对象文档
若是想了解如何查看一段代码的 AST,请参考 AST抽象语法树——最基础的javascript重点知识,99%的人根本不了解

代码生成

代码生成就是将AST转换为可执行代码(机器指令)的过程。这个过程与语言、目标平台等息息相关。学习

参考文章:
1.《你不知道的JavaScript 上卷》
2. AST抽象语法树——最基础的javascript重点知识,99%的人根本不了解
相关文章
相关标签/搜索