还是按照上篇博客的实例来讲。
语义分析做了哪几件事?这几件事分别通过什么方法完成的?最后的结果是什么?
1. java类中的符号输入到符号表;(添加默认的构造器)
过程:即把抽象语法树中符号输入到符号表中,这里的符号包括import节点上的符号,类名,类成员以及方法等。符号表主要有符号地址和符号信息,用于语义检查和地址分配。
方法:com.sun.tools.javac.main.JavaCompiler.enterTrees(List)
结果:抽象语法树
2. 处理注解
过程:处理注解(Annotation)的其实是一组API,用来在编译期间处理注解;我认为,处理主要是指对注解的实际意义进行解析,比如@RequestMapping,它是用来完成映射,那么处理后的结果就要形成映射关系。
方法:com.sun.tools.javac.main.JavaCompiler.processAnnotations(List, List)
结果:注解语法树
3.标注检查,检查语义的合法性并进行逻辑判断
过程:标注检查包括变量使用前是否已被声明、变量与赋值之间的数据类型是否能够匹配等。
如有下面声明:
int a = 1;
boolean b = false;