openJDK7

【javac添加python 列表特性5】修改openJDK的Javac,使得支持List k...

早过忘川 提交于 2019-11-30 20:12:34
先把附件和测试文件发上来: Javac.rar (我使用的是JDK1.7) 经过前一阶段的学习,对javac前端Parser阶段已经有了足够的理解,要使javac支持类似python的列表语法: List k=[1,'a',[2,3],"abc", new Object()]; 这种语法的特征是: List 直接来源于java.util.*; 初始化时使用的是[]; 列表支持多种类型(基本和引用)混合; 支持列表的嵌套; 实现 的想法是: Java里面已经有了如下可以支持的语法: List k=new ArrayList(Arrays.asList(1,'a',"abc")); 所以只需要在Parser阶段,在VariableInitilizer里面加上识别[]的语句,并且把后面[]的内容改成Java已经支持的语法:new ArrayList(Arrays.asList())即可。 实现的具体方法: 继承JavacParser类和Scanner类,以便进行扩展。 覆写JavacParser的 variableInitializer,如果有LBRACKET,则return listInitializer(); 在listInitializer()里面可以先构造一段String newbuf="ArrayList(Arrays.asList( '[]里面的内容' ))"的代码

【javac添加python 列表特性2】修改openJDK7的javac,使得java支持单...

筅森魡賤 提交于 2019-11-29 16:23:14
大四的毕业设计做的是,给java语言增加一些特性(比如python的列表和字典结构)。涉及到javac编译器前端(scanner,parser)的修改。现在才刚开始着手。。 成功编译了openJDK后,才发现原来javac的这部分代码完全是由java语言实现的,所以可以把javac的代码单独提出来,放到eclipse里面,并且用eclipse编译和调试。这样真的超方便。。 刚开始做了一个很简单的修改,让java支持单引号的字符串(只作为练习)。思想很简单,找到Scanner的代码,把处理单引号的代码修改为处理双引号的代码即可。 过程如下: 1.eclipse中新建一个工程。然后把openJDK7里面目录:openjdk7\langtools\src\share\classes\com,全部导入到eclipse中,运行。可能会遇到一个版本的问题,就是编译时的javac版本和eclipse环境中,配置Preferences->compiler 和Preferences->buildpath两个里面的版本一致即可。可以生成javac,测试没有问题。。 2.进入com.sun.tools.javac.Main,里面有一个main方法就是javac最外层的调用。它调用了com.sun.tools.javac.main.Main的compile方法进入编译。 3.单步跟踪