编译的全过程简述
词法分析
第一步, 进行tokenizer, 区分为关键词, 标识符, 字面量, 操作符号等, 将代码转换为token数组. 这一步是上下文无关的.
语法分析
识别出token之后, 下一步, 需要让编译器像理解自然语言一样, 理解它的语法结构.
那么在编译器里,语法分析阶段也会把 Token 串,转换成一个体现语法规则的、树状的数据结构,这个数据结构叫做抽象语法树(AST,Abstract Syntax Tree)
语义分析
生成 AST 以后,程序的语法结构就很清晰了,编译工作往前迈进了一大步。
语义分析的重要特点,就是做上下文相关的分析。
在语义分析阶段,编译器还会识别出数据的类型。比如,在计算“a+3”的时候,我们必须知道 a 和 3 的类型是什么。因为即使同样是加法运算,对于整型和浮点型数据,其计算方法也是不一样的。
语义分析获得的一些信息(引用消解信息、类型信息等),会附加到 AST 上。这样的 AST 叫做带有标注信息的 AST(Annotated AST/Decorated AST),用于更全面地反映源代码的含义。