借用《深入理解java虚拟机》中的一张图片,实际的解析分为多个步骤。
0.初始化插入式注解处理器(非必须)
1.词法分析、
2.语法分析
3.输入到符号表
4.执行注解处理
5.属性分析
6.数据流分析
7.解析语法糖
8.生成字节码
源码中有一个枚举类描述了解析的过程,可以作为参考:
public enum CompileState { INIT(0), PARSE(1), ENTER(2), PROCESS(3), ATTR(4), FLOW(5), TRANSTYPES(6), UNLAMBDA(7), LOWER(8), GENERATE(9); }
因为第0步非必须,我们从第一步词法分析开始
二、词法解析
javac的词法解析器是com.sun.tools.javac.parser.Scanner,实现代码在com.sun.tools.javac.parser.JavaTokenizer,其中核心方法是readToken(),其中
scanIdent()用了解析一个标识符;
scanNumber()用于解析一个数字,包括二进制、8进制、十进制和十六进制;
scanOperator()用了解析加减乘除等操作符;
scanLitChar()解析一个字符串字面量;
词法分析的结果是一个token流