javac源码详解openJDKSE8版本0目标与准备工作
前言
我在学习了算法导论英文版和编译原理英文版之后。想印证中书中所说知识,是否被使用到,也相当于是巩固下学过的知识。另外顺带看下javac编译的过程。
背景
我学习了算法导论英文版第三版和编译原理英文版第二版。
- 算法导论英文版第三版 :目前算法导论图论之前的章节全部读过并且自己独立实现过。图论部分实现过第一章节,和图论后面的字符串匹配章节自己实现过。
- 编译原理英文版第二版:目前读过书中所有的内容。实现了NFA和DFA,在实现NFA和DFA的过程中算是实现了一个小型的编译器。
目标
主要是想验证下算法导论和编译原理中的说的知识点是否实用。根据定下目标,也就注定有些东西我可能不会去关注,甚至不会提。
读javac源码需要哪些知识
- 算法与数据结构 :目前我在在阅读中注意到的有:归并排序,快排,哈希表(这个用的非常多),链表,数组,树(整个编译过程都是在一颗树上面),队列。
- 编译原理 :基本编译过程,文法,语法,翻译方法。高级点的有数据流分析。
- javaSE8语言规则 : 请参考官方文档:https://docs.oracle.com/javase/specs/
- javaSE8的虚拟机 : 请参考官方文档:https://docs.oracle.com/javase/specs/
- 设计模式: 访问者模式(目前在抽象语法树生成以后,经常要对它用不同的手段进行处理)
如何下载javac源码
- javac源码 :目前不能现在未开源的JDK的javac源码,只能下载开源的openJDK的javac源码。这里阅读的javac源码也是基于openJDK的。
- 官方下载地址网址 :http://hg.openjdk.java.net/jdk8/jdk8/langtools/选中左边的zip下载
如何调试运行javac源码
- 建立空的工程 : 使用eclipse或者idea建立一个空的java工程。并创建package:com\sun
- 复制粘贴javac源码 :将上面步骤获取的源码解压,把src\share\classes\com\sun\javadoc 和src\share\classes\com\sun\source 以及最重要的src\share\classes\com\sun\tools 粘贴到工程里面,要注意package。
- 运行javac源码 : 运行com.sun.tools.javac.Main.main方法。并在配置program argument中指定你想要编译的源文件的地址。此方法需要注意的是在编译带有父类的子类时还需要指定别的参数,使编译子类的时候,可以自动加载父类。目前本人尚未去找,目前的方法,已经足以完成目标了。