JVM
-编译过程学习
词法分析
- 将源代码的字符流转变为标记集合。关键字、变量名、字面量、运算符都可以称为标记。
- 如
int a = b+2; int、a、=、b、+、2
6个标记。
- 如
- 生成Token流,例如上面的
int
就是一个Token
,不可再拆分。
语法分析
- 根据Token序列构造抽象语法树。
- 语法树的每一个节点都代表着程序代码中的一个语法结构
- 如:包、类型、修饰符、运算符、接口、返回值甚至代码注释都可以是一个语法结构。
填充符号表
- 由一组符号地址和符号信息构成的表格叫做符号表。(可以用哈希表的K-V来理解)。
- 在语义分析阶段:符号表所登记的内容将用于语义检查和产生中间代码。
- 在目标代码生成阶段:当对符号名进行地址分配时,符号表是地址分配的依据。
语义分析
- 对语法树结构上的源程序进行上下文有关性质的审查。
- 解语法糖。
字节码生成
- 把前面各个步骤所生成的信息(语法树、符号表)转化成字节码写到磁盘中,编译器还进行了少量的代码添加和转换工作。
- 如变量初始化、调用父类的实例构造器、字符串的
+
操作替换为StringBuffer和StringBuilder
等操作。 - 最后由
com.tools.javac.jvm.ClassWriter
类的writeClass()
方法输出字节码,生成最终的Class
文件。
评论区