Javac是一种编译器,编译器简单来说就是个翻译器,将一种语言翻译成另外一种语言,往往是将高级的语言翻译成对机器友好的底层语言。但是不同机器之间有差别,为了实现在各机器能识别语言,这个工作交个JVM来完成。而Javac得任务就是将Java源码转化为JVM能识别得语言。
Java源码(.java)->Javac->Java字节码(.class 二进制)->JVM->当前机器能识别得机器语言
Javac的过程
1.源码
2.Token流(词法分析)
3.语法树(语法分析)
4.注解语法树(语义分析)
5.字节码(代码生成)
词法分析:
Javac的接口类是com.sun.tools.javac.parser.Lexer 默认实现类为 xxxxx.Scanner
Scanner会逐个读取Java源文件的单个字符,然后解析出符合Java语言规范的Token序列
语法分析:
将token流更加结构化成为一个语法树
语义分析
对语法树进一步细化,去掉无用代码,变量自动转化,代码检查,去除语法糖等
代码生成
遍历语法树,生成最终的字节码
网友评论