zoukankan      html  css  js  c++  java
  • javac编译原理之生死人肉白骨

      生死人肉白骨:使死人复生,使白骨长肉;javac编译就是将.java文件转换为jvm能看懂的.class文件

      简单来说javac编译只需要几个组件即可完成:

      首先:要读取源码,一个字节一个字节的读取进来,找出在这些字节中哪些是我们定义的语法关键字,如java中的if,else,for,while等关键词;要识别哪些 if’ 合法的关键词,哪些不是,这个步骤就是词法分析过程。词法分析的结果就是从源代码中找出一些规范化的Token流,

      接着,就是对Token进行语法分析了,这一步就是检查这些关键词组合在一起是否符合java语言规范,如 if 后是否是一个布尔判断表达式,就像人类语言中是不是主谓宾定状补,主干枝叶分清楚,定语必居主宾前,谓前为状谓后补。语法分析的结果就是形成一个符合java规范的抽象语法树。

      然后就是语义分析了,语义分析就是将一些难懂的代码,复杂的语句转换为通俗易懂的语法,就像生死人中的生,使动用法,使XX复生的意思,对应到java中就是将 foreach转换为for循环,还有注解等,最后形成一个注解过后的抽象语法树,,这棵树也最符合目标语言的语法规范。

      最后,通过字节码生成器生成字节码,根据经过注解的抽象语法书生成字节码,也就是将一个数据结构转换为另一个数据结构,就像将文言文转换为白话文。

    代码生成器的结果就是生成符合java虚拟机规范的字节码了,这个过程使用的组件如下:

  • 相关阅读:
    CXF调用webservice客户端
    CXF 需要的jar包下载
    跨域解决
    eclipce集成activiti
    MyEclipse 2017 CI 7安装使用
    BaiduPCS-Go的安装及使用
    织梦后台添加友链,前台不显示|修改友情链接的显示行数
    3种方法判断手机浏览器跳转WAP手机网站
    织梦DEDE后台定时分时段自动更新发布文章插件
    织梦DedeCMS信息发布员发布文章默认自动审核更新并生成HTML页面
  • 原文地址:https://www.cnblogs.com/52czm/p/11006514.html
Copyright © 2011-2022 走看看