Javac编译器

把.java文件转变成.class文件,属于一种前端编译器。

1.解析与填充符号表过程
2.插入式注解处理器的注解处理过程
3.分析与字节码生成过程


1.解析与填充符号表

解析步骤包括词法分析和语法分析

词法分析

词法分析是将源代码的字符流转变为标记集合,单个字符是程序编写过程的最小元素,而标记则是编译过程的最小元素,关键字、变量名、字面量、运算符都可以成为标记。
例:int a = b + 2,有6个标记,int 、a、= 、b 、+ 、2

语法分析

语法分析是根据标记序列构成抽象语法树的过程。

填充符号表

符号表是一组符号地址和符号信息构成的表格。

2.注解处理器

插入式注解处理器的标准API在编译期间对注解进行处理,可以看作是编译器插件,如果插件在处理注解期间对语法树进行了修改,编辑器将回到解析及填充符号表的过程重新处理。

3.语义分析与字节码生成

语义分析

主要任务是对结构上正确的源程序进行上下文的审查。

标注检查

标注检查步骤检查的内容包括诸如变量使用前是否已被声明,变量和赋值之间的数据类型是否能够匹配等。

数据及控制流分析

是对程序上下文逻辑更进一步的验证。

解语法糖

虚拟机在运行时不支持语法糖形式语法,在编一阶段还原回简单的基础语法结构。这个过程称为解语法糖。

字节码生成

是javac编译过程的最后一个阶段,不仅仅是把前面各个步骤所生成的信息转换成字节码写到磁盘,编译器还进行了少量的代码添加和转换工作。

实例构造器以及类构造器是在这个阶段添加到语法树。

你可能感兴趣的:(Javac编译器)