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虚拟机规范的字节码了,这个过程使用的组件如下:

  • 相关阅读:
    Codeforces Round #433 (Div. 2, based on Olympiad of Metropolises)
    树的遍历(前序中序求后序,后序中序求前序)
    Codeforces Round #439 (Div. 2)
    python3 调用百度api实现语音识别
    Win10 opencv cuda + 扩展库 vs2019 cuda10
    flask读取摄像头并实时显示
    树莓派设置开机启动
    树莓派python OLED使用
    UART Fingerprint Sensor (C)树莓派使用
    树莓派全版本换源(多环境测试无误版)
  • 原文地址:https://www.cnblogs.com/52czm/p/11006514.html
Copyright © 2011-2022 走看看