《你不知道的JavaScript(上)》——1.1编译原理

在传统编译语言的流程中,程序中的一段源代码在执行之前会经历三个步骤。统称为“编译”。

  • 分词/词法分析(Tokenizing/Lexing)
这个过程会将由字符组成的字符串分解成有意义的代码块,这些代码块被称为词法单元(token)。

例如,var a = 2; 。这段程序通常会被分解成为下面这些词法单元:var、a、=、2、;。空格是否被当做词法单元,取决于空格在这么语言中是否具有意义。(如Python中的代码是以4个空格来进行缩进的,那么空格就会被当作词法单元)

分词(tokenizing)和词法分析(Lexing)之间的主要差异在于词法单元的识别是通过有状态还是无状态的方式进行的。如果词法单元生成器在判断a是一个独立的词法单元还是其他词法单元的一部分时,调用的是有状态的解析规则,这么这个过程就被称为词法分析。反之,如果词法单元生成器在判断a是一个独立的词法单元还是词法单元的一部分时,调用的是无状态的解析规则,那么这个过程就被称为分词。

  • 解析/语法分析(Parsing)
这个过程是将词法单元流(数组)转换称为一个由元素逐级嵌套所组成的代表了程序语法结构的树。这个树被称为“抽象语法树”(Abstract Syntax Tree,AST)。
  • 代码生成
将AST转换为可执行代码的过程被称为代码生成。既将AST转换为目标平台的机器指令。

简单来说,JavaScript代码在执行前会先进行编译。


猜你喜欢

转载自blog.csdn.net/mypc2010/article/details/78806072