1. 词法、语法分析和填充符号表
1.1 词法分析:将源代码的字符流转为Token集合,关键字、变量名、字面量和运算符都可成为Token,比如代码“int i = a + 2”,那么int, i, =, a, +, 2这六个都是Token。
1.2 语法分析:根据Token序列构建抽象语法树的过程,抽象语法树的各个节点是一个语法结构,如类型、修饰符以及返回值等。
1.3 填充符号表:根据信息构建一个类似键值对的表格,用于后面的语义分析阶段。
2. 注解处理
某些注解在编译期间可以修改抽象语法树的任意元素,因此,当处理注解对语法树进行了修改,编译器会重新进行词法、语法分析并填充符号表,直至注解处理结束。
3. 标注检查、数据及控制流分析和字节码生成
3.1 标注检查:经过第一和第二步得到的抽象语法树只能表示一个结构正确的源程序,但无法保证源程序符合逻辑。而标注检查会对变量使用前是否已声明、变量与赋值间的数据类型是否匹配等内容进行检查。
3.2 数据及控制流分析:会对方法是否有返回值、是否所有的受检异常都被正确处理等内容进一步验证。
3.3 解语法糖:语法糖主要是为了便于程序员代码开发的一种技术。比如常见的泛型、变长参数、增强