编译原理
尽管通常将 JavaScript 归类为“动态”或“解释执行”语言,但事实上它是一门编译语言。任何 JavaScript 代码片段在执行前都要进行编译(通常就在执行前)。但与传统的编译语言不同,它不是提前编译的,编译结果也不能在分布式系统中进行移植。
编译三步骤
1. 分词/词法分析(Tokenizing/Lexing)
将字符串分解成编程语言所能识别的代码块,这些代码块被称为词法单元(token)。
如果词法单元生成器在判断一个字符是一个独立的词法单元还是其他词法单元的一部分时(是否依赖于其他词法单元),调用的是有状态的解析规则,那么这个过程就被称为词法分析。
2. 解析/语法分析(Parsing)
将词法单元流(数组)转换成一个逐级嵌套结构的树“抽象语法树”(Abstract Syntax Tree,AST)。拥有一个顶级节点,以及连续的子节点。类似于 DOM树?
3. 代码生成
将抽象语法树转换为引擎可识别执行的代码。例如:var a = 2;
第一步:创建一个叫做 a 的变量(分配内存,确定储存地址空间等)。
第二步:运行时引擎会在作用域中查找该变量(LHS),找到之后将 2 这个值储存到 a 中。
The MIT License (MIT)
Copyright (c) 2019, Roojay.
本文链接:https://roojay.com/pages/118b8ca3/