Javac编译器与语法糖

本文介绍了Javac编译器的工作流程,包括解析与填充符号表、注解处理器的作用以及语义分析和字节码生成。同时,详细讨论了Java的语法糖,如泛型擦除、自动装箱/拆箱、遍历循环和变长参数的编译原理。
摘要由CSDN通过智能技术生成

Javac编译器与语法糖

Javac编译过程大致分为3个过程:

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

###解析与填充符号表

  • 词法、语法分析:词法分析是将源代码的字符流转变为标记(Token)集合。 语法分析是根据Token序列来构造抽象语法树的过程。经过这个步骤后,编译器就基本不会再对源码文件进行操作了,后续的操作都建立在抽象语法树之上。
  • 填充符号表:符号表是由一组符号地址和符号信息构成的表格。符号表中所登记的信息在编译的不同阶段都要用到,在语义分析(后面的步骤)中,符号表所登记的内容将用于语义检查和产生中间代码,在目标代码生成阶段,党对符号名进行地址分配时,符号表是地址分配的依据。

###注解处理器
注解处理器是一组编译器额插件,可以读取、修改、添加抽象语法书上的任意元素。如果这些插件在处理注解期间对语法书进行了修改,编译器将回到解析及符号填充表过程重新处理。
注解处理器主要有三个用途。一是定义编译规则,并检查被编译的源文件。二是修改已有源代码。三是生成新的源代码。其中,第二种涉及了 Java 编译器的内部 API,因此并不推荐。第三种较为常见,是 OpenJDK 工具 jcstress,以及 JMH 生成测试代码的方式。

###语义分析与字节码生成

  • 标注检查:标注检查包括变量使用前是否被声明,变量与赋值之间的数据类型能否匹配等。
  • 数据及控制流分析:对程序的逻辑更进一步验证,可以检查局部变量在使用前是否被赋值,方法的每条路径是否都有返回值,受检查异常都有正确处理等问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值