CIS 706 Team Project第一阶段
今天CIS706 Team Project Presentation I,算是这个project的第一阶段。第一阶段的任务是将ExtendedStaticJava的Java程序转换成C语言程序,主要是利用前几个Project (Parser, AST, TypeChecker)的输出,并结合StringTemplate来实现。到早上,我还有一个问题没有解决,NULL和结构体的比较。因为在程序中,我把Class转换成struct,而将数组转换成指针的形式。因为Java程序中有Class Instance和null的比较,生成的C程序里就会有struct和NULL的比较。其实解决办法不难,但昨天我忙于测试八十几个程序,即对比Java源程序和生成C程序,查找可能潜在的问题。比起我这样一个一个测试,我完全可以在我的程序里让gcc对对生成C程序进行编译,就能发现我想找的潜在问题。但因为我是在Windows系统上做的,电脑里没有GCC,没办法在eclipse中植入gcc编译程序,而且时间不多,我还得做PPT,presentation要用。就在早上的Presentation之前,我想到了如何处理NULL的问题,但来不及修改了。Presentation时,我和老师说了我这个问题还没解决,其他的都处理完了。
Team Project是以小组为单位的,我的teammate一点都没做,他不会。所有的work都是我完成的,创建StringTemplate,实现转换程序,将结果存入对应的C文件,写Presentation用的PPT等。早上的Presentation是让他上去说的。因为他只在昨天看了我写的ppt,他对这个project的基本上不了解,presentation时说得很慢,尝试着把问题说清楚,实际上他自己也不清楚。Presentation只有30分钟时间,我和他说过要在20分钟内完成。后来我都有点着急了,老师貌似也有点不耐烦,我就上去说了。东西是我做的,各个方面我都清楚,我也和老师说了还存在的问题。讲完之后,给老师看了用到的C版本的头文件。这时候老师问teammate,让他解释一下程序的结构,然后那个头文件是怎么实现的。结果teammate卡在那了,我估计他只看了ppt,没看我给他的代码。然后,可以想象,不知所云。老师问他哪些是他做的,他乱扯了一通。最后是演示程序。我随便挑了一个程序,结果出现了错误,就是我说的NULL和struct比较问题,我挑的程序刚好有这样的语句。因为事先和老师说过,他也理解。后来我换了个最麻烦的Java测试程序,SyntaxTorture.java,改程序涉及到了ExtendedStaticJava语法的方方面面,也包括null和class的比较。我把有null的语句注销了,然后编译剩下的代码,没有问题。
今天下午我把那个null问题处理了。将class instance用struct指针实现(struct ClassName *),而class数组,用二级指针(struct ClassName **)实现,修改了一些stringtemplate和程序代码,搞到五点半,都解决了。
第二阶段的任务主要是garbage collection,老师说得在12月1日前完成。Java里用new给数组,类等分配空间,而且Java有自带的垃圾回收机制,但C里面没有。new操作转换到c就成了malloc操作,所以程序里会有一些产生一些垃圾。接下来就是考虑如何实现垃圾回收。还要建一个完整的test case,像我之前说的,让程序自己用gcc编译生成的c文件,看看是否有问题。同时还得自己设计一些Java程序,带输出的,然后和转换后的C程序的运行输出进行比较。test case应该不是难事,但我对garbage collection不怎么了解,以前没做过,估计得花些时间搞了。
CIS 706到现在,算上Team Project,已经是第五个project了,越做越觉得有意思。现在首要目标是完成Team Project,以后再去回味这些project吧。十二月中旬回国,我还有一堆材料要准备,早点搞定程序,早点弄材料。