java语言的“编译期”其实是一段“不确定”的操作过程,可能是指一个前端编译器把.java变成.class的过程,也可能是指虚拟机的后端运行期编译器(JLT)把字节码转变成机器码的过程,也有可能是使用静态提前编译器(AOT)直接把.java文件直接编译成本地机器代码的过程。现在讨论的是第一种编译器。
Javac编译器
①javac的源码与测试
运行com.sun.tools.javac.Main的main()方法来执行编译,与命令行中使用javac的命令没什么区别.
编译过程可以分为3个过程:
1.解析与填充符号表过程
2.插入式注解处理器的注解处理过程
3.分析与字节码生成过程
这三个过程的代码逻辑集中在这个类的complie()和compile2()方法中,整个编译最关键的处理就由下面注释的8个方法完成
initProcessAnnotations(processors);//准备过程:初始化插入式注解处理器 delegateCompiler = processAnnotations//执行注解处理( enterTrees//输入到符号表(stopIfError(CompileState.PARSE, parseFiles//词法分析、语法分析(sourceFileObjects))), classnames); compile2()//分析及字节码生成 { case BY_TODO: while (!todo.isEmpty()) generate//生成字节码(desugar//解语法糖(flow//数据流分析(attribute//标注(todo.remove())))); break; }
②解析与填充符号表
解析步骤由parseFiles完成。解析步骤包括词法解析与语法解析两个过程
1.词法、语法解析:
时间: 2024-11-10 11:50:07