标题 | 编译原理课程教学改革与实践 |
范文 | 彭源 孙超超 田秀霞 张安勤 摘要:编译原理作为专业核心课程,具有较强的理论性和实践性。该文结合多年的教学经验,以培养学生能力为目标,从合理组织教学内容、突出实践的重要性、更新考核方式等方面给出了一些编译原理教学改革的基本思路。 关键词:编译原理;教学改革;教学实践 中图分类号:G424 文献标识码:A 文章编号:1009-3044(2018)03-0134-02 Abstract:As a professional core course, compiler principles have strong theoretical and practical natures. Based on the teaching experience of many years, this paper puts forward some basic ideas of teaching reform of compiler principles from the aspects of organizing the teaching content reasonably, highlighting the importance of practice and updating the method of examination. Key words: compiler principles;teaching reform; teaching practice 1 概述 《编译原理》是信息安全、网络工程、计算机科学与技术等专业的一门重要专业核心课程,主要介绍编译程序构造的一般原理和基本方法。在理论、技术、方法上对学生提供系统而有效的训练,从而提高学生的素质和能力。课程的特点是理论性和技术性都非常强,综合知识集成度高,因此较难掌握和理解。许多学者对该门课程教学进行了探讨,如文献[1]提出了分阶段、实验报告+答辩的考核方式;文献[2]将ACM在线评测引入了本课程的实践教学;文献[3]在课程中引入了建构主义学习理论;文献[4]设计了一个支持自定义语言的可视化编译教学辅助工具等。 为了更好的提升教学效果,近几年来我们在编译原理课程的教学改革与实践中做了一定的探索,获得了一定的方法,总结了一定的经验,也取得了一些成效。本文介绍我们在课程教学改革和实践中的经验和体会。 2 以“能力导向的教育”为目标指导教学过程 编译原理课程有着较为成熟的理论体系,除算法知识本身外,更蕴含了问题求解的典型思路和方法,因此在课程的教学过程中,不仅要考虑知识的传输,更要考虑对学生能力和素质的培养。授之以鱼,更要授之以渔。 2.1 课程内容作为知识的载体 专业的课程体系是一个整体,课程之间互相关联,如编译程序使用的数据结构和算法是前面“数据结构”、“离散数学”等课程的典型应用。课内所讲的内容也不是孤立的,课程中蕴含的许多软件技术,如介绍的经典语言分析方法和工具,对于设计一些实用的工具和软件,像自然语言理解、网络信息处理、网络协议的分析与实现等都是必备的基础。课程教学不能狭隘的只关注于本课程知识点的讲解,而应从人才培养的角度,承前启后,结合与融入更多相关的内容,从课程特定的知识和算法,引申到普遍适用的知识和算法,引导学生开阔视野,激发其探索兴趣。 2.2 计算思维的能力培养 课程学习的目的并不仅仅是为了构建一个编译器,实际上只有极少数的学生以后会从事编译系统的设计与实现。但编译原理课程作为传统的核心课程,蕴涵了计算机学科中解决问题的思路、抽象问题和解决问题的方法,因此是实施能力培养的最佳载体。 计算思维指运用计算机科学的基础概念去求解问题、设计系统和理解人类的行为,由卡内基梅隆大学的周以真教授于2006年提出。它包含了一系列的计算机科学的思维方法,如递归、抽象和分解、启发式推理等。课程从淡化推导、证明等理论形态的内容,强调编译原理中抽象和设计形态内容的角度出发,教学中注意对算法核心思想的分析,挖掘知识背后的内容,模拟大师们的创新思维,使学生能够掌握其关键,从而培养学生的创新意识和创新能力,训练学生“计算机问题求解”的基本能力,强化其计算思维。学生通过学习不仅可以在系统级的层次上对程序变换和算法有更为深入的理解,更是学到了问题的求解方法和思路。达到不仅学知识、而且培养能力的效果。 3 教学内容组织 编译器是一个完整的体系,在有限的教学时间内不可能事无巨细、面面俱到。因此教学内容的选择是教学中非常重要的一环。笔者在选择教学内容时,主要从以下方面来进行考虑: 1) 作为整个课程理论基础的基本概念、工具和原理,以及具有典型意义、效果好、应用比较广泛的主要编译技术和方法细致深入的进行讨论。 以有限自动机为例,它不仅应用于本课程表示词法规则、识别活前缀等,也是计算机领域中经常用到的概念和工具,因此需详细介绍。讲授的内容应包括有限自动机的确定化、最小化的过程,以及该工具与其他工具如正规文法、正规式的转换方法。 在编译技术方面,如递归下降分析算法、LR分析算法是典型的软件技术,体现了抽象问题、递归解决问题、自动化处理的思路,具有典型的意义,对学生的能力培养具有举足轻重的意义,应详细讲述并在实践中深化理解。而对一些较为陈旧的算法,如算符优先分析,其在现代编译系统中已不再广泛使用,因此可以去掉。 2) 根据学生的认识规律来组织安排教学内容,层次清晰,重点突出,难点分散。 课程开展按照词法分析、语法分析、属性文法和语义分析、中间代码生成、符号表和内存空间组织、优化的主线展开。将编译程序各组成部分的基本功能、逻辑关系、实现思路深入浅出地阐述清楚,不盲目的追求全而深,不过分纠缠于一些繁琐的具体技术细节。强调对编譯原理和技术的宏观理解和掌握,而不是一些微观的算法。如符号表的插入和查找方法,基本的思路在数据结构等课程中已有体现,虽然针对编译器中的符号表,有一些特定的处理算法,但对编译器的整体理解贡献不大,无需多费课时。 以掌握工具、体验思路为主,淡化理论证明过程。如文法、正规式、DFA间等价性的证明就无需强调,只需告诉学生此结论即可。对于LR分析算法系列,LR(0),SLR,LR(1),LALR的分析表构造只是从分析能力和工作量角度考虑,采用了不同的折中策略,思路是一致的。因此在讲授时,以一个算法为主,其他的算法顺带提及,或在课外作为课程内容的延伸。 3) 结合专业,微调教学重点 《编译原理》课程在我校计算机科学与技术、软件工程、网络工程、信息安全等多个专业均有开设,不同专业培养计划不同,教授过程中的侧重点和能力训练方面也应有所区别。如网络工程和软件工程专业为工科专业,与计算机科学与技术和信息安全专业偏理论不同,教学时应注重工程性人才的培养,更加强调算法实践,在实现中更深入理解算法。 教学还应结合专业特点开展。以信息安全专业为例,在开展运行时内存空间的组织这部分的教学内容时,引入了一个缓冲区溢出的例子,该例子在对程序分配的内存空间结构的详细理解基础上,通过精心构造溢出数据的内容,破坏了函数调用后返回的地址,使得程序运行到不期望的代码处。从而引导学生思考程序运行时内存分配可能会存在的安全问题以及延伸思考解决办法。 4 实践是最好的学习方式 学生通过教学过程能够较好地掌握算法原理和思路,但在理论实现算法设计时仍有不知如何下手的困惑。通过长期教学分析,原因在如下两个方面:1.大量的细节问题。例如:词法分析实验中需对超前搜索进行字符回退处理、关键词是在识别为标志符的基础上匹配关键词表来实现、递归下降分析时需将读入的单词设置为全局量等。2.没有见过实际的代码,理论与程序联系不上,心理上有畏难情绪。 学生虽在前续课程中学习与培养了编程能力,但本课程中算法对编程能力的要求更为系统和全面,需要用到多种复杂的数据结构。但随着教学条件和网络沟通渠道的完善,现在的学生可以有更多机会和时间去上机实践,遇到问题也可以通过微信、QQ等实时的获得老师的指导与解惑。学生实际上对自己动手实现算法,甚至是一个完整的编译器是有着更高的渴望的,这就要求课程应当尊重学生发展规律,满足学生自我实现的想法,提升学生的编程能力,引导学生获得成功的体验。 4.1 课程以实践为引导开展算法的讲解 对于每个算法都配备了小型的可实际运行的程序,在讲解算法过程中,就穿插入算法实现代码的讲解。这么做好处有两个:一是让学生看到算法并不是飘在空中的理论,而是实实在在可以实现和运行的,增强了学生实现的信心;二是算法中的一些小细节的处理可以直观的通过代码展示出来,帮助学生开拓思路。 4.2 实验内容前后衔接,鼓励自我探索 将理论课与实验课有机地结合,通过实验课的实践,让学生将理论知识通过实验进行验证并设计实现;反之,在实验中产生的各种问题,通过理论课的讲解分析解决;如此相互促进,不仅加深了理论知识的理解,同时也提高了实际编程能力和学习兴趣。每个实验围绕编译系统中一个独立的模块进行安排,由易到难,逐步深入,在保持每个实验独立性的同时,注意前后承接,以培养学生设计和实现一个小型编译系统的能力。 鼓励学生扩展视野。对于词法分析和语法分析,有LEX和YACC自动生成工具。实验中给出了关于这些自动生成工具的可选实验内容,以熟悉这些工具的部署和使用。实验中还给出了一些探索型的研究内容,如编写文本编辑软件,引导学生将课内的知识应用到其他相关领域。 5 引入“一纸开卷”考核方式 在考试考核方面,考虑到编译系统的算法相对复杂但固定、本门课程的目的是通过算法提高学生分析问题、抽象问题和解决问题的能力,记忆算法本身的步骤不是考核的要点。因此考虑采用“一纸开卷”的形式,即在考试时允许学生最多带一张A4大小的纸进去,上面可以由学生自行组织记录知识要点和内容。具体实施思路如下:考试专用纸于开考前两周发放给学生,每人一张。学生必须在考前填写完整专用纸上的相关栏目,可在专用纸上书写任何内容,可正反面书写,但不能打印、复印,必须由本人手写;学生在考试时可将专用纸带入考场翻阅,但考试中不得与其他同学传递交流,否则以舞弊论处;不能在专用纸上粘贴其他纸张,否则以夹带论处。考场规则和纪律按照闭卷考试执行。考试结束后,考生将专用纸与试卷、答题纸一并上交。以备核查。 通过此种形式,这样既使得学生通过对知识要点的组织巩固了学习效果,又可以引导学生将学习的重点放到对原理的理解上,减轻了对算法步骤本身无意义的记忆(实践设计中随时可查)。 6 总结 课程的开展要符合人才培养的目标,并根据课程特点,合理组织教学内容,突出实践的重要性,并引导学生将精力放在对原理的理解和实践上。近几年的实践证明,我们对《编译原理》教学中的进行的改革和探索取得了一定的成果,进一步提高了教学质量。在培养学生实践能力、计算思维能力等方面取得了一定成效,值得进一步的实践和探索。 参考文献: [1] 丁学雷, 吴春寒, 贺汛. 编译原理课程考法改革探讨[J]. 计算机工程与科学, 2014,36(a02):169-173. [2] 尤枫, 史晟辉. ACM在线评测在编译原理实践教学中的应用探讨[J]. 计算机教育, 2009(20):113-115. [3] 朱文华, 王荣波. 基于建构主义的编译原理实践教学研究[J]. 杭州电子科技大学学报:社会科学版, 2008(4):71-74. [4] 褚文杰, 童蘭轩, 魏玮,等. 支持自定义语言的可视化编译教学辅助工具设计[J]. 计算机应用, 2017,37(s1):331-335. |
随便看 |
|
科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。