java编译器源码分析之语义分析和字节码生成

本文详细探讨了Java编译器在语义分析阶段执行的五个关键步骤,包括符号输入到符号表、处理注解、标注检查、数据及控制流分析和消除无用代码。通过对这些步骤的分析,揭示了编译器如何确保代码的合法性和优化。最后,阐述了字节码生成的过程,如何将抽象语法树转化为最终的class文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

还是按照上篇博客的实例来讲。
语义分析做了哪几件事?这几件事分别通过什么方法完成的?最后的结果是什么?

1. java类中的符号输入到符号表;(添加默认的构造器)

过程:即把抽象语法树中符号输入到符号表中,这里的符号包括import节点上的符号,类名,类成员以及方法等。符号表主要有符号地址和符号信息,用于语义检查和地址分配。
方法:com.sun.tools.javac.main.JavaCompiler.enterTrees(List)
结果:抽象语法树

2. 处理注解

过程:处理注解(Annotation)的其实是一组API,用来在编译期间处理注解;我认为,处理主要是指对注解的实际意义进行解析,比如@RequestMapping,它是用来完成映射,那么处理后的结果就要形成映射关系。
方法:com.sun.tools.javac.main.JavaCompiler.processAnnotations(List, List)
结果:注解语法树

3.标注检查,检查语义的合法性并进行逻辑判断

过程:标注检查包括变量使用前是否已被声明、变量与赋值之间的数据类型是否能够匹配等。
如有下面声明:

int a = 1;
boolean b = false;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值