实习总结

来源:互联网 发布:js array slice 删除 编辑:程序博客网 时间:2024/04/29 23:30

三周的实习算是告一段落了,更确切的来说,这学期的实习不止三周,因为自己早早的就开始了。本来打算坚持在自己的CSDN博客同步记录下整个实习过程的,但最终还是只坚持了几天,当然原因很多,也不可否认自己没有毅力,但自己更倾向于没有心情这个原因。一天下来被编译原理的理论搞得头晕转向,再加上进展得很慢,心特急,这样一来就没心情去写了。相比上学期实习做的“电梯模拟”,这次的编译器给自己发起了更大的挑战,至于自己当初为何固执的选择这个课题,理由很简单,因为这学期学了编译原理还有想借此机会检验一下自己对JAVA语言的掌握牢固程度,或又是因为自己始终相信:绝地才能逢生,背水一战才会胜利,有了逼迫,才会尽力发挥自己。

    三周,过得忙碌但却很充实,从项目最初的简单需求分析文档到现在三个分析器程序包,看到的成果是令人欣慰的。在我看来,在一段经历之后,我们应该注重的是从中学到了什么,而不是从中得到了什么。

    当初选择编译器作为实习项目,还是带有几分偶然性的。记得是在中国科大的BBS中得知他们大三在上完编译原理后有个课程设计,也就是做一个编译器。之后,自己从相关网站下载到了他们的实验指导书,看着看着,就爱不释手了。在接下来的几天里一有空就拿来看,脑子里开始有一个模糊的编译器模型,不过对实现的各种方法是不清楚的。当时拿来跟自己刚刚学过的编译原理进行对比,感觉就一点没联系得上,书中分析的都是大写字母、数字之类的简单语句,而编译器分析的却是一大堆的字符串组成的语句,如何把它们联系起来,当时的自己开始茫然了。实习的选题也开始了,我清楚,选择这个课程设计为题目,自己将能更深入的了解编译原理和JAVA语言,但万一做不出来,成绩是小事,更另我害怕的是自信心将因此受到极大的打击。在矛盾中,我还是坚决的选择了编译器。

    自从定下实习课题,自己的生活也随之开始发生了变化,学习编译器设计相关的内容不再像之前学习数据结构和JAVA那样有成就感,更多的时候是感到无助还有枯燥。一时间,电脑桌上的《JDK 宝典实例》、《数据结构案例精编》、《大话设计模式》变成了《编译器构造与设计》、《编译原理课程实践》、《编译原理》(龙书)。结合实验指导书和这些书,自己慢慢的从编译原理理论转向了编译器设计工程上来,尽管还是停留在理论上,但思想多多少少开阔了些,不再因编译原理书上的哪个用ABC代表非终结符,而编译器分析的源程序是一大串字符串这些小区别而纠缠不清。经过一周多的了解,能够大概的写出需求文档,知道了自己将要做什么。坦白的说,写需求文档是件挺痛苦的事情,因为写的东西大多是自己目前还没有把握实现的东西,只好咬咬牙,一一填了下去,这个要实现什么功能那个又要实现什么功能。但现在回头想想,需求文档能够写了出来还是挺有用的,不说别的什么规范化,但至少它明确的指出了自己到底想干什么,给自己设定了一个目标,以避免偏离中心得太远。

    提起中国科大的这个课程设计,我心里很感激他们,在做这个课程设计中使我熟悉了制作过程中涉及到的对一些编程思想及语言和工具环境的使用,同时使自己软件工程意识和团队意识得到培养,下面就一一分享我的所得所想所感。

    首先,谈谈自己在编程思想及语言方面的收获。这次是用面向对象语言JAVA来编写的,这跟以往的编译器开发语言是有很大不同的。为了方便学生更好的把自己开发的编译器组件组装成一个完整的编译器,中国科大提供了一个实验平台,它提供了各个组件接口如词法分析器接口、语法分析器接口,语义分析器接口,中间代码转换接口等,虽说之前自己也学习了继承和接口的概念,但也仅仅口头上能说出概念,真要自己去设计个实例并运用那就很是为难了,能够领略到这些也是收获良多的,也为能很好的提醒自己在今后的学习过程中要多注重软件的设计。另外一个大的收获就是对JAVA语言有了重新的认识,因为以前都是用集成开发环境来学习JAVA的,所以对其中包的组织、导入,编译过程,生成文件一概不知,这次总算是把这个“黑盒子”给打开了,里面的东西对我来说不再神秘,同时也掌握了用命令jar.class文件打包的方法。

    其次,谈谈工具环境的使用方面的收获。说到这次开发用的工具及环境配置,用“折腾”二字来形容再合适不过了。就连最简单JDK安装配置也能折腾上几天,哎~最后还是网上搜了最“权威”的配置方式才搞定。虽说指导书里推荐用eclipse IDE 来做,但做到语法分析部分就傻眼了,怎么都编译不成功,开始怀疑eclipse存在问题,于是就删了重新解压,问题没了,可睡一觉起来,再运行相同的程序,又傻眼了。慢慢的自己开始怀疑eclipse 中集成的ant 有版本兼容性问题,可是要自己下一个ant 编译工具并从eclipse转到ant 方式编译,就意味着要重新学一个开发环境,要知道ant 编译文件不是那么的好写啊,或者说理解都成问题。没办法,这样下去工作将无法进行,只好下了个ant 编译工具,硬着头皮看着英文manual. 试着用它编译并运行做好的语法分析器,果然顺利通过,也不再有“睡一觉起来”又提示Error的情况出现了。这一次的小成功使自己激动了不久,在后面的开发中,对ant 工具的使用越来越熟悉,编写ant编译文件也不再困难。当然目前只停留在用它进行批处理的层次上,据说目前大多软件公司大多采用它,并且它是纯JAVA编写的,具有很好的跨平台性。有时间再去了解了解。再提到词法分析器自动生成工具JFlex和语法分析器自动生成工具CUP的使用,用“痛苦”二字也绝不为过。在做编译器之前几乎是没听说过这些工具,也不知道通过输入什么文件才能生成词法分析器或语法分析器。Baidugoogle,CSDN 论坛、blog,图书馆里的CNKI都用上了,最终还是令我失望,没一个中文网站介绍得让自己满意的。第一次发现一些在外国已经很成熟的技术在我们国家却仍是无人问津。再一次陷入了无助当中,是前行还是放弃,当时真的很难做出决定。一是咬紧牙关去看英文manual,二是放弃编译器改做个管理系统。选择前者也不一定能顺利解决,选择后者也就意味着放弃。要知道,有了一次放弃将来就会有第二次,第三次放弃。最终我还是埋头去看英文manual了,至少当时清楚这样做仍然是有希望的。通过对比实验指导书上的例子和工具手册,渐渐的理清了JflexCUP规范描述文档的编写格式和方法。其实吧,英文文档也就是只纸老虎,只要沉得住气去看了,你会发现它远比有些人翻译的解释得清楚,学了那么久的英语也该拿出来用用了。

    再次,谈谈软件工程意识方面的收获。其实这次实习跟软件工程无关紧要的,毕竟自己的主要精力还是放在实现具体功能上面而不是实现方式的规范化,所以此次开发过程似乎没有湛入太多的软件工程思想。不过,话说回来,无心插柳柳成荫,这话一点没错。或许是老师要求得比较高吧,要求我们提交开发计划书啊,需求文档啊什么的。于是,就应付着学了下myproject,在图书馆借了本书,照着就制作开发计划了,感觉掌握得还蛮快的,这对将来搞开发也是很有用处。再说到需求分析文档,因为之前写过科技立项申报书,所以这次写起来相对来说有点分寸,不至于泛泛而谈,嗯,还算满意吧。唯一感到遗憾的是,本打算用UML语言描述编译器需求,设计,结构组织等等,而最后还是没能,也花了不少时间学习StarUML软件的使用,但程序又不得不编写,所以就很少投入时间去学UML语言了。这次只能用word里的图形工具来画了,呵~ 软件工程的思想这次也就体会到这么深吧。

    最后,谈谈我们的团队。其实就两个人,分工也比较的明确,队友主要负责词法分析器的编写和后续测试任务,而我主要负责语法分析器和语义分析器的编写以及开发计划和需求文档的编写。或许是平时自己太过独立吧,什么事都单干的多。所以这一次合作,刚开始有点不适应,但慢慢的彼此间交流,情况就好多了,特别是在后期测试阶段,队友为我的语法分析器和语义分析器提供了非常合适的测试源程序,并不断的给我提出修改建议,使我及时的发现了程序存在的缺陷,从而把错误控制在最低点。在此,我由衷的感谢我的队友,感谢他三周多来一直为这个项目默默的奉献,以及给予我无尽的鼓励,如果没有他的坚持与鼓励,我们也不可能顺利完成编译器前端工作,更不会使自己在编程道路上取得这样的进步。总而言之,我们这个团队还是很有潜力的。

    突然想起一个故事,有位书法作家对一位用废报纸练字的人说:“如果你用最好的纸来写,你可能会写得更好。”那个人很奇怪地问原因。书法家笑而不答,只写了一个“逼”字。记得还有这样一则谚语“如果你想翻墙,就先把帽子扔过去。”因为你的帽子在那边,你已经别无选择,只有想方设法翻过去。正是有了逼迫,才会尽力发挥自己。想想看,以前觉得这似乎平淡无奇,焉然回首,才知它所蕴含的深刻道理。或许正是因为“逼”字贯穿于我们的编译器开发过程中,这段过程才被点缀得更加完美吧。

原创粉丝点击