Javac 编译器
编译过程大致可以分为 1个准备过程,3 个处理过程,分别是:
准备过程:
初始化插入式注解处理器
处理过程:
1:解析与填充符号表过程
2:插入式注解处理器的注解处理过程(在这个过程里如果产生新的符号,就必须转会到第一个处理过程重新处理)
3:分析与字节码生成过程
一:解析与填充符号表过程
1. 词法、语法分析
词法分析是将源代码的字符流转变为标记(Token)集合,单个字符是程序编写过程的最小元素,而标记则是编译过程的最小元素,关键字、变量名、字面量、运算符都可以成为标记
语法分析是根据 Token 序列构造抽象语法树的过程,抽象语法树(Abstract Syntax Tree,AST)是一种用来描述程序代码语法结构的树形表示方式,语法树的每一个节点都代表着程序代码中的一个语法结构(Construct),例如包、类型、修饰符、运算符、接口、返回值甚至代码注释等都可以是一个语法结构。
2. 填充符号表
符号表(Symbol Table)是由一组符号地址和符号信息构成的数据结构。符号表中所登记的信息在编译的不同阶段都要用到。
在语义分析中,符号表所登记的内容将用于语义检查,和产生中间代码
在目标代码生成阶段,当对符号名进行地址分配时,符号表是地址分配的依据。
二:注解处理器
在 JDK 1.5 之后,Java 语言提供了对注解