大多数编译器分为三个主要阶段:解析、转换和代码生成
源代码
转换为 抽象语法树(AST)
的过程。
Source Text --> Lexer --> Token --> Parser --> AST
解析通常分为两个子阶段:词法分析
和 语法分析
。
解析的产物是 AST,它为后续的转换和代码生成阶段提供了基础。
词法分析阶段是由词法分析器(也称为扫描器)完成的。 词法分析器的主要任务是将源代码转换为一系列记号(tokens),每个记号代表源代码中的一个基本语法单元。以下是词法分析器的具体功能:
语法分析阶段是由语法分析器(也称为解析器)完成的。 语法分析器的主要任务是将词法分析器生成的记号流(token stream)转换为抽象语法树(AST),并检查记号序列是否符合语言的语法规则。以下是语法分析器的具体功能:
tokens可能看起来像这样:
而抽象语法树(AST)可能看起来像这样:
:::
转换阶段是由转换器(Transformer)完成的。 转换器的主要任务是根据特定的转换规则或插件,对 AST 进行遍历和修改,以实现特定的功能,例如优化代码、语法降级等。以下是转换器的具体功能:
代码生成阶段是由代码生成器完成的。 代码生成器的主要任务是将抽象语法树(AST)转换为可执行的目标代码。这个过程通常是编译器的最后一个阶段,生成的代码可以是机器码、字节码或其他形式的代码表示。
:::