【javac添加python 列表特性6】javac添加新语法节点以支持python语法

上次说到使用parser解释器,可 使得支持List k=[1,'a',[2,3]]类似语法, 但后来发现这种方法虽然简单,却不具有普适性。

问题是 对于如下代码无法区分:


int a[]={1,2,3};
List k=[1,2,3];

a[1]=k[1]; //parser理应把这句话换成: a[1]=k.get(1); 但不知道a或者是k的类型
           //所以不知道如何替换
所以这里要求必须能够确定k是属于java.util.List类型后才能替换,而这在parser阶段是无法预知的。


编译器的过程如下:

【javac添加python 列表特性6】javac添加新语法节点以支持python语法

最终和导师商量后,决定自己构建新的语法节点,并且被parser接受成为AST里面的节点,然后在确认k为list类型后再将新的节点翻译成 javac本来有的节点。

这将导致修改过程变得很复杂,但是代码却能够与javac固有的代码吻合,显得比较一致。

附上中期答辩的PPT,全程英文讲下来,感觉还好。。

中期答辩PPT

你可能感兴趣的:(list,python,OpenJDK,javac)