APP下载

编译原理课程教学改革探讨

2013-04-29刘全中任国霞张阳

中国科教创新导刊 2013年7期
关键词:教学改革教学模式

刘全中 任国霞 张阳

摘 要:针对编译原理课程的教学现状,结合课程的特点,探讨了一种基于编译原理教学辅助系统的教学模式,该模式从理论教学和实践教学两个方面着手,提高编译原理教学的质量。

关键词:教学辅助系统 教学模式 教学改革

中图分类号:G4 文献标识码:A 文章编号:1673-9795(2013)03(a)-0029-02

编译原理是计算机专业及软件工程专业的一门专业基础课,在本科计算机及软件工程专业教学中占有十分重要的位置。据统计,自1966年至2009年,55位图灵奖获得者中近1/3的科学家是因为在程序设计语言和编译方面获得该奖项[1]。该课程系统地讲述了高级程序语言的编译程序设计的基本原理、编译程序各个组成部分的设计方法及实现技术。通过该课程的学习,使得学生掌握文法和形式语言基础知识,以及构造编译程序的基本原理和方法,从而具备设计、分析、实现和优化编译程序等各方面的能力。

在计算机科学领域,编译原理是将经典的理论和实践有效结合的最好典范[1]。编译原理把对高级程序的编译过程分解为各模块,从编译问题的实际出发,抽象出科学问题,提炼出经典的理论。在经典编译理论的基础上,形成了一套先进的编译程序设计方法和技术。

1 编译原理教学现状

编译原理教学普遍存在的问题:教难、学难、实践更难[2]。主要原因如下:

(1)理论抽象难懂。编译过程的各个部分中的理论知识都很抽象,例如:词法分析中的自动机理论,语法分析中的形式语言、LL(1)分析法、算法优先分析法、LR分析器,语义分析中的语法制导翻译、各种语法范畴的翻译等。老师透彻地讲解其中的理论知识难度大,学生理解、消化理论知识难度大,把理论知识付诸实践难度更大。

(2)实验难以实现。编译程序实现算法复杂,即使对理论知识理解很透彻,实现起来依然有难度。比如,语法分析阶段,各个语法范畴自身的嵌套,相互嵌套等;在此基础上,语义分析中的数组翻译、子程序调用、“拉链-回填”等。精确地实现各种语法范畴的分析与翻译绝非易事。

(3)对课程重要性认识不足。据调查,很多学生认为在找工作时编译原理不重要,面试和考试不会涉及编译原理方面的知识,C语言、数据结构、算法分析、操作系统、计算机网络等课程与毕业找工作具有直接的关系。对于找工作,编译原理发挥的作用可能没有以上课程体现得那么明显。从长远发展来看,事实并非如此,编译原理绝非仅仅是介绍编译器开发的一门课程,通过讲授理论、思想和方法,能够模拟大师们的创新思维,培养学生创新意识、创新能力和抽象思维能力[3]。通过学习编译程序的构造方法,增强学生系统地理解程序语言的设计与实现的能力,提高学生分析问题、解决实际问题的能力,丰富学生的知识结构,为设计大型的软件奠定良好的基础。

2 教学改革方案

编译原理知识的理解与消化能够指导课内实验和实践。实验和实践顺利完成能进一步深化理解理论知识,二者是相辅相成的。因此,编译原理改革必须双管齐下,从两个方面共同着手,加强理论知识学习和提高实践环节质量。为此,开发一个辅助的资源管理系统使二者有效地结合势在必行。系统大体的示意图如图1。

2.1 加强理论知识学习

由于编译原理中的理论知识抽象难懂,仅仅靠课堂老师讲授远远是不够的,课下知识的预习及巩固是非常必要的。编译原理教学辅助系统中的教学部分为教师讲授理论知识、学生巩固理论知识提供辅助。系统中实践部分为提高编译程序开发质量提供支撑。系统将教学和实践结合起来,使二者相互促进、相得益彰。

资源共享:将教学日历、教案、教学大纲、课件等相关资源上传到系统中,供学生们课前预习、课后复习。

案例动画模拟:对于抽象的理论知识,给出具体的实例,以动画的形式模拟分析过程,使学生更容易理解理论知识。例如:递归下降分析法、LL(1)分析法、自底向上分析方法的“移进-规约”分析过程、算符优先分析过程、语义分析加工翻译的过程,这些分析过程都可以用动画形式进行模拟。通过动画模拟,学生更容易理解抽象的理论知识,增强学生学习的兴趣。

经典习题的练习:将每章重点部分相应的习题放入系统中,并给出参考答案,学生课余时间练习巩固所学知识。

章节习题、实验在线批改:学生在线提交每次习题、课内实验作业,老师在线批改,指出作业存在问题,并打分。学生能够很清楚每次实验的得分及存在的问题。对于错误较为集中的部分,理论课上集中讲解,解决每章节存在的突出问题。

