对于传统编译语言,程序中一段源代码在执行前会经历三个步骤(统称为“编译”):javascript
分词/词法分析就是将程序代码分解成对编程语言来讲有意义的代码块,这些代码块被称为词法单元(token)。java
咱们直接举例子说明:编程
var a = 2;
这段程序通过词法分析后会被分解成下面这些词法单元:var、a、=、二、;
segmentfault
空格是否被看成词法单元,取决于空格在这门语言中是否具备意义
解析/语法分析就是将词法单元流(数组)转换为一个由元素逐级嵌套所组成的表明了程序语法结构的树——抽象语法树(Abstract Syntax Tree, AST)。数组
咱们来看一下 var a = 2;
通过语法分析后生成的AST是什么样子的:编程语言
从上面的截图中,能够看到这段程序的类型是 VariableDeclaration,也就是说这段代码是用来声明变量的。ide
AST 相关的知识本人也正在学习中,因此文章中不会对 AST 进行详细解释,后续会发表相关文章。若是想了解 AST,请查看 AST对象文档
若是想了解如何查看一段代码的 AST,请参考 AST抽象语法树——最基础的javascript重点知识,99%的人根本不了解
代码生成就是将AST转换为可执行代码(机器指令)的过程。这个过程与语言、目标平台等息息相关。学习
参考文章:
1.《你不知道的JavaScript 上卷》
2. AST抽象语法树——最基础的javascript重点知识,99%的人根本不了解