笔记

万物寻其根,通其堵,便能解其困。
  博客园  :: 新随笔  :: 管理

JVM高级特性与最佳实践(第3版)--Javac编译器

Posted on 2025-06-18 16:43  草妖  阅读(3)  评论(0)    收藏  举报

从Javac代码的总体结构来看,编译过程大致可以分为1个准备过程和3个处理过程,它们分别如下 所示。

   1)准备过程:初始化插入式注解处理器。

   2)解析与填充符号表过程,包括:

    词法、语法分析。将源代码的字符流转变为标记集合,构造出抽象语法树。

    填充符号表。产生符号地址和符号信息。

  3)插入式注解处理器的注解处理过程:插入式注解处理器的执行阶段,本章的实战部分会设计一 个插入式注解处理器来影响Javac的编译行为。

  4)分析与字节码生成过程,包括:

    标注检查。对语法的静态信息进行检查。

    数据流及控制流分析。对程序动态运行过程进行检查。

    解语法糖。将简化代码编写的语法糖还原为原有的形式。

    字节码生成。将前面各个步骤所生成的信息转化成字节码。

上述3个处理过程里,执行插入式注解时又可能会产生新的符号,如果有新的符号产生,就必须转回到之前的解析、填充符号表的过程中重新处理这些新符号。

 我们可以把上述处理过程对应到代码中,Javac编译动作的入口是com.sun.tools.javac.main.JavaCompiler类,上述3个过程的代码逻辑集中在这个类的compile()和compile2()方法里: