编译原理课程中的“四元式”教学

  • 投稿王启
  • 更新时间2015-10-09
  • 阅读量569次
  • 评分4
  • 59
  • 0

周 伟,秦沿海,校景中

(西南民族大学计算机科学与工程学院,四川成都610041)

摘要:针对编译原理课程教学内容抽象导致学生学习困难的状况,分析课程教学各阶段的重难点和教学目标,提出从分阶段突出重点教学、引入习题课加强学习效果、实验环节用不同测试用例提高学生动手动脑能力、重视考试命题和试卷分析4个方面来提高学生的听课质量并保证教学效果。

教育期刊网 http://www.jyqkw.com
关键词 :编译原理;阶段教学;课程设计;实验设计

文章编号:1672-5913(2015)17-0021-03 中图分类号:G642

基金项目:西南民族大学中央高校基金项目( 2015NZYQN29);2013年四川省计算机科学与技术专业综合改革试点项目( 080901)。

第一作者简介:周伟,男,讲师,研究方向为机器学习、计算智能,wei.zhou.swun@gmail.com。

0 引言

编译原理课程作为计算机科学与技术专业的主干课程,其最大的特点是理论高度抽象,实践动手环节的教学效果受制于对理论的理解程度。在教学上,如何根据学生的特点使其在有限的时间内掌握必要的知识点,将之较为灵活地应用于实验实践中是对教师的一个挑战。

1 灵活安排教学内容

多年来,随着计算机专业课程的调整和改革,编译原理课程的教学课时一直呈下降趋势,从早期的80学时调整到现在的50~60学时,授课内容和要求也一再降低,授课教师除了要把握好删繁就简的原则,更需要重视学生的思维训练。

以西南民族大学编译原理课程为例,其理论课时为51学时,实验环节为16学时,胡元义老师主编的《编译原理教程》为教材。理论教学内容主要以前5章为主,包括文法语言基础知识、词法分析、语法分析、语义分析和中间代码生成、代码优化部分。由于课时的限制,对于自底向上语法分析方法,课堂只涉及LR(O)和SLR(1)分析器。实验环节课时为16学时,安排3个实验,分别是词法分析、语法分析、中间代码生成。

1.1 初学阶段

开学后的第1-3周为初学阶段,是树立学生信心的重要阶段,讲解内容包括文法与语言的基本推导、推导与语法树等,通常采取第一遍理论解释、第2遍举例说明、第3遍让学生回答问题的方式进行,即“三遍法”。这个阶段在教学节奏上越慢越好,目标是让学生熟悉这门课程的学习规律,从抽象的理论中逐步建立起整个知识体系,并将其运用于实际的编程实践中。

1.2 难度上升阶段

第4-7周为词法分析阶段,这个阶段进入上机实践环节,培养学生从理论学习到实际编程的能力。这一阶段的教学难点和重点不多,大致包括根据要求写出正规式、NFA确定化为DFA、DFA化简。

1.3 重点学习阶段

在前两个阶段,教师应该尽可能地照顾学生的学习和理解程度,有意识地放缓教学节奏,重点放在“教与学”的“学”上,通过布置习题课来加强学习效果。经过前两个阶段的学习,学生应该基本掌握这门课程的学习方法和思路,因此,后续的课程更偏向于“教与学”的“教”,将大部分习题练习改为学生课后自行完成,而习题课只对部分习题进行讲解。

在授课时间安排上,第8-10周为语法分析阶段,教学的重点和难点有消除回溯和左递归、LL(1)、算符优先文法、LR (0)和SLR (1)文法;第11-13周为语义分析和中间代码生成,重点和难点主要集中在控制语言的翻译上;第14-16周为代码优化阶段,重点和难点主要集中在基本块划分,利用DAG进行基本块的优化、循环的查找和优化;最后一周主要是梳理相关知识。

这一阶段教学方式仍然采用“三遍法”,但具体与前阶段不同,主要遵循华罗庚先生读书法中“由薄到厚”与“由厚到薄”的要求。以讲解LL(1)文法如何识别输入串为例,如果单纯从理论上讲解词法分析规则,学生普遍理解困难,因此,实际授课内容无须机械地按照课本先理论再实例的顺序。第一遍讲解应尽可能贴近具体实例,然后反过来解释理论上语法分析规则是如何执行的,这样做的好处在于学生更易于理解,即“由薄到厚”;第二遍重复第一遍的过程,但只是强调其中的要求,把理论知识尽可能简化为几句话,即“由厚到薄”;第三遍则要求学生根据这个例子来解释怎么做、为什么要这么做,及时检查学生的学习情况。等到确定大部分学生能够掌握相关知识点后,教师则引入习题课来加强和巩固学习效果。

2 合理安排习题课

编译原理的很多知识点本身理论思路非常清楚,再通过教师仔细讲解,学生也能理解,但和其他专业课相比,编译理论在习题解答的环节上步骤比较繁琐,学生易于出错。教师除了在教学过程中高度重视例题,还要集中1节课左右的时间作为习题课,对学生进行专项检验,既能提高学生对知识的掌握和解题能力,还能树立学生对后续课程学习的信心。

