霍 欢 彭敦陆 张 艳
摘要:“编译原理”课程是计算机科学及相关专业的一门重要专业基础课程,但由于其理论抽象、算法复杂,加上目前本科学生中普遍存在的各种思想误区,教学效果不甚理想。本文针对这一现状,从如何提高学生学习兴趣,搞好课堂教学,加强实践环节等方面入手,提出了相应的对策。
关键词:编译原理;课堂教学;实践教学
中图分类号:G642 文献标识码:A
“编译原理”课程是计算机专业必修的一门重要的专业基础课程,也是计算机系统软件中非常重要的一个分支。学习和掌握编译程序的基本构造原理和实现技术,将为计算机专业学生进一步学习、研究和工作奠定坚实的专业理论基础。但该课程内容有一定深度和难度,涉及其他课程知识较多,学生在学习过程中感到内容抽象、算法复杂,因此,“编译原理”被普遍看作是计算机本科教学中既难教又难学的一门课程。这主要是因为:(1)本课建立在多门前修课程基础上,并要为后续课程提供理论和实践基础。这些理论的学习有一定难度,学生要在编译课程中融会贯通比较困难;(2)本课程涉及的算法多而复杂,学生想深刻理解算法的思想很困难;(3)学生普遍认为学习该课程仅是为了构造编译程序,很难认识到其在培养自己掌握科学方法和形成严谨思维方面的潜在价值,因此感觉课程枯燥,望而生畏。
针对以上情况,笔者借鉴国内外“编译原理”课程的教学经验,对如何改进教学方法和提高教学效果做了一些研究和探索,并取得了良好的效果。
1明确教学目标,提高学生学习兴趣
“编译原理”课程专门介绍如何将高级语言翻译为低级语言的编译程序的工作原理和方法。不同于一般的应用程序,编译程序是一个十分庞大和复杂的系统软件,它所包含的算法建立在高级语言或汇编语言基础上,综合运用编译理论及多门前修课程,如“数据结构”、“离散数学”、“计算机组成原理”等相关知识,解决高级语言在机器上运行的实际问题。因此,这门课程也可以看作是“软件工程”学习的一个实例。这门课程的内容丰富,各部分内容间具有严密的逻辑性,不但可以使学生真正了解计算机的工作过程,认识计算机信息处理的实质,还可以综合运用所学的软件设计技术分析解决问题,提高计算机软件素质。
作为系统软件,编译程序在性能上有严格的要求,这使得它的算法都很经典、高效,而这些算法、思想和实现技术也可广泛应用于一般软件的设计实现,对提高学生元级程序的设计能力和开发大型软件的能力是十分有益的。如正规式在XML查询技术中的广泛应用、有穷自动机在字符串查找中的运用、必经节点算法在网络中的运用、由文法来定义网络协议等。教师可以鼓励学生尝试将编译程序中的各种算法和技术应用到各个领域,激发学生的创造性思维,培养学生的创新能力。
2注重理论教学,开拓学生学习视野
“编译原理”的理论性强,内容丰富且抽象,具有严密的逻辑性,应用其他课程知识比较多。要在有限的课时内很好地完成本课程的教学,除了要注重教学的方式方法外,还要优化教学内容,将理论性与实践性相结合、时代性与实用性相结合、科学性与通俗性相结合。
2.1把握联系,启发学生积极思维
“编译原理”是一门综合性很强的课程,它的理论教学首先要考虑、分析各门课程的内在联系,增强课程的总体效能,达到事半功倍的效果。
“编译原理”与前修课程间的联系如图1所示。作为“编译原理”课程的前修课,如程序设计语言、形式语言与自动机、算法设计与分析等,既是编译技术理论的基础,也是编译技术的分析对象和实现手段。教师可以从知识体系的内部结构入手,将先修课程的内容贯穿始终,并不断强化和深入,以加强课程的系统性,培养学生的全局观。同时还要把握编译过程各个功能阶段的内在联系和规律,有目的地设计问题,有意义地提出问题,通过问题把编译原理中的理论难点、抽象概念引导出来,学生通过回答问题,从不同的角度寻求解决问题的原则、途径和方法,加深对编译理论和技术的理解。
2.2实例演示,形象化抽象理论
“编译原理”的概念和定理很多,再加上大量复杂的算法,抽象程度很高,要获得良好的教学效果,必须借助形象化教学手段,使抽象的理论具体化。
一方面,形象化教学可以通过实例类比来实现。例如,把编译原理与某种高级语言(如C语言),甚至可以是自然语言(如英语)联系起来,用课堂上学到的理论知识对该语言的语法和词法结构加以分析。这样不仅可以使学生深入了解高级语言的工作原理,做到知其然更知其所以然,更能使学生切实体会到编译原理的实用价值。如编译原理中词法分析的学习就可以以C语言中的实数为例,画出能够识别实数的状态识别图,并用程序实现。通过这个简单实例,学生很快就能了解词法分析在整个编译过程中的作用。
另一方面,教师可以借助多媒体辅助教学,把原理性的重点知识以动画、图形形式呈现给学生,化静为动,寓教于乐。为此我们编制了一些多媒体课件,用Flash技术生动形象地演示抽象概念和算法,同时向学生推荐网上优秀的“编译原理”课程教学网站、电子书、算法等资源,拓宽学生视野,培养和激发学生的学习兴趣。
2.3与时俱进,优化教学内容
编译技术是计算机语言发展的支柱,也是计算机科学中发展最迅速、最成熟的一个分支。目前国内“编译原理”课程所选用的教材大多偏重于介绍程序设计语言编译程序构造的一般原理和基本实现方法、技术,编译系统大而复杂,编译原理多而深奥。很多学生学习时会受教材的局限和影响,往往花费很大力气去掌握复杂而深奥的理论知识,而不是实际动手去构造具体的小型编译器,使理论与实践完全脱节。因此,教学要坚持理论和实践相结合,课内和课外相结合,融知识传授、能力培养、素质教育于一体。例如,主要算法、例题和习题可以以学生最熟悉的C语言为背景,将编译程序模型的实现过程贯穿于各个章节,让学生阅读理解和扩充编译程序,加深对所学内容的理解。
此外,教师还要坚持教学和科研相结合,将最新教改和科研成果引入教学,将经典编译理论与现代编译技术有机地结合起来,激发学生对编译新技术的学习兴趣。例如,程序设计语言已经从结构设计语言(如C语言)发展到面向对象程序设计语言(C++、C#),讲授一些经典的编译理论应用在新一代高级程序设计语言中的实例,会激发学生更大的学习热情。同时,向学生介绍编译技术在人工智能、并行计算、自然语言处理等领域的具体应用,也会为后续课程做好铺垫,奠定坚实的理论基础。
3加强实践教学,激发学生主体意识
“编译原理”是一门对实践要求较高的课程。编译程序以程序为操作对象,是由多个完成不同功能、执行在不同阶段的子程序组成的复杂系统,各个阶段具有不同的特点。即使学生理解了不同阶段各个子程序的功能和特定方法,但如何衔接各个子程序,组成一个完整的编译器,对学生来讲仍可能是一件困难的事情。
基于此,本课程的实践教学设计要充分考虑编译理论与实际应用的结合,突出阶段性和实用性。如将编译器的实验过程分为4个阶段,每个实验阶段安排在对应阶段的理论课结束时开始,实验以小组为单位进行,每阶段都有文档提交和审查评分,最后将不同阶段的各个子程序衔接起来,完成整个编译器的分析设计,实践课的成绩以40%计入总评成绩。这样,开发过程可以引入软件工程的理论,注入结构化程序设计思想,将整个系统模块化,合理组织不同能力层次的学生分组开发各个功能模块,鼓励所有学生共同参与,相互探讨,协作完成,共同提高。同时,要特别加强实验中的督促环节,各阶段的设计实现要严格控制实现进度和质量,培养学生良好严谨的软件开发风格。
4结束语
本文就如何改进“编译原理”课程的教学方法,提高教学效果做了一些研究和探索,从培养学生兴趣入手,对理论教学和实践教学中存在的问题和相应的对策进行了讨论。实践证明,这些方法能更好地提高学生对“编译原理”课程学习的兴趣,提高教学质量。
参考文献:
[1] 张素琴. 斯坦福大学计算机科学系的编译原理课程分析[J]. 计算机教育,2004(1):79.
[2] 黄贤英,刘贞,刘全利.“编译原理”课程的地位及教改思路[J]. 重庆科技学院学报:社会科学版,2005(3):103-105.
[3] 何炎祥,伍春香. 现代教学理论指导下的“编译原理”教学综合改革[J]. 计算机教育,2005(3):10-13.
[4] 刘磊,金英,王胜军,等. 编译原理多媒体辅助教学软件的设计与实现[J]. 吉林大学学报:信息科学版,2002(6):54-58.
[5] 张昱,陈意云,郑启龙. 编译原理课程的教学方法和教材建设[J]. 中国大学教学,2005(7):61-62.
[6] 李冬梅,施海虎. 编译原理[M]. 北京:人民邮电出版社,2006.
[7] 刘磊,郭德贵.“编译原理”课程建设研究[J]. 计算机教育,2006(6):8-10.
[8] 王一宾. 基于面向对象的编译原理实验的研究[J]. 安庆师范学院学报:自然科学版,2002(11):84-85.
Researches on the Instruction of Compiling Principles
HUO Huan, PENG Dun-lu, ZHANG Yan
(School of Optical-Electrical and Computer Engineering, University of Shanghai for Science and Technology, Shanghai 200093, China)
Abstract: Compiling Principles is one of the most important fundamental courses for Computer Science and Technology. Due to the theoretic difficulties, complex algorithms of Compiling Principles and the common misunderstanding among the present undergraduates, it is difficult to get a satisfactory teaching of this course. To inspire the interests of compiling principles study, to reify the abstract theory and to effectively organize the experiments, the paper proposes some feasible measurements for the course teaching.
Key words: compiling principle; course teaching; experiments organization