推荐阅读:编译原理实验课程教学设计的改进 编译原理课程是计算机科学与技术专业的重要专业课之一,课程内容抽象,理论性较强,学生普遍反应难学难懂,为此设置一定课时的实验课,有助于帮助学生深入理解概念,提高学生的逻辑思维能力、实践动手能力,有助于切实有效地
编译原理实验课程教学设计的改进
编译原理课程是计算机科学与技术专业的重要专业课之一,课程内容抽象,理论性较强,学生普遍反应难学难懂,为此设置一定课时的实验课,有助于帮助学生深入理解概念,提高学生的逻辑思维能力、实践动手能力,有助于切实有效地提高学生的专业素质。目前编译原理课程的实验设计通常是要求学生实现一个比较完整的编译程序,或者将其拆分成词法分析实验、语法分析实验和语义分析实验等几个部分,实验内容具有一定的难度,让很多学生知难而退,难以达到预期的实验效果。究其原因是在实验设计上与学生的实际情况之间出现了诸多偏差,需要对实验的设计和组织进行改进,以更好地提高编译原理实验课的教学效果。
1编译课程实验的问题
1.1学生对课程实验定位存在认知误区
在教学实践中发现很多学生对编译原理实验课程的认识上存在很多误区,这些认识误区如果不加以及时纠正,加上课程内容抽象、逻辑性强等特点,很容易加重学生的畏难情绪,产生一系列不利于课程学习的消极负面影响。
一种认识误区是简单地认为编译原理的学习目的就是设计和开发编译器,认为毕业后很少有从事编译器研发的机会,所以得出课程学了没用的错误结论。实际上编译原理包括的形式语言、自动机理论等语言定义、翻译与实现的基础知识,可以让学生领悟到计算机理论的精髓,可以让学生从程序编译的角度重新审视软件的开发,有助于提高学生对软件设计开发的认识,对于今后从事应用软件、语言开发平台甚至系统软件的开发等都是非常有好处的。
另一种认识误区是将编译的实验混淆于普通的程序设计实验,将实验重点没有放在算法的设计、原理的理解上,而是迷失在具体代码实现的细节上。编译原理课程是一个综合性的专业课,编译程序使用的一些数据结构和算法是“数据结构”、“离散数学”以及“算法设计与分析”等课程相关知识的典型应用 ,能够进一步加深了学生对相关课程知识的综合运用和专业素质的提升。
1.2实验内容设计缺少层次性
通常的编译原理实验课的教学设计,是将学生已经学过的一种高级语言的词法和语法进行简化,作为实验的模型语言。针对编译过程的词法分析、语法分析、语义分析与中间代码生成、目标代码生成的四个重要阶段,每个阶段分别设计一个或多个实验题目,最终合成一个完整的编译程序。这样设计实验的好处是与授课内容紧密结合,模块分解清晰。但存在的问题是尽管对高级语言进行了简化,每个实验仍然存在着一系列的“难度阶梯”需要学生跨越,如果在实验的设计上仅从学科的理论体系上考虑,忽视了学生知识和能力水平的不同层次,只是一种理想化的设计,执行起来势必难以达到预期的实验效果。
以词法分析的实验设计为例:实验要求是给出某模型语言的文法规范,要求编写该语言的词法分析程序。输入源程序文件,输出关键词、专用符号以及其它标记。实验过程是编写主函数getToken,通过从文件中读取字符到缓冲区中并由C语言字符的状态转换图流程判断返回一个字符(Token)。分析出来的单词主要分为关键词,专用符号,标记符号等。
这个实验是编译阶段的第一个实验,在学生对编译程序理解不深,很多思维方式和知识框架还没有建立起来的情况下,给很多学生设置了一系列障碍,如形式化语言、有穷自动机的理论等,每一个障碍对于初学者都难度不小,这些问题同时出现在一个实验中,会使相当大一部分学生因难度过大而失去学习兴趣。实际教学中学生对编译程序的认知是循序渐进的,很多概念和原理的理解不可能一步到位。而且学生的知识结构、能力水平参差不齐,有的学生的先导课程如《数据结构》、《高级程序设计语言》等知识学得不牢固,有些甚至已经淡忘,因此在设计实验时需要首先弄清楚学生的情况,然后再“对症下药”有侧重点地进行实验内容的设计。
1.3实验的组织形式比较单一
编译原理的实验组织形式通常是在机房每个学生一台计算机,实验课程开始后教师介绍实验内容、实验目的和实验要求等,然后每人独立完成,从设计到实现都由学生自己进行,教师在实验过程中随时解答学生的疑问,最后学生调试完成程序后撰写实验报告,教师根据学生的程序和实验报告给出分数。这样的实验组织和成绩的评判形式比较单一,整个过程由教师主导,能够训练学生个体的独立思考能力和动手能力,但学生之间的交流不够,实验课的大部分时间都是学生埋头写程序,实验课气氛比较枯燥沉闷,对学生团队协作能力的训练不够。
2实验教学设计的改进
2.1消除学生的认识误区
针对学生简单地把编译原理课程局限在编译器设计上的认识误区,教师在授课和实验过程中需要注意结合实际中运用编译技术的实例,比如常用的文本编辑工具中,很多带有字词的检查和校验功能,这就是编译原理技术中词法分析技术的具体应用;很多应用系统中对用户输入的字符串进行规则检查时常用正则表达式;网络搜索引擎对文档资源进行特征分析、提取与描述等工作中都用到编译的相关知识……通过各种现实生活中的实例让学生明确编译原理所学习的知识不仅是计算机专业理论知识的重要组成,而且编译程序所使用的一些原理、方法和技术在非编译系统的实际应用中也发挥了很大作用。
在进行实验设计时,除了原理性实验,可以根据学生的兴趣,安排一些应用型的实验,如简单的智能输入法的实现、识别某些单词的简单聊天机器人程序等,这样的小实验可以激发学生的学习兴趣,学生在这些应用性趣味实验中遇到了困难,自然会进一步深入学习教材中的原理,这样对基础理论的掌握也会更加牢固。
2.2实验内容的改进
国内外的一些经典教材中,通常会采用一种模型语言的编译程序作为实例,如吕映芝等人编著的《编译原理》是以PL/0语言的编译程序为范例,Alfred V. Aho等人编著的《编译原理》先通过一个小的编译程序范例给学生带来对编译程序的直观感受。通过实例的学习,可以降低学生的学习难度,也可以辅助学生对原理加深理解。在设计实验时,可以更大地发挥这些实例的作用,事先让学生阅读这些实例的源代码,然后增加一个准备性的实验,要求学生结合已经学习过C、C++或JAVA等高级程序设计语言,自行对词法规则和语法规则的简化和裁减,设计出适合自己实验难度的模型语言,并给出文档描述。通过安排这个准备实验,促使学生复习必须的基础知识,增加学生查阅资料的能力和阅读源代码的能力,在学生的认知结构上起一个铺垫的作用。
词法分析、语法分析试验是编译原理实验的重点。在实验内容上,对一些比较复杂的实验进行拆解。词法分析实验可以拆分成三个小实验:设计源程序扫描器,去除空格和注释及其他无关字符后得到单词的集合;用自动机识别无符号数或某类单词;设计识别关键词、标识符等其他类型单词的识别程序。对语法分析实验,可以首先以典型的算术表达式文法为例,设计一个算术表达式文法的递归子程序分析实验,然后在此基础上安排其他的语法分析实验。这样在内容上也分成了若干层次,更加符合由简单到复杂、由特殊到一般的认知规律,也能够满足不同知识结构和能力水平的学生在实验中都能得到锻炼提高的目的。
实验难度的设计上应该体现出层次性,形成“阶梯状”的难度层次。每个实验要求分为基本要求、较高要求和探索性实验要求三个层次,基本要求即最低要求,所有学生都能完成的难度,鼓励成绩中上的学生完成较高要求,采用成绩加分、表扬等一些激励机制,提高兴趣,为一些学有余力的同学准备探索性实验。既能让优秀的学生“吃得饱”,也保证让所有学生“吃得了”,避免一部分学生因缺乏难度挑战失去兴趣而另一部分学生因门槛太高而无从下手的情况发生。比如在“利用自动机识别无符号数”的实验设计上,基本要求是能够识别整数,较高要求是识别带小数的无符号数,更高要求是能识别带指数形式的无符号数,将这一实验题目分成三个层次后,不同学习水平的学生都能够在一个学时内完成实验,对自动机这一重要工具也有了初步认识,达到了实验目的。
2.3实验组织形式的改进
在实验的组织上可以采用协同式学习,以小组为单位,通过教师所提供的实验任务进行分析、讨论,明确需要解决问题的方法,经过一系列的协同学习活动,完成既定的任务,加深对所学知识的理解。这种组织形式可以培养学生的团队协作能力和学生之间的相互交流和相互学习。因为学生之间的年龄相仿、认知水平相似,交流起来会更加顺畅和有效。在这个过程中能够提高学生的参与感,而且通过团队协作解决困难,会给学生更多的积极反馈和成就感。
在实验内容的设计上,要便于学生进行协同工作,具有可操作性和合作性,确保小组中每个成员的任务饱满。在小组分配上,根据学生的兴趣让其自由结合小组,再根据学生的学习能力做适当调整,根据学生的性格特质等不同特点让其在小组中承担不同角色,如设计人员、开发人员、文档撰写人员以及兼任的汇报答辩人员等。实验实施阶段是协同模式中最重要的一个阶段,在这个阶段小组要对下达的实验任务进行分析,明确任务的基本要求,掌握解决问题的方法及需要具备的知识,在教师的帮助指导下进行小组的内部分工及职责的落实,进行协同学习,同时教师要对学生实验完成情况进行及时的检查和指导,直到最终共同完成小组的任务。
传统的独立模式的实验中对学生的评定比较简单,根据个人的完成情况给出成绩。采用分组式协同模式后,实验成绩的评判要做相应的调整,不仅要考核每个学生自己承担的任务完成情况,还要考核小组共同完成情况。考核的内容仍然包括程序和实验报告,但除了对每个学生独立完成的程序模块进行检查外,还需要对小组共同完成的整个任务情况进行验收,可以采用汇报和答辩的形式进行,每个小组推选答辩人在面对所有学生进行汇报,然后接受教师和其他小组的提问并进行答辩,最终成绩的评定除了个人评定之外还有小组评定,对小组成绩进行排序以鼓励小组间的竞争。
3总结
为了在编译原理实验课中达到教学目标,根据发现的问题对实验课教学设计进行改进:采用应用型实验激发学生的兴趣,消除对课程的认识误区;重新设计和组织实验内容,更加符合学生的学习规律;采用协同方式组织实验培养学生的团队合作能力。这些改进措施已经在教学实践中采用,结果表明有助于降低学生学习过程中的困难,增强学习兴趣,提高实验教学的质量。