韩士元 蔺永政 周劲 孙润元
摘要:针对编译原理课程教学内容抽象、算法复杂等特点及教学实际,充分探讨MOOC教学模式与编译原理教学过程交叉、融合的可能,提出基于MOOC教学模式的、适于面向对象高级语言的编译原理分阶段课程教学方案,旨在充分发挥MOOC教学模式在编译原理教学环节中的作用,在提高学生专业学习能力的同时,重点培养学生从代码优化的角度审视大型软件开发过程,培养学生提出问题、解决问题的科研思维。
关键词:MOOC;编译原理;分阶段教学;面向对象程序设计
0.引言
MOOC(massive open online course,大规模在线开放课程,简称幕课)因其在高校知识资源整合和共享方面具备的天然优势,近年来备受全球教育界的重视,甚至形成了席卷全球的“数字海啸”,代表了现阶段高等教育发展的前沿和趋势。同时,素有“计算机科学与技术皇后”之称的编译原理属于计算机专业核心课程之一,是计算机基础科学研究与实践应用之间的一座桥梁。然而,编译原理教学内容抽象、理论性强、算法复杂、难于理解,教师对理论知识讲解难度较高。因此,如何结合MOOC教学模式重组编译原理教学内容,不仅是MOOC模式优点在计算机类教学过程中的体现,也是编译原理课程发展自身、完善自我的需要。
1.基于Mooc的编译原理分阶段教学设计
考虑编译原理课程内容抽象、理论性较强、涉及算法较多等特点,结合MOOC教学模式的优点,旨在更加合理、有效地整合教学资源、共享知识,笔者设计了一种基于MOOC的编译原理分阶段教学模式。教学形式方面,以传统教学模式穿插MOOC视频教学展开,重点关注MOOC在重点知识点讲解过程中的作用;教学内容方面,分阶段讲授理论知识的同时,基于面向对象高级语言设计课程实践内容,实现基础与实践并重。
1.1第一阶段:面向对象高级语言的描述、自动机构造、词法分析
1.1.1理论知识讲授
以面向对象高级程序语言词法分析为例,讲述编译原理词法分析阶段在整个编译过程中的核心任务以及解决问题所用的经典算法。
(1)依据面向对象程序设计语言词法规则,设计每类单词的正则表达式;
(2)讲解以正则表达式为源头,转换为非确定有限自动机(NFA),处理NFA,使其确定化、最小化,最终生成DFA的整个过程;
(3)确定有限自动机(DFA)之间的转换算法;
(4)讲解由正则表达式为源头,最终获取最简DFA的相关算法及步骤。
其中,NFA和DFA生成过程中保存单词类别信息,状态合并时也将单词类别集合合并,以便在使用DFA分析单词时得到单词类别,这一点也是对目前单词识别算法的改进。针对多个NFA合并必然产生冲突的情况,即在某个终态会产生多种单词类别的选择,这时采用人工干预的方法,一般以长单词优先、短单词类别优先。
1.1.2实践环节设计
根据本阶段讲授的理论知识,设计课程实践环节,主要实现对输入面向对象程序源代码文件的预处理,多NFA合并为一个NFA,并最终确定、化简处理过程,处理形式最终以DFA五元组形式存储于二进制文件中。通过实践环节,学生能进一步掌握词法分析中的算法思想,进一步深化词法分析中处理源程序的过程及相互关系,巩固所学知识。
1.1.3 MOOC展示
本阶段教学内容将录制视频着重讲解次有正则表达式转换到DFA的整个流程及核心算法,使学生能够通过观看视频对此部分内容进行预习、掌握,之后通过翻转课堂的形式解答学生的问题和学习难点。同时,教师录制视频详细讲解编译器实现过程中,本阶段所涉及的编程知识,使学生能跟随视频内容学习相关内容。
1.2第二阶段:面向对象高级语言的文法设计、语法分析
1.2.1理论知识讲授
语法分析方面,主要涉及面向对象的文法,包括类、继承、重载、虚函数、接口、属性、事件、委托等的处理。以c#高级语言为例,重点讲述针对面向对象语言各类语法的相关文法设计;了解消除左递归及提取左公因子的相关算法,进一步处理文法;以LL(1)、LR(I)、LALR(1)经典算法为例,讲述以词法分析程序翻译的“单词符号序列”为输入,将单词作为语句成分进行语法检测,若装配的语句成分符合语法规则,则进行相应的翻译,进入第三阶段,若不成功,则说明不符合c#的语法规则。
1.2.2实践环节设计
消除左递归及提取左公因子之后的文法,构造LL(1)语法分析表,其中主要包括两个符号集合FIRST(α)和FOLLOW(A);在此基础上构造LR(1)分析表,主要采用构造项目规范族和“展望”搜索方法;最终依据LL(1)和LR(1)分发构造文法总控程序,依据分析表分别进行递归下降分析和从左到右、自上而下的分析,将单词符号序列装配成语句成分,并进行语法检查。
1.2.3 MOOC展示
本阶段教学内容将录制视频着重讲解LL(1)、LR(1)、LALR(1)算法的基本思想及实现过程,实现此部分教学资源的共享和利用,并以翻转课堂的形式答疑,解决学生碰到的实际问题,同时录制视频详细讲解编译器实现过程中语法分析部分的具体实现。
1.3第三阶段:中间代码、目标代码生成及优化
1.3.1理论知识讲授
中间代码生成方面,着重讲解中间代码的三元式、四元式、逆波兰式表示方法,并讲述控制语句的翻译;在代码优化方面,掌握基本的划分方法以及DAG图的优化算法,实现代码的初级优化;针对面向对象的程序设计过程中扩展中间代码的表示方法,实现对于各类面向对象元素的描述和表达;目标代码生成方面,因为MSIL是一种面向对象的语言,不同于指令和汇编语言,需要重新设计生成算法。
1.3.2实践环节设计
在实现阶段一、阶段二实践环节的基础上,本阶段进行整合处理,实现简单数学表达式的中间代码生成程序,并进行代码的初步优化。
1.3.3 MOOC展示
本阶段教学内容将录制视频着重讲解中间代码生成核心算法的基本思想及实现过程,从而实现此部分教学资源的共享和利用,并以反转课堂的形式答疑,解决学生碰到的实际问题。
2.成绩考评、教学反馈及效果评价
2.1成绩考评形式
考评是教学中的一个重要环节,它对教学组织形式、教学内容等具有客观的评价作用,是引导、激励、督促学生学习并了解学生掌握知识情况的重要手段,也是教师进行自身评定、课程改革的重要依据。传统的考评过程存在种种弊端,如考试作弊、考试形式单一、教师工作繁重等,我们针对编译原理课程特点,运用MOOC教学模式和分阶段教学模式,采用分阶段纸质考试形式,结合课堂答疑表现、实验实践完成成绩及作业完成情况等,综合评价分阶段课程教学模式下学生对知识的掌握情况,鼓励学生把知识的掌握与消化过程放在平时,杜绝考前突击的情况发生。同时,阶段性收集学生给予任课教师的建议及意见,做出定量、定性评价,对下一阶段课程教学进行及时完善和修改,从而促进教学质量的改进。
2.2教学反馈
课程教授过程中,应充分注重学生的反馈,及时调整教学方法和策略,提高教学质量。
2.2.1学生反馈
通过课堂教学反馈信息表收集学生对课程内容和教师工作的意见和建议;通过作业、实验报告了解课堂和实践环节的执行情况;通过课下任务的完成情况了解扩展和创新能力;通过QQ群、邮件等辅导答疑形式及时进行交流;通过个别交流了解个性发展;通过学生评教了解整体教学状况。
2.2.2自我反馈
教师课后反思,整理思路,修正课件,调整计划,通过结课后的课程总结进行教学反思。
2.2.3教师反馈
应与听课教师进行交流,吸取意见和建议;分析由教学督导员提供的反馈信息。通过以上多种形式的反馈,可以促进教师及时发现教学中出现的问题,更新教学资料及视频,及时调整教学方法、教学手段和措施,提高教学质量。
2.3效果评价
笔者提出的教学模式已经在济南大学连续实施三届,我们从教学方式、课程内容、实践环节及考核手段等方面进行改革与探索。根据考核成绩可以看出,相较于传统的教学方法和考核模式,采用分阶段教学模式后,学生对编译原理课程的总体把握性增强了,普遍反映对知识的掌握更加扎实,实践能力具有较大提高。同时,教师对本门课程的把握、教学过程中的问题有了更清晰的认识,教学效果有很大提高。
3.结语
针对编译原理课程内容特点及考核形式,我们在现实教学过程中,结合具体情况,对教学过程进行了改革和调整,重新组织了教学内容和实践环节,增加MOOC在教学环节中的作用,并上调了实践环节在编译原理课程中的比重,以期学生整体上把握编译原理的理论知识,提高编程能力,激发学生的自学能力和求知欲,更好地培养学生的科研思维。