试议探析工科生《编译原理》课程教学和实践任务书

更新时间:2024-03-26 点赞:32697 浏览:147174 作者:用户投稿原创标记本站原创

摘要:针对工科生的特点及其培养目标,将《编译原理》课程的教学目标定位于“能灵活应用形式语言和自动机的基础理论来解决计算机工程领域中的相关问题”,并分析和总结了相应的教学手段和实验教学方案及其实践效果。
关键词:编译原理;教学目标;教学方法;实验教学
1674-9324(2013)05-0119-02 一、引言
《编译原理》是大学计算机专业本科教育的一门核心课程,它涉及形式语言、程序设计语言、算法和数据结构、体系结构和软件工程等内容。学生通过该源于:论文格式要求www.618jyw.com
课程的学习,除了应该掌握编译程序的工作原理和有关算法外,还可以增进计算机科学基础理论知识,进一步加深对数据结构和算法等课程的综合理解和灵活应用,以及提高软件开发的能力。但是,由于受到教学时数的限制,要全方位地在这些方面去培养学生,是相当困难的,而是要根据教学对象以及对其专业能力的培养目标,来确定课程的教学内容和相应的教学手段。我们认为:对于理科学生,可偏重于理论研究能力的培养,使学生掌握形式语言与自动机的基本理论和常见算法,为从事计算机理论研究打下坚实的基础;而对于工科学生,可偏重于软件开发能力的培养,提高学生对数据结构和算法知识的综合应用能力,以及程序编制能力。本文针对工科生的特点及其培养目标,对《编译原理》课程的教学目标定位和教学方法进行一些分析和实践总结。

二、教学目标

《编译原理》课程的教学目标一般是使学生掌握形式语言和自动机的基本理论,以及编译程序有关的算法和开发方法。考虑到对工科学生的基本要求是能应用基本理论解决工程实际问题,我们要求学生在能正确理解形式语言和自动机的基础理论基础上,不仅能掌握其在程序设计语言翻译中的应用方法,而且能灵活应用于解决计算机工程领域中其他有关问题,例如:命令行处理器、用户界面等。我们向学生强调,通过学习编译原理这门课程,掌握编译程序的基本原理和有关算法只是一个方面,另外一个很重要的方面是培养应用基本理论来解决实际问题的能力,加强数据结构及其算法的综合应用能力,以及提高编制大程序的能力。在教学内容安排上,我们把重点放在词法分析、语法分析、语法制导翻译、符号表和中间代码生成上,而对代码优化、目标代码生成、寄存器分配等内容只作概要性介绍。

三、教学方法

(一)化抽象为具体

《编译原理》课程的内容非常抽象,大多数学生在学习过程中,会对其抽象的术语和符号、以及枯燥的形式化推导过程感到困惑,并渐渐失去学习的兴趣和热情。如果能从具体的例子出发,再抽象出基本概念,就能使学生对抽象的概念有更深刻的理解。
例如,“LR(0)分析”是《编译原理》课程中非常精彩的一节内容,但由于涉及“活前缀”、“LR(0)项目”等许多抽象的术语,学生往往难以理解,特别对“构造识别活前缀的有限自动机”的思想内涵的理解难以透彻。我们在讲解时,不是直接给出这些术语的定义,而是从一个LR分析的实例出发,让学生观察LR分析过程中分析栈内容的变化及其特征,引导学生发现“分析栈中的符号串有三种格局:不含有句柄的任何符号;含有句柄的部分符号;正好含有句柄的全部符号。”这时,可向学生引入“活前缀”和“LR(0)项目”等术语的含义:“活前缀”就是LR分析过程中分析栈中形成的一个符号串,而“LR(0)项目”就是刻画这个符号串的格局。最后给出“活前缀”和“LR(0)项目”的形式化定义。这种讲法,不仅可以使学生对这些抽象概念有具体的感性认识,从而更容易地去理解相应的形式化定义,而且可以培养学生逐步适应形式化描述。接着在讲解“构造识别活前缀的有限自动机”时,先让学生回答“使用LR方法,用给定的一个文法去分析一个符号串时,会有哪些可能的LR(0)项目出现,并且这些LR(0)项目是如何迁移的?”,进一步启发学生:“一个文法的任何一个句型,它的句柄只可能是这个文法的某个产生式的右部。”。这样,学生就能较好地理解如何从一个文法求出它的所有LR(0)项目及其迁移关系,进而也能较好地掌握构造识别活前缀的有限自动机的方法。