教学录像:将每章节的理论教学的录像上传到系统中,学生可以再学习自己薄弱的环节。此外,把历届实践环节中优秀学生答辩的录像放到系统中,以供新一届学生参照、学习、提高。

师生互动:学生将授课过程中存在的问题,以及不理解的知识点等相关问题,以留言的形式在线提交,老师及时解答学生提出的问题。

2.2 提高实践环节质量

课程学习结束后,绝大多数的学生对编译原理还是一知半解,对其中理论的精髓理解依然很肤浅,编译原理中对问题求解的方法、抽象思维依然未建立起来。由于课时的限制,课内的实验一般完成的不理想。因此,理论课程学习后,为了深入理解编译原理中理论的精髓,集中时间进行综合实践势在必行。

对于编译程序而言,没有最好只有更好,即使商业化的编译器也不是尽善尽美。因此,把历届实践环节的优秀作品放到管理系统中作为参照,激发学生们对往届优秀的作品进行挑战。此外,为了提高开发编译程序的效率及质量,实践环节引入自动生成工具JavaCC。

①产生自顶向下分析的语法分析器。

与Yacc自动生成工具不同,JavaCC生成自顶向下的语法分析器。自顶向下分析易于调试,可以在语法分析的过程中在语法分析树中上下传值,把语义嵌入产生式的任何地方。

②语法易读和易维护。

词法规范(正则表达式),语法规范(BNF范式)书写在同一个文件里。

③方便定制词法分析器和语法分析器的行为。

例如:是否向前看多个单词,是否生成静态的类,等等。

④完整的错误提示。

生成的语法分析器可以清楚的指出语法分析的错误并提供完整的诊断信息。

JavaCC是词法分析和语法分析的生成器,根据属性文法制导翻译方法,用户需要把语义部分插入到文法中合适的地方,进行属性传递,以实现语义分析。在实现编译程序过程中,用户根据需要定义相关的Java类,来完成与JavaCC生成的类之间进行交互,以实现复杂语法范畴的语义翻译。

②任务部署。

实践的任务:构造Mini C语言的编译器的前端。要求完成词法分析、语法分析、语义分析,生成四元式并优化。

在进行课程实习前充分考虑学生的意愿,自行分成3~5人的小组,每两个小组配备一个老师进行指导。组长先阐述任务的研发思路及分工情况,经过教师认可后学生才开始进行课程设计。

众所周知,软件开发尤其是大型软件的开发,团队合作至关重要。通过实践环节分组,既培养了学生的团队合作精神,又增强了质量意识,为毕业后工作打下坚实基础。

③考核机制。

实践期间每天进行考勤,并把出勤的情况作为最终实践环节分数的一部分,强化学生的纪律观念,为毕业后工作培养良好的工作习惯。

为期一周的实践环节结束后,以小组为单位进行答辩。组长首先介绍本小组完成的情况,及每个组员的分工;然后组长及组员分别对自己完成的部分进行答辩,并演示自己的程序。答辩过程中,其余的学生都随时可以提问、质疑,老师随机抽查某段程序完成的功能、设计的思路等。根据每个学生完成的情况,参与实践环节的所有老师进行打分,所有分数的平均值即为答辩成绩。通过答辩形式汇报自己的工作,提高学生表达自己思想的能力。

(3)总结反馈。

记录实践环节中存在的各种问题,以完善下次理论教学和实践教学。例如:文法定义不合理、文法中存在间接左递归、语义分析中“拉链-回填”错误等问题,以此为案例,反馈到下次的理论教学中,以减少或者避免类似错误重演。

3 结语

由于编译原理的理论抽象、实践难,仅仅从一个方面改革都很难取得好的效果。编译原理中的理论和实践是相辅相成的关系,本文研究了理论知识和实践共同改革的方法,该方法能够系统地、全方位地促进编译原理的教学改革,进而提高编译原理的教学质量。

参考文献

[1] 王挺,李梦君,周会平.对编译原理课程教学中计算思维培养的探讨[J].计算机教育,2009(21):11-13.

[2] 柴艳妹,马燕林.编译原理教学改革研究[J].计算机教育,2011(20):36-39.

[3] 蒋宗礼“编译原理”课程与专业能力培养[J].计算机教育,2009(21):4-6.

猜你喜欢

教学改革教学模式
群文阅读教学模式探讨
“思”以贯之“学、练、赛、评”教学模式的实践探索
“以读带写,以写促读”教学模式的实践探索
中职学校“生本课堂”的调查研究与实践
高校三维动画课程教学方法研究
基于人才培养的技工学校德育实效性研究
现代信息技术在高职数学教学改革中的应用研究
以职业技能竞赛为导向的高职单片机实践教学改革研究
微课时代高等数学教学改革的实践与探索
“一精三多”教学模式的探索与实践