【摘 要】《编译原理》课程是计算机专业的核心课程之一,该课程主要讲解编译程序的构造和功能。本文主要探讨通过多种教学方法,激发学生的积极性,形象化抽象理论,改善课程的课堂教学效果,积极探讨实践改革,以实践促理论,在掌握理论知识的同时,通过实践,培养学生的软件开发、设计能力,提高学生的综合素质。
【关键词】编译技术;教学方法;实践改革
1 课程的性质和定位
从1946年第一台计算机产生至今,计算机的发展仅仅过去了不到70年的时间,从最初单一的仅由0和1组成的机器语言发展到现在的多种高级语言,编译技术起了决定性的作用,正是编译技术迅速、成熟的发展,人们才能摆脱繁琐的机器语言,走进和自然语言相近的高级语言时代。
《编译原理》课程主要是研究基于形式语言理论的编译技术,是计算机专业的专业核心课程之一,课程主要介绍编译程序是如何将高级语言程序翻译成机器能够执行的低级语言程序的工作原理和方法,编译程序经历的各个阶段,以及这些阶段的功能和构造。《编译原理》课程的先行课程主要有数据结构、离散数学、计算机组成原理、线性代数和程序设计基础等,该课程的目的是在于系统地向学生讲述编译系统的结构、工作流程以及编译程序各组成部分的设计原理和实现技术,使学生通过本课程的学习,既掌握编译理论和方法方面的基本知识,同时也获得设计、分析和移植编译程序方面的初步能力,进而提高学生设计多种软件的素质。[1]
《编译原理》课程是计算机专业中公认的难教难学课,课程的理论性强,抽象性高,但是鉴于其在计算机中起的决定性作用,各个高校的计算机专业都将其列为非常重要的专业课,而且在研究生期间还继续开设该课程。课程不但涉及了形式语言理论、自动机、编译技术等抽象的内容,而且也是程序设计、算法、数据结构、离散数学等知识的综合体现。课程帮助学生了解计算机的工作过程,认识计算机信息处理的实质,而且其中的一些算法也很经典,通过《编译原理》课程的学习,可以提高学生对计算机系统的总体认识,对理解算法、程序设计思想和编写更高效的代码具有重要的影响。
2 采用多种方式,注重理论教学
《编译原理》课程是一门理论性和技术性都非常强的课程,内容丰富而且抽象,而且不像一些应用类课程,除非是专业从事编译技术的人员,否则对于学生而言无实际应用价值,缺乏学习的积极性,而且学生在学习的过程中,容易忽略各章之间的连贯性,仅仅是掌握了一些独立的算法,分离的知识点,抓不住重点,分不清主次。要想取得良好的教学效果,首先要让学生认识到课程的重要性,再配合以合理的教学方法和手段。因此,在《编译原理》课程的教学中,可以采取多种教学方式和教学模式,较好的完成教学效果。
(1)讲授式教学法:课程理论性很强很多多,讲授法就是首选的最直观的的方法。但编译技术中涉及了大量的抽象概念,所以填鸭式的讲授法不能取得好的教学效果。对于抽象的理论,要尽量采用形象、生动、直观、具体的讲授方式,充分调动学生的积极性和兴趣,注重知识点的连贯和系统性,引导学生的思维,注重学生信息反馈,教学相长。比如说,讲到编译系统的组成和功能,为了将之后的词法分析、语法分析、语义分析、代码优化、目标代码生成等阶段连贯起来,可以在讲授的过程中制作一些动画,将各个阶段连贯起来。或者将编译过程和英翻汉的过程做对比讲解,英翻汉首先要搞清楚各个单词的含义,也就是词法分析过程,然后将句子的结构划分清楚,就是语法分析,接下来给出句子的意思,即语义分析,然后注意前后顺序,将句子的中文含义给的更贴合中文习惯,即代码优化,最后给出完整、准确的中文,就是目标代码生成了。这样的讲授方式,学生更能够接受,而且通过例子,学生充分理解了什么是编译过程。
(2)启发式教学法:这种教学方法主要是教师根据教学任务和学生的实际情况,以启发学生思考为核心,调动学生的主动性和积极性,促进学生主动学习。对于课程中出现的大量算法,可以采用这种教学方式,比如讲到文法的二义性,可以不要直接讲授定义,可以给出一个二义性文法,一个同样的句型,让学生自己推导,画出语法树,由于推导习惯和分析角度的问题,肯定会有不同结果,让学生自己分析,为什么会产生不同结果,产生不同结果会对句型分析造成的影响等等,然后再引出二义性的概念,通过学生自己的分析,得出了和二义性相关的结论,不但提高了学生的积极性,还加深了对抽象理论的理解。
(3)案例教学法:采用具体的案例,在讲解案例的过程中,将知识点贯穿其中,将抽象的问题具体化。案例教学主要是鼓励学生主动思考,变注重知识为注重能力,重视学生和老师、学生和学生之间的双向交流。在编译原理的学习过程中,预测分析是一种很重要的分析技术,但是学生常常将理论和应用联系不起来。因此,在教学过程中,可以先给出一个具体的预测分析表,根据这个分析表做相应的语法分析,也就是先给出预测分析表的应用。然后根据文法,讨论如何产生该分析表。通过选择和教学内容相符的案例,配以形象、直观、生动的授课形式,易于学生接受和理解理论基础,并将理论应用与实践中,进一步深化和巩固专业知识。
(4)对比教学法:通过对一些知识点的比较,寻找知识点间的异同。这种方法促使学生多元化解读,多角度思考,激发讨论,区分异同,知识结构清晰,学生就能更好的理解和掌握,不会造成知识点混乱。比如讲到有穷状态自动机中,确定(DFA)和非确定(NFA)两种时,先讲DFA的生成和运行,然后给一个NFA的文法,让学生构造FA,然后运行,查看结果,总结两种FA的不同,阐述不同的FA运行时不同的结果,然后在文法中查找根源,总结为何文法会产生两种不同的FA,从而,掌握什么样的文法会产生什么样的FA,以及两种FA的异同。通过对比教学,学生能够充分理解两个相近的知识点,而且不会产生混淆。
3 积极推进实验改革
《编译原理》课程不但要求学生掌握编译系统的结构和工作流程,还要培养学生设计编译程序的基本能力,而且其中还有许多的经典算法,通过实践,不但能够加深学生对抽象理论的理解,还能提高学生分析、设计软件的能力,培养学生的专业能力,提高学生的专业素质。
在实践过程中,大部分学校的实践环节都存在或多或少的问题。一些学校不重视实践课程,甚至没有实践环节,认为现有的编译系统很成熟,不存在再开发的问题,而且以后从事专业的编译技术的人很少,没必要开设。还有一些实验设计不合理,只是将一个一个独立的算法给出,让学生编写一些小型的程序,不能够体现知识的系统性和连贯性。
针对以上的情况,要进行实践改革,首先要重视实践环节的教学,认清通过实践不但可以加深学生对理论的理解,还可以让学生更深层次的了解编译程序的构造和设计,关键是培养和提高了学生的编程能力,培养了学生分析软件和设计软件的能力。其次要合理的设计实验内容和实验方案。在设计实验的过程中,要注重知识的连贯性,好多学生反映不能将编译原理中的各个模块统一在一起,掌握的知识仍然是分离的。在实验中注重连贯性,就可以解决这一问题。例如在词法分析模块,第一部分是先将文法以合理的结构存放在计算机内,然后根据文法生成相应的FA,如果是NFA要将其确定化,转为DFA。第二部分就可以运行FA了,根据运行的结果,识别出一个一个的单词。第三部分,将识别出的单词构造成属性字序列。通过这三部分的实验,不但完成了词法分析程序的构造,也将理论中讲解的各个部分联系起来,形成知识体系,帮助学生理解和掌握了词法分析的功能和程序构造。还要注意合理的安排实验时间,编译原理不是每节课都有实践部分,有些学校统一的将实践安排在课程最后,这样可能会造成理论和实践的脱节。最好是能够在一个模块结束后,该模块的相关实践随之完成。这样能够让实践和理论相互促进,强调知识点之间的逻辑联系,帮助学生更好的掌握知识。最后要有合理的评价机制,将实践部分放入考核,每次实践要求学生给出实现的代码,并提交相应的文档,教师根据代码、结果和文档给出实践成绩,将其列入最后的总评成绩,从而激发学生的主动性和积极性。通过实验教学改革, 不但巩固了学生的理论知识, 而且引导他们将理论应用于实践, 同时也有助于学生自身编程水平和算法设计能力的提高, 为下一步的专业学习打下坚实的基础。[2]
4 总结
《编译原理》课程在培养学生的抽象思维、逻辑思维和编程能力方面都起着积极促进的作用,要抓住该课程的重点,分清主次,将知识点连贯起来,充分采用多种教学模式和方法将抽象的内容形式化,通过实践再将理论知识应用于实践,激发学生的积极性,促进学生自主学习,让学生掌握知识和技能,学会思考,培养创新精神,提高对计算机系统的总体认识。
【参考文献】
[1]吴其林.“编译原理”课程的教学探讨[J].电脑知识与技术,2012,1.
[2]孟丹.编译原理实验教学分层案例化改革探索[C]//北京高教学会实验室工作研究会,2010年学术研讨会论文集.2010,12.
[3]崔少国.“编译原理”课程教学方法的探索与实践[J].福建电脑,2012,1.
[4]张艳.“编译原理”课程建设的新思考[J].中国电力教育,2012,8.
[责任编辑:薛俊歌]
相关热词搜索: 编译 原理 思考 课程 教学