javac编译原理

     Javac 是一种编译器,能将一种语言规范转化为另外一种语言规范,
    Java之所以能实现跨平台,主要得益于JVM(Java Virtual Machine)的强大。JVM为什么能实现让Java代码可以跨平台呢?那就要从Java程序的整个编译、运行的过程说起。

       我们写的Java程序是遵循着Java的语言规范,是面向开发者能读懂的语言。但机器不是人,它不能懂“System.out.println("hello world");”是什么意思。你想让cpu为你做事,那你就必须说cpu能听得懂的话,而cpu能听得懂的话就是一个一个的指令。所以你写的Java代码会被先编译成.class文件也就是JVM能读懂的语言,再由ClassLoader将.class文件加载到JVM运行时数据区,并最终由JVM翻译、调用C/C++执行。

       我们就先从.Java到.class的编译过程说起。

       首先要读取源代码,一个字节一个字节地读进来,找到关键词如if、for、while等,这就是词法分析的过程。这个过程结束以后Java代码就变成了规范的Token流,就像我们把一句话中的名词、动词、标点符号分辨出来。

       接着就是对Token流进行语法分析了,比如If后面跟着的是不是一个布尔型的变量,并将符合规范的语法使用语法树存贮起来。之所以要用语法树来存储,是因为这样做可以方便以后对这棵树按照新的规则重新组织,这也是编译器的关键所在。

       接下来就是语义分析,编译器可以保证形成语法树以后不存在语法错误,但语义是否正确则无法保证。还有就是Java会有一些相对复杂的语法,语义分析器的作用就是将这些复杂的语法翻译成更简单的语法,比如将foreach翻译成简单的for循环,使它更接近目标语言的语法规则。

       最后就是由代码生成器将将语义分析的结果生成符合Java虚拟机规范的字节码了。

       所以Java代码变成.class文件所经过的主要步骤有:

       1.词法分析器      --->Token流

       2.语法分析器      --->语法树

       3.语义分析器      --->更加符合目标代码的语法树

       4.代码生成器      --->生成.class


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值