在传统编译语言的流程中,程序中的一段源代码在执行之前会经历三个步骤,统称为“编译”。
- 分词/词法分析(Tokenizing/Lexing)
这个过程会将字符组成的字符串分解成(对编程语言来说)有意义的代码块,这些代码块被称为词法单元(token)。例如,考虑程序 var a = 2;。这段程序通常被分解成下面的词法单元:var、a、=、2、;。空格是否会被当做词法单元,取决于空格在这门语言中是否具有意义。 解析/语法分析(Parsing)
这个过程是将词法单元流(数组)转换成一个由元素逐级嵌套所组成的代表了程序语法结构的树,成为“抽象语法树”(Abstract Syntax Tree,AST).代码生成
将AST转换成可执行代码的过程被称为代码生成。这个过程与语言、目标平台息息相关。
简单来说就是将var a = 2;的抽象语法树(AST)转换成一组机器指令,用来创建一个叫做a的变量(包括分配内存等),并将一个值存储在a中。