【摘要】《编译原理》课程是计算机科学与技术专业中的一门核心业课程,课程内容形式抽象,关联学科知识比较多,而且各部分之间的逻辑联系紧密,讲课与学习难度都较大,本文就课程的教学方法总结了一些经验,希望对课程的教学发展有所帮助。
【关键词】编译原理 教学方法
《编译原理》课程是计算机科学与技术专业中的一门重要的专业课程。传统的教学方法主要突出编译原理课程中书本知识的传授,对于编译技术的思想介绍不是很突出,从而使得学生认为本课程对其今后的发展没有什么作用,而忽视了课程开设的目的。我认为,《编译原理》课程内容虽然多,但各部分间逻辑联系很强。课程大致可分为三个部分:第一部分是程序设计语言基本概念、形式语言与自动机理论和编译程序的构造原理,使学生了解编译程序在程序设计语言系统中的重要地位;第二部分为形式语言与有穷自动机理论,为编译程序提供了完善的理论基础;第三部分深入透析编译程序的构造结构,突出编译程序各部分之间的逻辑关系,使学生了解编译程序的总体构造过程和方法,能够掌握基本的构造原理与技术。《编译原理》课程具有较强的理论性和实践性,本文将从教学目标、教学组织以及典型教学方法三个方面来探讨如何有效实施课程教学。
一、教学目标
以工科为主的计算机科学与技术专业中的绝大部分毕业生都不会去设计编译器或者从事相关工作。但《编译原理》课程中蕴含的知识内涵非常丰富,课程中体现出的形式化方法和抽象的逻辑思维能力是计算机科学与技术专业学科所要求的重要的“计算机思维能力”。能力的培养绝不是通过一两门课程的学习可以实现的,尤其这种抽象思维能力的培养,需要长期不断地学习和积累来完成。本门课程就是这个体系中的重要组成部分。就如何突出该课程的实践性和必要性,让学生掌握和了解编译程序的基本理论和基本构造方法,还要兼顾大多数学生的需求,成为制定《编译原理》课程教学目标的主要内容。所以,我对学生的要求是:对课程整体应当有较为全面的了解和认识,熟悉编译程序的构造过程和形式语言中的基本概念和基本理论。理解编译程序构造的一些基本算法和基本技术。能够使用有穷自动机的理论和算法,解决常见离散事件问题。
二、教学组织
教师的职责就是讲授知识,陈述的内容要便于学生理解与接受,同时还要提高学生分析问题的能力,当然也不能忽视学生应用相应方法的能力。在《编译原理》课程的教学组织中,应当从以下几个方面组织和安排教学工作:
(1)备课。《编译原理》课程的一个特点是逻辑性很强,所以该课程在准备的时候,可能比其他课程需要花费更多的时间,需要将课程的整体逻辑理顺,在一个完整的课程框架内合理安排各个分支逻辑的内容,孰轻孰重,就一目了然了。所以该课程的前期准备阶段非常重要,需要我对课程的内容有比较深层的理解和认识,设计一个实验系统,以增加实践的效果,提高课堂中的实践性讲解,做到开课之前就对课程有一个清晰的逻辑思路。
(2)讲课内容安排。《编译原理》课程内容覆盖广泛,涉及到很多相关学科的知识,如高级语言、离散数学、数据结构等专业基础课程,就目前教学的基本学时数来说,基本无法满足教材中所有内容的讲授,教师可以根据学生的理解情况对关的内容适当取舍。对一般性的知识可以跳过,比如高级语言的概念;对理论性很强的概念可以不作要求;对已学过的知识可以略过,如符号表、存储管理等。在有限的课时内充分安排教学内容,是《编译原理》课程中组织教学的一个关键环节。对于有穷自动机的工作原理和实现以及与正则式的关系,可以詳细讨论,并可以作一定的衍生,特别是有穷自动机的理论和应用,可以留给学生一些思维的空间。总之,课堂内容的安排组织在一定程度上可以激发学生学习探索的积极性和创造性。
(3)习题课讨论课。《编译原理》课程理论性很强,有大量的基本概念和算法,有些概念和算法在理解上有一定的难度,为了便于学生理解相关的知识点,在教学组织中应当安排一定数量的习题课,帮助学生加深对基本理论和常用算法的理解,力争达到灵活应用的目的。比如在讲解文法和语言一章中,有许多形式化的概念:文法、推导、语言及Chomsky文法的分类等,对第一次接触到这样的概念的学生来说,理解这些概念的实质及它们在课程中的作用和地位是比较含糊不清的,往往会使一些学生失去对此课程的学习积极性。
(4)实验实习安排。《编译原理》课程是一门理论性很强的课程,主要表现在形式化语言的理论基础概念贯穿在完整的课程知识中,尤其是语法制导的翻译和以形式化的属性文法为基础的翻译过程,大大地增加了课程的难度,代码优化及优化中的数据流方程又为整个课程添加理论难度,就是这样的一门理论型课程,却有着同其他应用型课程一样重要的实践性,甚至其实践的意义更为重要。课程的特点决定了课程中的实验实习的重要地位。笔者要求学生完成TinyC语言的编译程序,使得学生通过实践更为深入地理解课程中的理论知识与方法。
(5)典型教学方法。《编译原理》课程的教学难度比较大,既要让学生理解编译原理的基本理论和方法,还要学生能够掌握一些解决问题的方法和思路。《编译原理》课程的教学方法很多,笔者在总结自身教学活动中,觉得有以下一些方法和思路可供探讨:图示法。运用状态转换图形象直观,对一些抽象问题的解决有很好的帮助。这也是对问题抽象分析的重要体现。有穷状态自动机在解决一些离散状态问题中是一个十分重要的思维模型,如果能够将问题的分析和抽象通过自动机的模型反映出来,那么问题的解决将变得十分的简单和可靠。枚举、归类法。列出集合中的部分元素,寻找元素之间的内在联系,构造相应的规则,这是形式化方法和抽象思维能力的具体体现。从元素的构成形态出发,归纳出其一般形式,需要有丰富的想象力和创造能力,再加上对形式工具的使用,能够构造出形式多样的表示方法。
在计算机专业如何有效开展《编译原理》课程教学与学习是一项值得研究的问题,作为教师的我需要与时俱进,适时考虑相应教学方法和内容的改革。这里我提出和总结了一些教学方法和手段,在实际教学过程中取得了良好效果。但《编译原理》课程的教学方法和内容改革仍然需要我继续付出大量辛勤劳动,以便取得好的教学效果。
参考文献:
[1]陈火旺,刘春林,谭庆平等.程序设计语言编译原理[M].北京:国防工业出版社,2000.
[2]吕映芝,张素琴,蒋维杜.编译原理M].北京:清华大学出版社,1998.