(二)开发和使用多媒体教学课件,采取直观形象的教学方式

对《编译原理》课程中的一些抽象内容,除了采用“化抽象为具体”的方法外,我们还开发了一组多媒体教学课件,用于动态演示一些较为复杂和难以理解的编译过程。例如,在用属性文法描述一个语法制导翻译过程的教学中,学生很难从一个给定的属性文法想象出一个具体的翻译过程。要让他们用一个属性文法来定义一个语法制导的翻译过程,那就更难了。所以,我们针对教材中给出的每个程序结构的语法制导翻译过程的属性文法,分别结合一个具体的例子制作了多媒体课件,用于动态演示在语法制导翻译的每一步过程中,是如何使用与产生式相关联的属性计算规则来进行翻译的。图1(a)是“控制语句中布尔表达式的翻译”的多媒体课件的一个画面,它同时显示了某步翻译过程所依附的产生式、所使用的属性计算规则,以及引起的符号栈和属性栈的相应变化和产生的翻译结果。通过使用这一多媒体课件,学生对于属性文法的理解更加透彻了,应用属性文法的兴趣和能力也有了很大的提高,许多同学都在相关的实验中自觉地用上了属性文法,获得了更好的实验效果。
我们还对教材中的某些算法的冗长文字描述,制作了多媒体课件,以更加直观、生动的方式表现这些内容。例如,教材中有关利用DAG进行四元式优化的算法描述,文字很长,而且含有很多嵌套的选择结构,在课堂上很难直接展现,同学们在课后也没有很好的把它完整地看下来。所以,我们将这段文字描述改成流程图的形式,并结合具体的例子,借助多媒体课件展现了动态的执行过程,如图1(b)所示。

(三)优化实验教学方案,增强实验教学效果

实验课的教学目的主要有两个:一是巩固和强化主要的编译理论和方法;二是熟悉软件的开发方法,提高软件开发的能力。为了取得较好的实验教学效果,我们将实验教学分成两个阶段加以实施。第一阶段以巩固主要的编译理论和方法为目的,安排了词法分析、递归子程序法语法分析、LR(0)法语法分析、以及语义分析和中间代码生成等四个实验,并且与课堂理论教学保持同步。为了激发同学的学习兴趣和热情,这四个实验的设计基于如下的原则:实验要编译的语言以小为宜,但能体现编译原理的核心思想;编制实验程序不必从零开始,但能涉及编译程序的关键代码。我们设计了图2所示的语言,作为这四个实验所用的语言,并给出了这个语言编译程序的框架,但隐去了体现编译原理核心思想的关键代码,要求学生在实验中将其编写完整。在对近几届学生的教学实践中,我们发现这一阶段的实验教学方式能增强学生的学习兴趣和信心,消除了许多学生在实验课初期对《编译原理》课程的恐惧感,避免了学生在实验室无所适从、无从下手、在网上盲目搜索类似程序的状况出现。
第二阶段以加强编译原理和方法的综合应用能力和软件开发能力为目的。我们安排了两个综合实验:一是在第一阶段的语言中增加“*”、“/”两个运算符;二是增加一条“repeat...until”语句。这两个实验都要涉及扩充原有的文法、修改原先的词法分析程序、语法分析程序和语义分析程序。这就可提高学生对编译程序总体架构的认识和理解,增强对编译原理和方法的综合应用能力,对“增量式软件开发方法”形成一个初步的认识。
四、结语
本文是对上海市教委重点课程《编译原理》建设项目的部分工作成果的总结。近些年,不少人对《编译原理》在计算机专业课程中的地位和作用有不同的看法,认为绝大多数学生在大学毕业后,很少有机会从事编译程序的研究和开发工作,提出不将《编译原理》作为计算机专业的必修课程。我们认为,《编译原理》集理论与实践于一身,只要我们确立合理的教学目标,采用有效的教学手段和方法,它对于加强学生对基础理论的综合应用能力,增强学生的软件开发能力是一把神兵利器。我们的教学实践印证了我们的观点,近三年学生对我们开设的《编译原理》课程的评分分别为9

4.2,9

5.1和97.4。

参考文献: ACM/I摘自:写论文www.618jyw.com
EEE-CS.Computer Science Curriculum 2008[R].
http://www.acm.org/education/curricula/ComputerScience2008.pdf.
张素琴,吕映芝,蒋维杜,戴桂兰.编译原理[M].北京:清华大学出版社,2009.
相关文章
推荐阅读

 发表评论

共有3000条评论 快来参与吧~