javac源码详解openJDKSE8版本0

前言

我在学习了算法导论英文版和编译原理英文版之后。想印证中书中所说知识,是否被使用到,也相当于是巩固下学过的知识。另外顺带看下javac编译的过程。

背景

我学习了算法导论英文版第三版编译原理英文版第二版

  1. 算法导论英文版第三版 :目前算法导论图论之前的章节全部读过并且自己独立实现过。图论部分实现过第一章节,和图论后面的字符串匹配章节自己实现过。
  2. 编译原理英文版第二版:目前读过书中所有的内容。实现了NFADFA,在实现NFA和DFA的过程中算是实现了一个小型的编译器。

目标

主要是想验证下算法导论和编译原理中的说的知识点是否实用。根据定下目标,也就注定有些东西我可能不会去关注,甚至不会提。

读javac源码需要哪些知识

  1. 算法与数据结构 :目前我在在阅读中注意到的有:归并排序,快排,哈希表(这个用的非常多),链表,数组,树(整个编译过程都是在一颗树上面),队列。
  2. 编译原理 :基本编译过程,文法,语法,翻译方法。高级点的有数据流分析。
  3. javaSE8语言规则 : 请参考官方文档:https://docs.oracle.com/javase/specs/
  4. 设计模式: 访问者模式(目前在抽象语法树生成以后,经常要对它用不同的手段进行处理)

如何下载javac源码

  1. javac源码 :目前不能现在未开源的JDK的javac源码,只能下载开源的openJDK的javac源码。这里阅读的javac源码也是基于openJDK的。
  2. 官方下载地址网址http://hg.openjdk.java.net/jdk8/jdk8/langtools/选中左边的zip下载javac源码详解openJDKSE8版本0

如何调试运行javac源码

  1. 建立空的工程 : 使用eclipse或者idea建立一个空的java工程。并创建package:com\sun</kbd>
  2. 复制粘贴javac源码 :将上面步骤获取的源码解压,把src\share\classes\com\sun\javadocsrc\share\classes\com\sun\source 以及最重要的src\share\classes\com\sun\tools 粘贴到工程里面,要注意packagejavac源码详解openJDKSE8版本0javac源码详解openJDKSE8版本0
  3. 运行javac源码 : 运行com.sun.tools.javac.Main.main方法。并在配置program argument中指定你想要编译的源文件的地址。此方法需要注意的是在编译带有父类的子类时还需要指定别的参数,使编译子类的时候,可以自动加载父类。目前本人尚未去找,目前的方法,已经足以完成目标了。javac源码详解openJDKSE8版本0