Javac编译原理(基础理论知识)
2018-01-22 16:17
495 查看
Javac编译原理
1. javac编译器的基本结构
javac的各个模块就是完成了将java源代码转变成java字节码的任务,所以javac主要就有四大模块,分别是词法分析器、语法分析器、语义分析器和代码生成器。
2.Javac工作原理分析
1. 词法分析器
javac的主要词法分析器的接口类是com.sun.tools.javac.parser.Lexer,它的默认实现类是com.sun.tools.javac.parser.Scanner,Scanner会逐个读取java源代码的单个字符,然后解析出符合java语言规范的Token序列.
简而言之,词法分析器的作用就是将Java源文件的字符流转变成对应的Token流。
2. 语法分析器
语法分析器是将词法分析器分析的Token流组建成更加结构化的语法树,也就是将一个个单词组装成一句话,一个完整的语句。哪些词语组合在一起是主语、哪些是谓语、哪些是宾语、哪些是定语等,要做进一步的区分。
关于语法分析器还有一点要说明的是,所有语法节点的生成都是在TreeMarker类中完成的,TreeMaker实现了JCTree.Factory接口中定义的所有节点的构造方法,从该类中你也能够发现Java中到底有多少种语法节点。
3. 语义分析器
将复杂的语法转换成简单的语法(eg.注解、foreach转化为for循环、去掉永不会用到的代码块)并做一些检查,添加一些代码(默认构造器)
4. 代码生成器
经过语义分析器完成后的语法树已经非常完善了,接下来Javac会调用com.sun.tools.javac.jvm.Gen类遍历语法树生成最终的Java字节码.
生成Java字节码需要经过两个步骤:
1)将java方法中的代码块转成符合JVM语法的命令形式,JVM的操作都是基于栈的,所有的操作都必须经过出栈和进栈来完成。
2)按照JVM的文件组织格式将字节码输出到以class为扩展名的文件中。
3.设计模式解析之访问者模式
前面介绍的词法分析、语法分析器、语义分析器和代码生成器中有多次遍历语法树的过程。然而每次遍历这颗语法树都会进行不用的处理动作,对这颗语法树也要进行进一步的处理。那么这是如何实现的呢?这实际上就是采用访问者模式设计的,每次遍历都是依次访问者的执行过程。
至于设计结构啥的,一些细节,可以参考相关文章和百度,这里不做文字说明,只是标注有这个东西而已。
相关文章推荐
- mysql 索引,死锁 配置 等 基础理论知识整理
- .net 三层结构基础理论知识(高手勿进)
- 菜鸟学Linux 第001天笔记 基础理论知识
- 今天学习了分布式服务框架的基础理论知识(一)
- 网站模板配色基础知识:心理学色彩理论
- 干货!情感计算理论基础必看知识!!
- 基础理论知识复习(下)
- 1、用表格或导图总结rfid理论基础知识要点。
- HTTPS的基础理论知识
- Hibernate知识整理1----基础理论
- java-基础--多线程理论知识
- RSS基础知识与应用——纯应用,不讨论理论知识
- 追踪算法理论知识基础
- 矩阵理论基础知识(3)--广义逆矩阵
- 基础知识理论
- 相关数学理论和公式(基础知识杂选)
- 计算机基础理论知识梳理篇(二):目态(用户态)、管态(内核态)
- USB接口的基础理论知识
- TestNG学习-001-基础理论知识
- RFID理论基础知识要点(前三章)