一. Javac:从源代码到字节码


参考资料:深入分析JavaWeb技术内幕

1. 什么是Javac

Javac是一种编译器,将Java源代码编译成JVM能够识别的一种语言,JVM再把这种语言转变成机器能够识别的语言。从表面上看就是将.java文件编译成.class文件。.class文件中是一连串的 16 进制二进制流。

javac 编译器也称为前端编译器

2.Javac编译器的基本结构

Javac编译器工作步骤:

  1. 词法分析:识别关键词
  2. 语法分析:检查关键词组合在一起是不是符合语法规范
  3. 语义分析:将复杂的语法转换为简单的语法,如将foreach转为for
  4. 通过字节码生成器生成字节码
    在这里插入图片描述

3. Javac工作原理

1.词法分析器

在这里插入图片描述
由图可知,两个Factory生成两个实现类:Scanner、JavacParser。
JavacParser规定哪些词符合Java语法规范,Scanner负责具体读取和归类不同词法,Token规定了所有Java语言的合法关键词,Names用来储存和表示解析后的词法。

词法分析过程在JavacParser的parseCompilationUnit方法中完成
//代码不贴了,整不明白
大致就是从源文件每个字符开始,按照语法规范找到关键字、属性、方法定义等构建一个语法树。

以下面的代码为例:

package compile
/**
 * Cifa
 * <p/>
 * Author By: xulingbo
 */
public class Cifa{
	int a;
	int b = a + 1;
}

这个类对应的Token流:
在这里插入图片描述
Token.IDENTIFIER表示用户定义的名称,如类名、属性名、方法名。

JavacParser规定了要读取哪个Token,Token流要符合Java规范。比如package后必须跟包名。

Token与Name是对应关系

2. 语法分析器

语法分析器将Token流转化为更加结构化的语法树,也就是将单词组装成语句。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值