推荐阅读:编译原理课程的教学探讨 计算机语言之所以能由单一的机器语言发展到现今的多种高级语言,就是因为有了编译技术,它是计算机科学与技术中发展最迅速、最成熟的一个分支。编译原理是计算机专业中一门非常有用的核心课程,综合运用编译理论及多门前修课程如数据
“编译原理”课程的教学探讨
计算机语言之所以能由单一的机器语言发展到现今的多种高级语言,就是因为有了编译技术,它是计算机科学与技术中发展最迅速、最成熟的一个分支。“编译原理”是计算机专业中一门非常有用的核心课程,综合运用编译理论及多门前修课程如“数据结构”、“离散数学”、“操作系统”等课程的相关知识来解决高级语言在机器上编译的一门课程。该课程的目的是在于系统地向学生讲述编译系统的结构、工作流程以及编译程序各组成部分的设计原理和实现技术,使学生通过本课程的学习,既掌握编译理论和方法方面的基本知识,同时也获得设计、分析和移植编译程序方面的初步能力,进而提高学生设计多种软件的素质。
1当前教学中存在的问题
由于这门课程理论性强,内容丰富抽象,具有严密的逻辑性,使用到其它课程的知识较多,因此成为计算机专业诸课程中既难教又难学的一门课程。目前该课程在教学过程中主要存在以下问题:
1)课程内容抽象难理解
编译程序不同于一般的应用程序,是一个十分庞大和复杂的系统软件,它所包含的理论知识较多,抽象度也较高,要求教师在有限的课时内将课程内容讲解清楚,并使学生接受理解是有难度的。
2)基于面向过程语言的描述模型
目前,这门课程中的算法和模型描述是用PASCAL语言或者C语言等面向过程语言。虽然个别教材加入了少量关于面向对象语言编译技术的内容,那也是稍加点缀而已,用途较小。然而,面向对象语言已经成了高校计算机教学的主流语言,社会上大量使用的也是面向对象语言,而我们的编译原理教学仍然沿袭旧的面向过程语言,这种现象严重脱离了计算机技术发展和社会实际需要。
3)课程实验设计不合理
目前,大多数高校在“编译原理”课程的实验内容上基本上都是要求学生能上机实现一个小型模型语言的完整编译程序,或者是分四个单独的实验(词法一个实验,语法三个实验),它们的目的是让学生加深理解一些编译理论与算法,这对于一部分学生来说是不能完成的任务,也不能激发他们的兴趣(他们认为学习编译原理就是为了设计编译器),造成很大部分学生在动手之前就早早放弃了努力,也就不能达到预期的实验效果。
4)教学手段陈旧
目前,“编译原理”课程主要以理论教学为主,课时主要用于形式语言理论与各种语法分析算法、语义分析技术的讲授上,缺乏对实际编译器的分析。同时,在讲解的时候一般没有辅之以其它形象生动的教学手段,对学生是采用“灌输式”的教学模式,而没有采用“启发式”、“讨论式”等多种教学模式,因此学生觉得授课内容枯燥乏味,激不起他们学习的兴趣。
5)教学大纲统一
目前,每个高校计算机相关专业包括计算机科学与技术、软件工程、网络工程等,学生也存在不同的层次包括统招的“一本”、“二本”学生,以及“专升本”学生等。不同专业有不同的培养目标,不同的生源造成学生知识背景和自身素质也有差异。在这种情况下,在“编译原理”课程教学过程中实行统一的教学大纲显然不合适。
6)学生学习兴趣不浓
目前,学生普遍认为学习编译原理就是为了设计编译器,而大部分学生今后从事编译器设计工作的可能性较小,因此觉得没必要学。另外,目前面向对象的程序设计语言已经成为了主流,认为课程主要讲授面向过程的程序设计语言的处理已经落伍,因此失去了学习兴趣。
形成以上这些问题的原因既有主观的也有客观的,这些问题在我校的编译原理教学过程中也都不同程度地存在。为此,对“编译原理”课程的教学内容和教学方法进行探讨是十分必要的、有意义的。
2需要解决的问题
1)课程内容的调整
“编译原理”课程内容丰富抽象,理论性和逻辑性很强,所以很多学生在学习时普遍感到枯燥、乏味,难理解,激不起学习兴趣。为此,需要对课程内容合理安排以便收到较好的教学效果。
a)抓住重点,分清主次
由于课程内容涉及较多,学生往往抓不住重点,分不清主次,结果导致劳而无功。为此,需要根据专业的不同,学生层次的不同,在不影响对编译系统理解的情况下,合理安排授课内容,切不可造成“统一重点的教学”、“统一层次的教学”、“统一大纲的教学”现象。
b)范例式编译器的剖析
为了帮助学生对编译思想和方法的理解,应在教学过程中增加一部分内容,即对一个范例式编译器进行剖析。该范例式编译器应采用教学中涉及到的典型编译思想与方法。学生在教师的指导下对实际编译器代码进行阅读,将使学生对抽象的编译理论与算法有更深刻的认识,从而达到较好的教学效果。
c)面向对象式语言的描述模型
当前,面向对象式语言已成为主流,而目前课程中的内容却是围绕面向过程式语言展开的。为此,需要在教学过程中增加一部分内容,即选择某个对象式语言来描述典型的编译算法。但就目前来看,以面向对象语言作为源语言来重新组织编译原理的教学内容并不合适。在教学过程中应向学生指明这一点,使之有个正确的认识。
2)实践环节的设计
“编译原理”也是一门实践性较强的课程,只有通过实践环节才能让学生加深对抽象理论的理解,培养其分析、设计软件的能力。为此,必须重视实践环节的教学,精心设计实验方案,合理组织实践训练(对于不同专业培养目标、不同类别学生素质差异,需设计不同的实验方案)。
a)设计合适的实验内容
目前,大多数高校在“编译原理”课程的实验内容上基本上都是要求学生能上机实现一个小型模型语言的完整编译程序,或者是分四个单独的实验(词法一个实验,语法三个实验)。这样的实验内容存在一个缺陷就是不能充分激发学生的学习兴趣,因为他们认为学习编译就是为设计编译器,而大部分学生以后从事这方面工作的可能性较小。为此,我们需要设计一个能运用编译理论和技术去解决实际问题的实验。例如,可以给定一个受限汉语的子集,引导学生用文法去描述它,然后把它应用到一个简单的自然语言查询的程序设计中去。
b)合理安排实验课时间
实验时间安排要具有灵活性,不要一周或两周一次实验,这样可能和授课的理论内容脱节。可以分别在每个实验的相关内容讲解完后安排这四个实验,并要求学生记录下每次实验的输入和输出形式,实现理论与实践的结合。
c)改进实验课教学方法
为了让实验能达到预期的效果,需要做以下工作:一是老师在实验前要将准备好的实验资料发放给学生,让学生利用业余时间分析、设计实验内容;二是老师指导学生一起讨论实验所涉及的原理、程序模块的功能和部分变量的用途;三是学生在理解的前提下,开始进行实验,老师随时进行监督指导。最后,在实验完成后,老师一定要检查学生的完成情况,并给予记录,学生则要记录下所有的实验结果。
3)教学方法的改进
“编译原理”课程抽象性和理论性较高,学生普遍感到内容难理解,更不能运用编译技术所涉及到的思想和方法去解决其他专业问题,学起来枯燥、无味。为此,需要灵活运用多种教学方法,以激发他们的学习兴趣和积极性,培养其分析、解决实际问题的能力。
a)多媒体辅助教学
“编译原理”课程涉及到形式语言与自动机理论,主要包括一些经典的语法、语义分析算法。这些理论和算法抽象复杂,不易理解。为此,需要借助多种辅助教学手段,如CAI课件、CAI教学系统和教学网站等。这样可以把抽象的理论形象化,把知识讲解化静为动,寓教于乐,培养和激发学生的学习兴趣。
b)师生互动式教学
教学是由“教”与“学”两方面构成的,师生互动才能“教”、“学”相长,提高教学效果。在课堂上,应采用“启发式”、“讨论式”、“提问式”等多种教学模式,以发散学生的思维,激发他们的思考能力;在课后,应通过教学网站发放调查问卷等形式及时获取学生对教学活动的意见与建议,学生也可以通过BBS系统进行交流,以便及时发现问题进而改进教学方法。还可以指定课后的时间组织小型的师生面对面交流,一方面是答疑,一方面也可以就编译领域的一些新问题、新动向进行研讨,进一步激发学生的学习积极性。
4)教材建设和CAI课件制作
目前为止,国内外已有不少关于“编译原理”的经典教材,因而我们暂时不打算重新编写授课教材。但从以上分析可知,目前的课程实验内容设计却各不相同,没有合适的实验教材,因此有必要根据我院特色来组织编写“编译原理”课程实验教材。同时,我们也将依据我院教学实际,重新合理组织教学内容,图文并茂,制作精良的CAI课件,以减少板书的时间,提高授课效率。
5)教学网站的建设
开发“编译原理”网络教学平台,构建良好的网络辅助教学环境,实现学习、答疑、作业和考试等各个教学环节的网络化,教师和学生可以很方便的利用该平台完成几乎所有教学活动,本课程教学网站主要将分四大模块:
a)基本信息
包括课程负责人、课程主讲人、教学队伍、自我评价、课程建设规划、课程教学录像等相关信息。
b)课程建设
课程概况:课程简介、课程大纲、教学日历、教材和参考文献。
教学资源:电子教材、电子课件(PPT)、电子课件、参考教案、例题源代码、习题答案、考试样卷及参考答案。
实验教学:实验教学大纲、实验内容、实验指导。
在线考试:为学生提供了模拟笔试、模拟机试和在线考试,实现了自动组卷和评分。
作业练习:提供了各章的练习题、单元测试题。
作业提交:主要提供了作业的发布与提交等功能。
c)BBS论坛
提供学生、老师相互之间的交流平台,以便及时发现问题进而改进教学方法和内容。
d)问卷调查
在课后,发放调查问卷及时获取学生对教学活动的意见与建议。
6)CAI教学系统的研制
CAI教学系统是辅助教学的一重要手段,通过它可以帮助学生加深对编译思想和方法的理解与运用,进而培养和激发他们的学习兴趣。我们将考虑按照图1所示的系统结构图来设计“编译原理”课程的CAI教学系统。
基本知识播放:提供每章的基本知识点的查询和一些基本知识点的程序实现等。
编译过程演示:这是CAI教学系统主要模块,提供了词法、语法、语义分析算法的动态演示,而且还要动态演示中间代码生成、中间代码优化和目标代码生成的执行过程。
自我测试:提供题库,让学生测试自己对所学知识的掌握情况。
系统维护:随着编译技术的发展,知识的不断更新,会出现一些新的概念和算法,因此系统也要随时增加新的知识点。另外,随着系统的运行,可能会发现一些不正确的地方,也需要及时修改。
图1 CAI教学系统主要模块
3结束语
“编译原理”是计算机专业中一门重要的课程,通过本课程的学习,可以使学生获得设计、分析和移植编译程序方面的初步能力。结合实际教学过程,本文分析了“编译原理”课程教学中所遇到的六个问题,探讨了需要解决的五个问题,以期望在今后的教学中能达到较好的效果。