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的