java编译原理了解

java编译原理

java源代码(符合语言规范)–>javac–>.class(二进制文件)–>jvm–>机器语言(不同平台不同种类)

语义分析器、语法分析器、语义分析器、代码生成器
源码->token流->语法树->注解语法树->字节码
images

流程:

词法分析器:将源码转换为Token流
将源代码划分成一个个Token(找出java语言中的if,else,for等关键字)

语法分析器:将Token流转化为语法树
将上述的一个个Token组成一句句话(或者说成一句句代码块),检查这一句句话是不是符合Java语言规范(如if后面跟的是不是布尔判断表达式)

语义分析器:将语法树转化为注解语法树
将复杂的语法转化成简单的语法(eg.注解、foreach转化为for循环、去掉永不会用到的代码块)并做一些检查,添加一些代码(默认构造器)

代码生成器:将注解语法树转化为字节码(即将一个数据结构转化成另一个数据结构)

ps:要获取javac编译器,可以通过OpenJDK来下载源码,可以自己编译javac的源码,也可以通过调用jdk的

学习参考
Javac编译原理
Java编译原理(有感)