Javac编译器
2020-01-15 本文已影响0人
暮想sun
把.java文件转变成.class文件,属于一种前端编译器。
1.解析与填充符号表过程
2.插入式注解处理器的注解处理过程
3.分析与字节码生成过程
1.解析与填充符号表
解析步骤包括词法分析和语法分析
词法分析
词法分析是将源代码的字符流转变为标记集合,单个字符是程序编写过程的最小元素,而标记则是编译过程的最小元素,关键字、变量名、字面量、运算符都可以成为标记。
例:int a = b + 2,有6个标记,int 、a、= 、b 、+ 、2
语法分析
语法分析是根据标记序列构成抽象语法树的过程。
填充符号表
符号表是一组符号地址和符号信息构成的表格。
2.注解处理器
插入式注解处理器的标准API在编译期间对注解进行处理,可以看作是编译器插件,如果插件在处理注解期间对语法树进行了修改,编辑器将回到解析及填充符号表的过程重新处理。
3.语义分析与字节码生成
语义分析
主要任务是对结构上正确的源程序进行上下文的审查。
标注检查
标注检查步骤检查的内容包括诸如变量使用前是否已被声明,变量和赋值之间的数据类型是否能够匹配等。
数据及控制流分析
是对程序上下文逻辑更进一步的验证。
解语法糖
虚拟机在运行时不支持语法糖形式语法,在编一阶段还原回简单的基础语法结构。这个过程称为解语法糖。
字节码生成
是javac编译过程的最后一个阶段,不仅仅是把前面各个步骤所生成的信息转换成字节码写到磁盘,编译器还进行了少量的代码添加和转换工作。
实例构造器<init>以及类构造器<clinit>是在这个阶段添加到语法树。