教师在词法分析阶段就要引入习题课。以NFA确定化为DFA为例,学生需要求出相应的等价的状态子集,这里只要有一个状态子集求错,后面整个结果都将是错误的。因此,让学生理解理论和解题步骤是不够的,必须让学生通过自己动手进行习题课练习,克服解题时心浮气躁的情绪,通过做题去理清思路,祛除不正确的认识。习题课一般为2—3道题目,并不要求多,目的是保证大部分同学能按要求完成。

习题课反对抄袭和剽窃,要求学生独立完成解题。在习题课的进行过程中,学生与授课教师在课堂上进行一对一的互动,由授课老师对学生的疑惑进行解答或者评价其习题完成正误。

习题课的另外一个要求是反对学生在习题课上组织讨论,因为这样不利于学生独立解题精神的培养。根据以往经验,那些习题课通过“私下讨论”在平时成绩上表现“良好”的学生,大部分在最终卷面考试环节中表现并不理想。究其原因,主要是很多学生不能很好地注重独立答题,往往只是依赖其他同学直接给出的答案,而自己并没有进行深入的思考和解答。此外,将习题课学生的表现计入平时成绩,极大地调动了学生的积极性。

3 注重实践环节的考查

实验课程包括3个实验,分别是词法分析、语法分析以及语义分析和中间代码生成。以词法分析为例,学生需要在一个给定的实验框架上用C语言实现相应的要求。这个原始的实验程序除了语法错误外,还有一些逻辑上的错误。语法上的错误根据C编译器的提示就可以解决,而逻辑上的错误必须通过理解教材的内容方能修正。 在完成词法分析的基本要求后,教师要求学生把原先的键盘输入和屏幕输出方式改为支持键盘和文件方式的输入及文件和屏幕的输出模式,这样学生必须熟悉程序结构,才能进行大刀阔斧的修改。对于学习能力强的同学,教师则建议他们不依赖之前的代码,改用C++独立完成实验程序。

实验课程作为编译原理课程的重要实践环节,可以采取下列两种方式予以加强。

(1)提早给出实验要求,让学生清楚每次实验的提交期限,尽早准备。对于完成的同学,通过所在的时间段给予A、B、C等级评定,两次获得A的同学,平时成绩为满分;而对于不能完成的同学,平时成绩会受到相应的削减。

(2)尽量避免实验代码抄袭的现象。计算机实验课历来存在的一个问题就是代码容易拷贝,防止作弊比较困难。针对这一现象,教师应分期公布并提高测试用例难度,对于先期完成的同学给出容易的测试用例,在后期的验收环节不断提高测试用例难度。因此,在实验环节上,虽在程序完成上并不保证完成度的一致性,但通过实验的同学绝大部分是靠自身努力读懂了程序,并能独立解决编程实践中的一些问题,这也是该门课程的一个教学目标。

4 通过考试环节来提高和保证后续教学质量

考试不仅能评价本学期学生的学习质量情况,也是评估当前教学手段、提高后续教学质量的有效途径;具体包括试卷命题和试卷分析两个环节。

在试卷命题环节,为保证教学质量,应采取的策略有:①试卷题库化,这样做可以规范教学行为;②在试卷内容安排上,客观题少(30%)、主观题多(70%),主观题应尽可能多地涵盖课本知识点,便于更好地考查学生掌握理论知识的情况;③在试卷题量上,考虑到两小时的考试时间,答题时间应控制在1小时40分左右,比其他课程考试题量相对多些;④在试卷难易程度上,应偏向基础知识的考查(60%),中等和较难的题型各为20%。学生普遍反映,考试工作量比较饱满,但只要平时扎实学习,完成试卷大部分内容不成问题,这也是阶段教学和考核期望的目标之一。

对历来的考试统计结果进行分析也是提高教学质量的—个途径。通过审视试卷分析数据,授课教师就能对课程的难重点有更为直观的认识,在后续教学中针对学生失分较多的部分做到有的放矢。

5 结语

基于授课教师长期的教学实践活动及教师间的交流讨论,我们认为要加强教学阶段分配、习题课安排、实验课要求、考试环节4个方面的工作,也希望借此推动该门课程的教学进一步深化、细化,以更好地适应新时期计算机专业课程教育的需要。

教育期刊网 http://www.jyqkw.com
参考文献

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

[2]王朝坤.编译原理课程研究型教学方法探讨与实践[J],计算机教育,2013(17): 30-33.

[3]陈鄞,李东,马培军.类比教学法在编译原理课程教学中的应用[J].计算机教育,2013(17): 100-103.

[4]陈英,计卫星,王贵珍,等.编译原理与设计课程研究型教学模式探讨[J].计算机教育,2013(17): 24-26.

[5]胡元义.编译原理教程[M].3版.西安:西安电子科技大学出版社,2010.

(编辑:孙怡铭]