java的字节码编译原理-词法解析器

java的编译结果为什么不是类似于c/c++的机器码呢

 这是java实现了与平台无关性的体现,字节码就类似于一种通用的契约,提供给jvm进行运行,虽然不同的jvm内部实现的细节不同,但是他们执行的字节码的内容却是相同的

java的编译屏蔽了与底层操作系统和物理硬件相关的一些信息,使得开发人员更加的可以关注于业务的本身

java都必须使用javac进行编译吗

并不是,其实常用的Eclipse就是使用的就是内置在Eclipse中的ECJ( Eclipse Compiler for Java) 编译器。也就是说只要是编译后的结果符合JVM规范可以被识别,都可以对java代码进行编译

javac将java源码编译为字节码时所经过的一些步骤

 步骤主要分为四个 : 词法 解析 → 语法 解析 → 语义 解析 → 生成 字节 码,具体的步骤如下图

                                                                     注:图片摘录自java虚拟机精讲

小结 

 经过上面的内容,对java的语法解析的步骤已经有了相关的概念具体的每一步会在接下来进行详细解析

 词法分析步骤

在javac编译器中,词法解析器的接口是:com. sun. tools. javac. parser. Lexer,它的直接派生实现是位于同包下面的Scanner,这个类的对象是由ScannerFactory来进行创建的,注意:scanner只是用来进行java源文件中字符读取的,而真正进行词法解析的是 JavacParser类,这个实例同样是用JavacParserFactory进行创建的,关于scanner和javacparser之间的合作关系,可以使用下面的这张图来表示

                                                                                  注:图片来自java虚拟机精讲

token:对应源码字符集的单词序列,也就是一个枚举类型,内部定义了很多符合java语法规范并与源码字符集和相对应的枚举常量

词法解析器会把java源码中的关键字等内容转换为符合标准的token序列,在进行匹配校验,完成这些后就会进入到下一个阶段:语法解析步骤,也就是将转换成的token序列按照指定的java语法规范整合起来,如try后面肯定要跟上一个catch或者是finally语句

小结

 可以发现词法解析器就是将关键字变成对应的java中符合标准的token序列在进行简单的校验,之后就是语法解析器的工作了

猜你喜欢

转载自blog.csdn.net/zhttly/article/details/83345768