Javac编译原理

         Java语言有Java语言规范,这个规范详细描述了Java语言有哪些词法和语法,而Java虚拟机也有Java虚拟机规范,Java虚拟机规范和Java语言规范不是一回事。那么如何才能让Java的语法规则适用Java虚拟机的语法规则呢?这个任务就是由Javac编译器来完成,它的任务就是将Java语言规范转化成Java虚拟机语言规范,完成“翻译”工作,然后由JVM将Java虚拟机语言规范再转换成当前这个机器可以识别的机器语言。Javac功能如下图所示:

     

         Java编译器的作用就是将符合Java语言规范的源代码转换成符合Java虚拟机规范的Java字节码。主要过程如下:

  1. 读取源代码,一个字节一个字节的读进来,找出这些字节中哪些是语言关键词,如Java中的if、else、for、while等关键字,这个步骤是词法分析过程。词法分析的结果就是从源代码中找出一些规范化的Token流,类似于人类语言中词性识别、标点符号等。
  2. 对Token流进行语法分析,这一步就是将这些关键词组合在一起是否符合Java语言规范,如在if后面是否紧跟着一个布尔表达式,语法分析的结果是形成一个符合Java语言规范的抽象语法树。
  3. 语义分析主要工作是把一些难懂的、复杂的语法转换成更加简单的语法,类似于将文言文翻译成白话文。语义分析的结果就是将复杂的语法转换成最简单的语法,对应到Java中。如将foreach转换成for循环结构还有注解等,最后形成抽象语法树,这课语法树更加接近目标语言的语法规则。
  4. 最后,通过字节码生成器生成字节码,根据经过注解的抽象语法树生成字节码。

        代码生成器的结果就是生成符合Java虚拟机规范的字节码,这个过程如下图所示:



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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值