生死人肉白骨:使死人复生,使白骨长肉;javac编译就是将.java文件转换为jvm能看懂的.class文件
简单来说javac编译只需要几个组件即可完成:
首先:要读取源码,一个字节一个字节的读取进来,找出在这些字节中哪些是我们定义的语法关键字,如java中的if,else,for,while等关键词;要识别哪些 if’ 合法的关键词,哪些不是,这个步骤就是词法分析过程。词法分析的结果就是从源代码中找出一些规范化的Token流,
接着,就是对Token进行语法分析了,这一步就是检查这些关键词组合在一起是否符合java语言规范,如 if 后是否是一个布尔判断表达式,就像人类语言中是不是主谓宾定状补,主干枝叶分清楚,定语必居主宾前,谓前为状谓后补。语法分析的结果就是形成一个符合java规范的抽象语法树。
然后就是语义分析了,语义分析就是将一些难懂的代码,复杂的语句转换为通俗易懂的语法,就像生死人中的生,使动用法,使XX复生的意思,对应到java中就是将 foreach转换为for循环,还有注解等,最后形成一个注解过后的抽象语法树,,这棵树也最符合目标语言的语法规范。
最后,通过字节码生成器生成字节码,根据经过注解的抽象语法书生成字节码,也就是将一个数据结构转换为另一个数据结构,就像将文言文转换为白话文。
代码生成器的结果就是生成符合java虚拟机规范的字节码了,这个过程使用的组件如下:
原文:https://www.cnblogs.com/52czm/p/11006514.html