一、javac是什么
javac就是一个种编译器,它的功能就是将java源代码翻译成JVM可以识别的二进制码,简单一点就是将.java文件转换成.class文件
功能图如下:
1.1 javac是怎么编译源代码?
javac结构主要分为词法分析器,语法分析器,语义分析器,代码生成器如下图:
词法分析器:
主要是逐行读取源代码,然后将源代码匹配到Token流,即使识别每一个单词是什么东西,如package匹配到Token.PACKAGE,class匹配到Token.CLASS,类名或者变量名匹配成Token.IDENTIFIER,如:
package com.shawnwang.test
public class HelloWorld(){
int a;
int c=a+1;
}
上面代码的Token如下图所示。
语法分析器:
主要将Token流转换成更加结构化的语法树,就好像是给上面的单词组装成一个完整的句子
语义分析器:
将上面的语法数再精简和处理,如添加默认构造函数,检查变量初始化,类型是否匹配,检查exception是否抛出,解除java语法糖等等。
代码生成器:
将语法树生成java字节码,可以理解为中间语言如c#的IL语言或者汇编语言等。
总结:其他语言的的编译原理可能不尽相同,但基本原理都会大致相同。