Javac编译器的工作过程
javac的任务是将Java源代码语言先转化成JVM能够识别的一种语言,然后由JVM将JVM语言再转化成当前这个机器能够识别的机器语言。
Javac主要有四个模块,分别是词法分析器、语法分析器、语义分析器、代码生成器。
一、词法分析器
当编译器要读取源代码,一个字节为一节地读进来,找出在这些字节中有那些是我们定义的语法关键词,这个步骤就是词法分析器。词法分析的结果就是从源代码中找出一些规范化的Token流。
二、语法分析器
找出Token流后,检查这些关键词组合在一起是不是符合java语言规范,就是语法分析,结果就是形成一个符合java语言规范的抽象语法树。
三、语义分析器
语义分析主要是把一些难懂的、复杂的语法转换成更加简单的语法。
这个过程就是将语法分析后生成的抽象语法树在进行一些处理,如,给类增加默认的构造函数,检查变量在使用前是否经过初始化,将一些常量进行合并处理,检查操作变量类型是否匹配,检查所有的操作语句是否可达,检查checked exception异常是否已经捕获或抛出,接触java的语法糖(如将java中foreach转换成for循环结构。)
四、代码生成器
最后一步是通过字节码生成器生成字节码,根据经过注解的抽象语法树生成字节码,结果也就是生成符合java虚拟机规范的字节码了。
Javac编译器的工作过程相关推荐
- linux g 编译目录下,你真的了解Linux下gcc编译器的工作过程吗?
小豆丁:老张!老张! 老张:干嘛? 小豆丁:咋啦?愁眉苦脸的,是不是又被媳妇给揍了? 老张:开玩笑,我在家那就是相当于老虎的存在,谁敢揍我! 媳妇:老张,你说啥?我没听清,你再说一遍? 老张:我是老虎 ...
- 「JVM 编译优化」javac 编译器源码解读
Java 的编译过程 前端编译: 编译器的前端,将 Java 文件转变成 Class 文件的过程:如 JDK 的 javac.Eclipse JDT 中的增量式编译器 ECJ: 即使编译: JIT,J ...
- vs编译器 printf 控制台输出_【语言教程】通过语言了解GCC编译器工作过程
通过c语言了解GCC编译器如何工作的 比特 下面是c语言初学必看的打印helloworld #include int main(){ printf("hello, world\n" ...
- gcc编译器的整个工作过程
gcc hello.c ./a.out 或者 gcc hello.c -o hello ./hello ./表示执行当前目录下的可执行程序或脚本程序. 首先gcc需要调用预处理程序cp ...
- 执行引擎的工作过程、Java代码编译和执行的过程、解释器、JIT编译器
执行引擎概述 执行引擎是Java虛拟机核心的组成部分之一. "虚拟机"是-一个相对于"物理机"的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接 ...
- Javac编译器详解
转载请注明出处:坦GA 前端编译器:把*.java文件转变成*.class文件 后端运行期编译器(JIT编译器,Just In Time Compiler):把字节码转成机器码 静态提前编译器(AOT ...
- 1.2.4 计算机的工作过程(从源程序到可执行文件、指令执行过程的描述)
文章目录 1.计算机工作过程分为三步骤 2.从源程序到可执行文件 (1)预处理阶段 (2)编译阶段 (3)汇编阶段 (4)链接阶段 3.指令执行过程的描述 举个例子 (1)取指令:PC->MAR ...
- (计算机组成原理)第一章计算机系统概述-第二节:计算机硬件组成(存储器、运算器和控制器概述及计算机工作过程详解)
文章目录 一:计算机层次结构 (1)早期的冯诺依曼机 (2)现代计算机的组织结构 二:计算机硬件概述 (1)存储器 A:存储元.存储单元.存储体.存储字和存储字长 B:存储器的基本结构 (2)运算器 ...
- java build failed_java - maven build failed:无法在jre或jdk issu中找到Javac编译器
java - maven build failed:无法在jre或jdk issu中找到Javac编译器 我将JAVA_HOME设置为 C:\Program Files (x86)\Java\jdk1 ...
最新文章
- 【POJ】1308 Is It A Tree?((并查集 + set)or (map))
- 集合啦,NLP数据增强技术!超全资源汇总
- suse linux 10 下安装sybase15.0.3,SUSE10下安装sybase ASE15.0
- 信息系统项目管理师-项目评估的基本方法
- 《c语言从入门到精通》看书笔记——第13章 预处理
- 新型发明创造大赛计算机类,2017年发明杯全国高职高专大学生创新创业大赛
- 第七章|7.3并发编程|协程
- USACO-Section2.2 Runaround Numbers
- c++ primer 19th 特殊工具与技术
- 【Java】游戏小程序-超级玛丽(代码渗入)
- LAMMPS学习总结2
- latex 输入下划线_
- javascript小方法之数组去重、数字转成逗号分隔、html元素去标签
- java如何设置直线的宽度_设置线条的宽度lineWidth
- 浅谈程序员的绩效考核
- sql:mysql:数据库优化
- Android DES加密解密
- mybatis Sql查询 返回对象或者list数据中包含一个对象的list集合
- 【StringBuffer】
- [Linux-网络性能测试] -- netperf测试