javac的任务是将Java源代码语言先转化成JVM能够识别的一种语言,然后由JVM将JVM语言再转化成当前这个机器能够识别的机器语言。

Javac主要有四个模块,分别是词法分析器、语法分析器、语义分析器、代码生成器。

一、词法分析器

当编译器要读取源代码,一个字节为一节地读进来,找出在这些字节中有那些是我们定义的语法关键词,这个步骤就是词法分析器。词法分析的结果就是从源代码中找出一些规范化的Token流。

二、语法分析器

找出Token流后,检查这些关键词组合在一起是不是符合java语言规范,就是语法分析,结果就是形成一个符合java语言规范的抽象语法树。

三、语义分析器

语义分析主要是把一些难懂的、复杂的语法转换成更加简单的语法。

这个过程就是将语法分析后生成的抽象语法树在进行一些处理,如,给类增加默认的构造函数,检查变量在使用前是否经过初始化,将一些常量进行合并处理,检查操作变量类型是否匹配,检查所有的操作语句是否可达,检查checked exception异常是否已经捕获或抛出,接触java的语法糖(如将java中foreach转换成for循环结构。)

四、代码生成器

最后一步是通过字节码生成器生成字节码,根据经过注解的抽象语法树生成字节码,结果也就是生成符合java虚拟机规范的字节码了。

Javac编译器的工作过程相关推荐

  1. linux g 编译目录下,你真的了解Linux下gcc编译器的工作过程吗?

    小豆丁:老张!老张! 老张:干嘛? 小豆丁:咋啦?愁眉苦脸的,是不是又被媳妇给揍了? 老张:开玩笑,我在家那就是相当于老虎的存在,谁敢揍我! 媳妇:老张,你说啥?我没听清,你再说一遍? 老张:我是老虎 ...

  2. 「JVM 编译优化」javac 编译器源码解读

    Java 的编译过程 前端编译: 编译器的前端,将 Java 文件转变成 Class 文件的过程:如 JDK 的 javac.Eclipse JDT 中的增量式编译器 ECJ: 即使编译: JIT,J ...

  3. vs编译器 printf 控制台输出_【语言教程】通过语言了解GCC编译器工作过程

    通过c语言了解GCC编译器如何工作的 比特 下面是c语言初学必看的打印helloworld #include int main(){ printf("hello, world\n" ...

  4. gcc编译器的整个工作过程

    gcc hello.c   ./a.out     或者 gcc hello.c -o hello   ./hello ./表示执行当前目录下的可执行程序或脚本程序. 首先gcc需要调用预处理程序cp ...

  5. 执行引擎的工作过程、Java代码编译和执行的过程、解释器、JIT编译器

    执行引擎概述 执行引擎是Java虛拟机核心的组成部分之一. "虚拟机"是-一个相对于"物理机"的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接 ...

  6. Javac编译器详解

    转载请注明出处:坦GA 前端编译器:把*.java文件转变成*.class文件 后端运行期编译器(JIT编译器,Just In Time Compiler):把字节码转成机器码 静态提前编译器(AOT ...

  7. 1.2.4 计算机的工作过程(从源程序到可执行文件、指令执行过程的描述)

    文章目录 1.计算机工作过程分为三步骤 2.从源程序到可执行文件 (1)预处理阶段 (2)编译阶段 (3)汇编阶段 (4)链接阶段 3.指令执行过程的描述 举个例子 (1)取指令:PC->MAR ...

  8. (计算机组成原理)第一章计算机系统概述-第二节:计算机硬件组成(存储器、运算器和控制器概述及计算机工作过程详解)

    文章目录 一:计算机层次结构 (1)早期的冯诺依曼机 (2)现代计算机的组织结构 二:计算机硬件概述 (1)存储器 A:存储元.存储单元.存储体.存储字和存储字长 B:存储器的基本结构 (2)运算器 ...

  9. 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 ...

最新文章

  1. 【POJ】1308 Is It A Tree?((并查集 + set)or (map))
  2. 集合啦,NLP数据增强技术!超全资源汇总
  3. suse linux 10 下安装sybase15.0.3,SUSE10下安装sybase ASE15.0
  4. 信息系统项目管理师-项目评估的基本方法
  5. 《c语言从入门到精通》看书笔记——第13章 预处理
  6. 新型发明创造大赛计算机类,2017年发明杯全国高职高专大学生创新创业大赛
  7. 第七章|7.3并发编程|协程
  8. USACO-Section2.2 Runaround Numbers
  9. c++ primer 19th 特殊工具与技术
  10. 【Java】游戏小程序-超级玛丽(代码渗入)
  11. LAMMPS学习总结2
  12. latex 输入下划线_
  13. javascript小方法之数组去重、数字转成逗号分隔、html元素去标签
  14. java如何设置直线的宽度_设置线条的宽度lineWidth
  15. 浅谈程序员的绩效考核
  16. sql:mysql:数据库优化
  17. Android DES加密解密
  18. mybatis Sql查询 返回对象或者list数据中包含一个对象的list集合
  19. 【StringBuffer】
  20. [Linux-网络性能测试] -- netperf测试

热门文章

  1. linux安装busybox教程
  2. android busybox 路径,Android Install busybox
  3. 关于boolean类型
  4. 中国是信息化最好的国家,千真万确
  5. 教你如何使用shell批量查询ip归属
  6. C++函数指针和回调函数
  7. H.Shifting
  8. 成功升级iPhone固件到2.1版
  9. linux去掉文件快捷方式,整理总结:Linux常用命令篇
  10. Tensorflow的MNIST