首页 > 编程知识 正文

java编译器原理,javac编译包含哪几个过程

时间:2023-05-04 01:32:33 阅读:63093 作者:624

在前面写JDK JRE

javaruntimeenviroment (JRE )是Java的执行环境。 面向Java程序的用户,而不是开发人员。 如果只下载并安装了JRE,则系统只能运行Java程序。 JRE是运行Java程序所需的环境的集合,包括JVM标准实现和Java核心类库。 其中包括Java虚拟机、Java平台核心类和支持文件。 不包含开发工具(编译器、调试器等)。

JDK(Javadevelopmentkit )也称为j2sdk (Java2softwaredevelopmentkit ), Java开发工具包,提供Java的开发环境(用于将Java文件编译为class文件的编译器javac等工具)和运行时环境。下载并安装JDK后,不仅可以开发Java程序,还可以开发Java程序JDK是整个Java的核心,包括Java执行环境(JRE )、tools.jar和Java标准类库(rt.jar )。

jdkalsocouldbecalledassdk (软件开发部署工具包) for Java。

1 .什么是1.Javac?

Javac是将一种语言规范转换为另一种语言规范的编译器。 通常,编译器会将人容易理解的语言规范转换为机器容易理解的语言规范。

javac的任务是将java源代码编译为java字节代码,即JVM可识别的二进制代码。 乍一看,它似乎是在将. java文件转换为. class文件,但实际上只有JVM将java源代码转换为一系列格式的二进制文件,并且可以正确识别它们意味着什么。

2.Javac工作流程和模拟

2.1查找语法关键词,如if else for while等。 这个过程称为词法分析(词法分析的结果是从源代码中找到规范化的Token流)。

类比:用人类语言分辨语言标点符号的动词名词

2.2检查这些关键字是否组合起来符合Java语言规范。 这个过程称为句法分析。 (语法分析的结果是成为符合Java规格的抽象语法树) )。

类比:人的语言包括主谓宾主谓宾组合是否正确语法是否正确

2.3将费解复杂语法转换为更简单语法的过程称为语义分析。 (例如,将foreach转换为for时,会生成更接近目标语言语法规则的注释后抽象语法树) ) ) ) ) ) ) ) )。

类比:把人类语言难以听懂的文言文翻译成白话文

2.4字节码生成器生成字节码,并从注释的抽象语法树生成字节码。 即,将一个数据结构转换为另一个数据结构

类比:汉语单词翻译成英语单词后,按照英语语法组装成英语句子

如上所述,Javac主要有四个模块:词法分析器、语法分析器、语义分析器和代码生成器。

3 .词法分析器

1打包编译; 2

3公共类中情局{4inta; 5 int c=a 1; 6 }

词法分析器的分析结果是使该类中的所有关键字与token类中的所有项之一匹配。 上述代码的匹配结果如下图所示

4 .语法分析器

词法分析器的作用是将Java源文件中的字符流转换为相应的Token流。 另一方面,语法分析器是将Token流组合成更结构化的语法树,即将单词一个个组合成语句。

1公共课堂UFa {2Inta; 3私密int c=a 1; 4

5公共输入获取({6returnc; (8) 8

9公共语音集(intc ) {10 this.c=c; 11 }12 }

与此代码对应的语法树

5 .语义分析器

由于语法分析器生成的语法树太粗,因此可以根据语法树向类中添加构造函数、检查变量是否在使用前初始化、合并常量、检查操作变量的类型是否匹配、以及所有类型检查是否捕获或抛出了checked exception异常,或者使用Java语法糖(

6 .代码生成器

将Java方法中的代码块转换为符合JVM语法的指令格式。 所有JVM操作都是基于堆栈的,所有操作都必须通过堆栈和堆栈进行。

根据JVM的文件组织格式,在扩展名为class的文件中输出字节码

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。