美文网首页
学习笔记:Javac学习

学习笔记:Javac学习

作者: 纸箱子的一 | 来源:发表于2018-04-20 01:58 被阅读0次

    Javac编译器的基本结构

    Javac编译器的作用就是将符合java语言规范的源代码转化成符合Java虚拟机规范的Java字节码。
    一个编译器完成从一个语言规范到另一个语言规范的转化所需步骤就是这个编译器的基本结构。基本步骤了解一下:

    1. 首先,读取源代码,识别定义的语法规范关键字,识别哪些是合法的关键字,哪些不是,这个步骤就是词法分析过程。
    2. 词法分析的结果就是从源代码中找出规范化的Token流。
    3. 接着,就是对这些Token流进行语法分析,就是检查这些关键字组合在一起是否符合Java语言规范。
    4. 语法分析的结果就是形成一个符合Java语言规范的抽象语法树。抽象语法树是一个结构化的语法表达形式,它的作用是把语言的主要词法用一个结构化的形式组织在一起。对这棵语法树我们可以在后面按照新的规则再重新组织,这就是编译器的关键所在。
    5. 接下来是语义分析,虽然上一步已经完成了语法分析,也就是不存在语法问题了,但是语义是不是正确呢?语义分析的主要工作就是把一些难懂的、复杂的语法转化成更加简单的语法。
    6. 语义分析的结果就是把复杂的语法转化为更为简单的语法,例如将foreach转为for,形成一个注解后的抽象语法树,这棵抽象语法数更接近目标语言的语法规则。
    7. 最后通过字节码生成器生成字节码,根据抽象语法树生成字节码,也就是将一种数据结构转化为另一种数据结构。
      == 所以主要有四个模块:词法分析器语法分析器语义分析器字节码生成器 ==

    Javac工作原理分析

    词法分析器:

    我们可以用JDK的com.sun.tools.javac.main.Main的compile(String[] args)方法编译指定的类。

    String[] args = new String[] {“-d”, “/homemytestclasses”, “Test.java”}; 
    Int status = javac.compile(args); 
    

    javac主要词法分析器的接口是com.sun.tools.javac.parser.Lexer。默认实现类是com.sun.tools.javac.parser.Scanner,Scanner会逐个读取java源文件的单个字符,然后解析出符合Java语言规范的Token序列。
    其中主要涉及到的类:
    Scanner 读取源文件和归类不同词法的操作
    JavacParser 规定哪些词是符合java语言规范规定的
    Token 规定所有Java语言的合法关键词
    Names 存储和表示解析后的词法

    相关文章

      网友评论

          本文标题:学习笔记:Javac学习

          本文链接:https://www.haomeiwen.com/subject/rbinkftx.html