什么是Javac

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/uniquewonderq/article/details/79956923

Javac 编译器的任务就是讲java语言规范转化成Java虚拟机语言规范,完成 “翻译工作”

什么是Javac

Javac 是一种编译器,能将一种语言规范转化成另外一种语言规范。通常编译器都是将便于人理解的语言规范转化成机器容易理解的语言规范。如c,c++或者汇编语言都是讲远吗直接编译成目标机器码,这个目标机器码是CPU直接执行的指令集合。这些指令集合也就是底曾的一种语言规范,机器能够直接识别这种识别这种语言规范,但是人不可能直接去写目标机器码。虽然这种机器码执行起来非常搞笑,但是对人太不友好了, 开发这个代码的成本往往远高于剩下的机器的执行成本。

从某种意义上来说,有了编译器才有了程序语言的繁荣,因为片一起是人类和机器沟通的一个纽带。那么回过头来,javac的编译器也是将Java这种对人非常友好的编程语言编译成对所有机器都非常友好的语言。注意,这种语言不是针对某个机器的,甚至包括不同种类,不同平台的机器。如何系哦啊出不同种类,不同机器之间的差别,这个任务就由JVM来完成,而Javac的任务就是将Java源代码语言先转化成JVM能够识别的一种语言,然后由JVM将JVM语言再转化成当前这个机器能够识别的机器语言。所以这样看来,Java语言向开发者屏蔽了很多与木鳖机器相关的细节,使得Java语言的执行和平台无关,这也就成就了java语言的繁荣。

如下图所示,javac的任务就是将java源码编译成Java字节码,也就是JVM能够识别的二进制码。从表面上看就是.java文件转成.class文件,而实际上是将Java的源代码转化成了一连串二进制数字,这些二进制数字是有格式的,只有JVM能够正确识别它们到底表达了什么意思。
这里写图片描述

Javac编译器的基本结构

回忆一下,如何才能编译程序呢?
1.词法分析。在读取源码时候,一个字节为一节读进来,找出这些字节中有哪些是我们规定的语法关键词,如if else for while 等,要识别哪些if是合法的关键词,哪些不是,这个步骤就是词法分析过程。
2.语法分析。检查这些关键词组合在一起是不是符合java语言规范,如在if的后面是不是紧跟着一个布尔判断表达式。与英语中,句子要有主谓宾一样,都有才算语法正确。
3.语义分析。如果通过语法分析,但是语义是否正确呢?语义分析的主要工作是把一些难懂的,复杂的语法转化为更加简洁的语法,江浙步骤对应到我们人类的语言中,就是讲难难懂的文言文转化为大家都能懂得白话文,或者注解一下一些成语,便于人们更好滴理解。
语义分析的结果就是讲复杂的语法转化成最贱的语法,对应到java中,如将foreach转成for虚幻结构,还有注解等,最后形成一个注解过后的抽象语法树,这棵语法树更接近目标语言的语法规则。
4.最后,通过字节码生成器生产字节码,根据经过注解的抽象语法树生产字节码,也就是讲一个数据结构转化为另一个数据结构,就像将所有中文词语翻译成英文单词后,按照英文语法组装成英文句子。
这里写图片描述
Javac 的各个模块完成了将Java源代码转化成Java字节码的任务,所以javac主要就有4个模块
分别是词法分析器、语法分析器、语义分析器和代码生成器。

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页