余芳 王晓明 赵森
[摘要]针对编译原理课程理论性强、内容高度抽象的特点,依据创新型人才培养的需求,课题组在编译原理课程教学中增加了创新型实验任务,并通过拆解原大型综合性实验,重新设置了各阶段实验任务,实现了课程实践教学体系的层次化、立体化;同时辅以多媒体教学手段及互动式的教学设计,注重教学引导,达到了提高学习者学习主动性和积极性、增强其理论应用能力的目的。
[關键词]创新思维;编译原理;实验教学;学习者为主体
[中图分类号]G642.0 [文献标识码]A [文章编号]2095-3437(2019)12-0045-03
编译原理课程是计算机相关专业学生的必修课程和高等学校培养计算机专业人才的基础及核心课程,同时也是计算机专业课程中最难及最挑战学习能力的课程之一。编译原理课程内容主要是原理性质,高度抽象。编译原理实验课作为将理论知识转化成实践经验的手段,对完善编译原理课程教学起到重要的辅助作用,目的是使学生具有设计、实现、分析和移植编译程序等方面的初步能力,为今后从事软件开发或理论研究工作打下坚实的基础。
为响应教育部关于“深化高等教育教学改革,培养学生的创新精神和实践能力”的号召,在专业课程尤其是有一定难度的专业理论课程的教学中研究如何发挥学生的学习主动性和积极性,提高其学习兴趣,培养其实践应用能力就成为新形势下高校培养人才的新挑战。
一、实验教学现状
本校编译原理课程在实验内容方面:(1)以综合应用型实验为主,要求学生完成“小型程序设计语言TinyC编译程序的实现”实验任务。缺乏对重要知识点及难点的验证型实验设计,如“编译程序的自动构造技术”等若干个重要知识点。这些知识点在教学计划中占了将近40%的课时,且是计算机相关专业后续课程如程序语言构造与实现、自动机与文法理论的重要组成部分,对于掌握计算相关理论有重要的基础作用。它们内容抽象,理解起来不太容易,因此亟须相应的实验手段辅助教学。(2)缺乏对大型综合性实验的合理规划安排。大型综合性实验的实验内容集中于大部分教学内容完成后安排,使得实验各个阶段的任务不明确,无法有效帮助学生建立编译程序各个步骤的概念,导致其忽略编译程序的全局性,进而不能全面深刻理解整个编译程序实现的原理。此外,由于实验内容具有一定的难度,让很多学生知难而退,难以达到预期的实验效果。(3)缺乏创新型实验和提高型实验的设计,这使得教学内容没有被充分利用,学习者的主动性和积极性难以发挥。
在课程采用的实验手段方面:(1)全班做一个题目,不仅难以避免抄袭,而且忽略了学生的个体差异。(2)学生按照教师在课堂上的布置或者指导书上的步骤,按部就班,完成相关操作,学习的主动性、积极性受到限制,不利于学生的创新意识、创新思维、创新能力的培养。(3)与实际应用结合不紧密。学生不清楚相关原理能解决什么实际问题,导致兴趣不高。
二、改革指导原则
(一)须满足现代计算机应用所要求的人才模式需求
编译原理课程实验内容设置应注重与教学内容的配套,如“虚拟语言编译程序的实现”“限定任务的编译程序工具练习”等,且实验对象都是虚拟的,同时限定了实验任务及目标。在计算机应用如此普遍的今天,计算机相关专业课程的实验教学应注重与实际应用的结合,在强调概念、原理、思想的同时锻炼解决实际问题的手段和方法。
(二)须强调素质的培养
编译原理课程就其自身特点看,有着很强的逻辑推理性和高度概括的抽象性,同时也将实验科学和理论科学高度结合。因此,教师应在教学内容上和教学过程中紧紧把握这一特点加强对学生的创造性思维和创造能力的培养,从而提高学生的综合素质。从现代社会、科技的发展趋势看,学生综合素质的培养比技能的培养更为重要。
(三)须适应现代化的教学手段
互联网技术的发展及普及带来信息共享及获取方式的巨大改变。编译原理课程实践教学改革要从实践内容体系及教学手段等方面充分体现这一时代特征,在教学手段方面更多地引入演示、多媒体教学辅助等,使得课程能以更活泼多样的新面貌出现。
三、改革实践
(一)实验体系结构设计
(1)根据构成编译程序的六个步骤及相应知识点的独立性与完整性将原综合性设计实验“小型语言Tiny C的编译程序”拆解为四个阶段性实验“1.词法分析程序Scanner”“3.语法分析程序Parser”“5.语义分析程序Ana-lyzer”,以及“6.代码生成程序Code Generator”,安排在相应知识点教学内容及前阶段实验完成之后分别进行(见图一)。(2)为实验1、3、5分别设计了三个预备任务“画识别Tiny C语言合法单词的DFA”“写Tiny C语言CFG”以及“画Tiny C语言属性树”,以课堂作业的形式安排学生完成并实时讨论与讲解,制作微视频供学生课后巩固学习。(3)对重要知识点及难点,如“编译程序的自动构造技术”这一在许多相关领域都有应用的基础理论知识,设计创新型实验“2.Flex(LEX)工具实验”和“4.Bison(YACC)工具实验”,突出理论知识在实际生活中的创新应用,同时帮助学习者深刻理解和牢固掌握这部分知识。
(二)任务实现与效果
实践群体为某高校某年级计算机科学与技术专业及软件工程专业近百名学生。学生的作品集中反映出学生对任务的兴趣很高,充分开动了脑筋,查阅了资料。实验结果有很多创新,并结合了实际应用。
(1)对于综合性设计实验1、3、5,首先教师通过展示程序框架讲解Tiny C语言词法及语法语义等的约定。之后布置课堂作业,引导学生完成,并随后在教师讲解下纠正错误。这些课堂互动任务还制作了微视频以供学生课后学习。这些做法是实验后续任务的实现基础,通过引导学生入门提高学生自主完成实验的兴趣,同时保证其对涉及知识的理解与巩固。
(2)对于提高和创新型实验,实验2“Flex工具实验”与实验1相比是词法分析程序两种不同生成方法的实践练习。实现过程分为两部分,首先要求学习者在一个Flex使用示例“识别输入文本中的单词和数并分别统计个数”的指导下掌握Flex工具的使用步骤;随后完成自主设计的实验任务:学习者自行设计词法规则,写出正规表达式序列并使用Flex工具进行分析并截图展示成果。
在上交的近90份作品中,除2个不符合实验任务要求的作品及5個仅在示例上做小改动的作品以外,其余作品共完成了13项不同主题的任务,充分展示了学生的创造性。有代表性的作品集如:“识别程序语言单词或关键字”“识别动物字符图(马牛猪猫)中的符号=”“判断合法日期值”“识别子串”“识别合法姓名和电话”“识别合法E-mail地址”等。其中,实验作品“识别动物字符图(马牛猪猫)中的符号=”很有趣,学生在课堂上进行了展示。
(3)实验4“Bison工具实验”与实验3相比是词法分析程序两种不同生成方法的实践练习。实现过程也分为两部分,首先要求学习者在一个Bison工具使用示例“结合Flex工具实现简单表达式求值”的指导下掌握Bi-son工具的使用步骤;随后完成两个实验任务:第一部分为必做任务,要求学生根据示例写出算术表达式的无二义文法,并对比其与示例的二义文法的区别;第二部分为选做任务,要求学生自行设计词法及语法规则,写出构词规则序列、产生式序列及翻译规则,使用Bison工具进行分析并展示成果。
有一半以上学生完成了选做任务。其中有代表性的作品集如:“程序设计语言语法规则设计”“识别温度开关及设置指令”“回文的判断”及“科学计算器模拟”等。其中有两个非常突出的作品“中心嵌入英语语法解释器”和“亲属关系自动识别器”。
①中心嵌入英语语法解释器
英语语法中的中心嵌入概念即“将短语嵌入相同类型的另一短语中间”,使得英语长句解读起来会比较易于理解。中心嵌入英语语法解释器尝试将该类型的复杂嵌套语句进行解析并还原成为多个易于理解的主谓箕子句。如:
输入“A man that a woman that Peter knows loveskilled a cat.”
输出“Peter knows a woman,the woman loves a man,the man killed a cat.”
②亲属关系自动识别器
这个小程序可以为孩子或外国人提供一个简易的学习中国人亲属间称呼的工具。如:
输入“父亲的父亲的女儿的儿子”。
输出“表兄弟”。
以上两个例子不仅是相关理论知识的准确应用,同时具有相当的创意和实用性。可以看出,两个例子的作者都结合现实生活中的一个困难的小问题充分发挥了计算机的工具作用,体现了学生对概念的深刻理解、广泛的知识积累和优秀的应用及创新能力。
四、改革体会
(一)强调学生作为学习主体
在教学过程尤其是实践教学过程中,学生是学习的主体,要完成任何一种形式的教学都必须有学生主动密切的配合,否则教与学易脱节。但要使学生真正地参与到教学改革中去,那么学生原有的学习模式以及对教学方法的认知就要有观念性的转变。(1)自主设计实验只指定目标不规定具体实验内容,这使得学生无例可循,必须结合实际,开动脑筋自己设计问题并解决它。这个实验的效果是明显的,有令人惊喜的作品出现。这说明只要提供给学生以主动思维的空间,完全可以改变其学习过程中的等待性和盲目性,从而促使其主动思考,主动学习。(2)督促学生现场完成大型综合设计实验的具有先导性质的作业,并进行互动讲解及讨论。通过现场完成该作业使学生明白实验任务要解决的问题是什么,认识到哪些问题是可以解决的,从而克服畏难情绪,促使学生自己主动去解决这些问题。学生因而充分认识、挖掘了学习潜力,也逐步提高了学习信心和兴趣,增强了学习的主动性。
(二)教学方法及引导是关键
在教学过程中教师要有明确的教学思路和正确的引导方法,才能把握住整个教学过程,使教学改革得以顺利推进。(1)将大型综合设计实验按照知识点的独立性分割成四个阶段,配合教学内容的完成而安排;从实验任务分离出课堂作业,作业完成后才着手实验任务。由于作业内容对实验任务有先导作用,教师将其制作成视频提供给学生课后自主学习。以上手段避免了学生一上手就面对大型问题、复杂问题,引导其一步步地完成实验任务。(2)在同一个知识点上设计不同方法的对比实验。如对知识点“词法分析程序的实现”,设计实验“Tiny C语言Scanner”和“Flex工具实验”;对知识点“语法分析程序的实现”,设计实验“Tiny C语言Parser”和“Bison工具实验”,要求学生完成实验任务后进行对比,从而强化概念和方法,引导学生思考和掌握教学内容。(3)根据学生实验能力有差异这一特点,把实验内容分成示范、必做和选做三块。如示范任务为“Flex工具示例”和“Bison工具示例”,有六个必做实验任务以及“Bi-son工具实验”的第二个选做任务。对那些基础好,能力强、速度快的学生,除了必做内容外,还要求他们完成选做内容;而对实验技能一般的学生,把其他学生完成的选做内容进行展示,要求他们观察结果(相当于示范)。
(三)利用成绩激励机制
对绝大多数学生来说考试方式、内容决定了他们的学习方法,甚至是思维方式。因此,充分利用成绩来引导学生配合教学改革就显得十分必要。在实践中从这方面人手,有以下措施和体会:(1)加大平时成绩的比例,肯定付出的努力,奖励主动思考的成果。例如三次课堂作业均通过课堂巡视的方式找出完成得好或错误较典型的进行现场展示,奖励获得课堂展示机会的优秀作品的作者,以作品难易程度和独创性给出成绩,处理抄袭和雷同实验作业的成绩。(2)期末考试设置少量与实验内容直接相关的考试内容。
五、结语
综合以上,本次教学实践改革达到了以下目标:(1)对实验内容及手段的设计和组织进行改进,更好地提高了编译原理实验课的教学效果,有效达成了教学目标,巩固、加深了学生对基本知识、基本理论的了解,突出了教学重点及难点。(2)使学生掌握了相关基本技能,提高了学生的动手能力、综合运用知识解决实际问题的能力,发挥了学生的自主学习能力和创造性。(3)加强了师生之间的交流。
当然,同时存在一些遗憾。首先,有些实验任务内容设置还是不够合理,如“Bison工具自主设计”这一较大型的困难任务不加任何引导就完全放开给学生,导致上交率只有一半,交上来的作业也存在未完全调试完成的情况。其次,在现代教学手段的辅助上,虽然本项目制作了视频辅助学习者线下自学,但未充分利用线上讨论手段。计划改进措施是将“Bison工具自主设计”实验改为必做任务,但内容调整为教师指定若干(3~4个)与示例不同的问题,选定其中一个或自行设计(有创新加分)完成任务。任务中学生自由组成小组,实验讨论课以组为单位展示作品,培养学生的协作能力。
改革实践证明以上措施对提高学生学习兴趣和实践能力、创新能力的培养很有帮助,不仅有多样且新颖的实验作品出现,课堂教学效果也得到了加强,这体现在课堂的教与学交流中,也体现在课程结束考核的成绩上。我们计划在今后的教学中结合线上展示和讨论手段进行启发指导,促进更多水平较弱的学生加入主动创新的活动中来。