您现在正在浏览:首页 > 职教文章 > 职教论文 > 《编译原理》教学过程中的思考与探讨

《编译原理》教学过程中的思考与探讨

日期: 2010-5-11 9:27:41 浏览: 11 来源: 学海网收集整理 作者: 王丽丽

【摘 要】本文对《编译原理》教学过程中出现的一系列问题进行了分析,并根据实践,对编译原理课程的课堂教学和实验教学进行了思考和探索。
  【关键词】编译原理 教学过程 课堂教学 实验教学
  
  一、前言
  
  《编译原理》是高等院校本科教育计算机专业中一门非常有用的核心课程之一,它对培养学生的抽象思维能力、独立解决复杂问题的能力以及增强编写和调试程序的能力等方面起着很大作用。但是,接触过编译原理的学生和老师都知道《编译原理》是一门难学难教的课程。这门课程的内容比较抽象,理论性很强,不容易理解,而且对实践也有较高的要求。学生普遍认为编译原理不实用,因而也就缺乏了学习的热情与积极性,存在畏难情绪。

学海网
如何在教学过程中激发学生的兴趣,并解决教学中出现的一些问题,我觉得可以从以下几个方面去思考与探讨。
  
  二、认清编译原理,明确学习意义,激发学生的热情
  
  1.帮助学生认清编译原理的作用和地位
  在教学过程中,很多学生都有这样的疑问:编译原理学的是什么?学习它有什么作用?
  我们知道,目前的计算机能执行的都是非常低级的机器语言,一个用高级语言编写的源程序最终如何在计算机上执行呢?这就是编译原理要解决的问题。概括地说,编译原理课程介绍编译器构造的一般原理、基本设计方法和主要实现技术。编译原理课程通过编译器的各个组成部分来解释高级语言编写的源程序如何翻译成计算机能够执行的机器语言。这个翻译的过程涉及程序设计语言、机器结构、形式语言理论、类型论、算法和软件工程等方面的知识。例如,对软件工程来说,编译程序是一个很好的实例(基本设计、模块划分、基于事件驱动的编程等),编译原理课程所介绍的概念和技术可以用到一般的软件设计中。
  事实上,通过编译原理的学习,有助于学生快速理解、定位和解决在程序编译、测试与运行中出现的问题。另外,编译原理的学习对熟悉编译过程、掌握计算机高级语言的生成机制、理解具体程序的运行状态起着关键作用。
  2.帮助学生克服畏难心理,提高学生的兴趣
  在教学的过程中,很多学生认为他们今后的工作不会涉及到编译原理的理论和技术,编译原理没有实际的用处,学习起来就非常的枯燥无味。其实这是对编译原理的一种错误认识。该课程中的原理除了可以用于分析编译器以外,还对诸如人工智能、并行处理技术等课程的学习具有指导作用。例如,利用编译原理的理论设计出“翻译风”这样的软件。与此同时编译原理课程可以帮助学生更进一步地理解和综合应用离散数学、高级语言、数据结构、汇编语言等专业基础课程的知识。例如,编译程序应用了多种数据结构,在词法分析阶段使用状态转换图来识别各种单词;在语法分析中使用语法树等来进行语法分析;在存储分配时使用栈式结构和堆式结构进行存储空间的分配。本门课程学习对其它课程的学习和今后很多领域的理论研究具有深远的意义,如计算机软件技术领域、计算机系统结构领域、人工智能系统的机器学习领域、并行处理技术等领域。
  鉴于“编译原理”这门专业课程的特点,在教学过程中端正学生的认识,帮助学生克服畏难情绪,肯定学生所具有的能力,让学生明白以他们掌握的计算机知识,有足够的能力学好《编译原理》这门课程。鼓励他们同样可以利用学到的理论技术设计出类似“翻译风”这样的软件,帮助学生建立信心,发挥他们的才智,提高学习的热情。
  
  三、把握课堂教学内容
  
  1.整体把握一条主线,领会每个阶段的精髓,各个击破
  编译器(编译程序)可以分为词法分析、语法分析、语义分析、中间代码生成,代码优化和目标代码生成这六个阶段,每个阶段还会伴有符号表管理和出错管理。在第一章编译器概述中就把编译器化分成这六个阶段,同时还简要的描述了这六个阶段各自的任务,这是贯穿整个课程的一个主线,整个课程就是按这六个阶段组织进行的。所以一开始让学生把握这条主线,对课程有一个总体的把握,理解编译的过程。
  当学生从整体上理解编译器的结构之后,然后分章节对各个部分进行细致地教学。按照编译过程的划分,把课程分为六章内容,每章都有它的精髓所在,只要掌握了每章的精髓,就能掌握编译的整个过程。词法分析的精髓主要是词法分析的构造、有限自动机理论的应用;语法分析的精髓主要是语法分析的两种方法——自上而下分析法和自下而上分析法;语义分析主要是属性文法、语法制导定义以及翻译方案;中间代码主要描述了中间代码常见的几种表示形式、各种语法结构如何进行语法制导翻译形成中间代码;代码优化主要围绕如何从时间和空间上进行优化,尽可能提高执行的效率展开,分别讲述了局部优化和循环优化;目标代码生成主要是目标代码生成算法的实现及寄存器的分配。这六个部分相辅相成,互有联系,掌握每个阶段的精髓,各个击破,这样学生比较容易理解和接受。
  2.课堂讨论式
  在《编译原理》的教学过程中,课堂上不能采取“灌输式”教学,上面老师讲解的充满激情,下面学生听得昏昏欲睡,随着时间的积累,学生不理解的知识越来越多,就会慢慢失去学习的兴趣。所以,要注重与学生的交流,在课堂上可以采取集体讨论和分析的方法,让学生说出自己在学习的过程遇到的问题以及解决问题的方法。例如,数据对齐是由硬件特点造成的对存储分配的一点约束,这个概念有的教材并没有提到或者只是一带而过。针对数据对齐问题,有一个C语言的例子:
  typedef struct a
  { char cl ;
  long i;
  char c2;
  double f;
  }a ;
  typedef struct_b
  { char cl;
  char c2;
  long i;
  double f;
  )b ;
  main ( )
  { printf( “Sizeof double,long,char= %d, %d , %d\\n”,sizeof(double) , siz eof( long),sizeof(char));
  printf (“ Sizeof a ,b =%d, %d\\n,sizeof(a), sizeof(b)) ;
  }
  在X86/Linux机器上,该程序的运行的结果是:
  Size of double,long,char= 8,4,1
  Size of a, b = 20,16
  在SPARC/Solaris工作站上,该程序的运行结果是:
  Sizeof double,long,char=8,4 ,1
  Sizeof a,b = 24,16
  在这个例子中,结构体类型a和b的域名及类型都一样,仅次序不同,但是它们在同一机器上的存储分配字节数不一样,在不同机器上的情况也不一样。有的学生就会问为什么会要考虑数据对齐的问题?这时候,老师可以指导学生课后搜集相关资料,然后进行课堂讨论分析。
  其实,数据对齐对用C语言编程、对构造编译器、对C程序的移植来说都是重要的。利用这样的例子考察实际编译器存储分配的对齐情况,让学生明白存储分配时要考虑到数据对齐以及数据对齐的作用。让学生自己去探索,不仅明白了概念的重要性,增强了学生的理解和应用能力,拓宽了知识面,而且培养了学生思考问题和解决问题的能力,培养了科学严谨的思维能力。
学海网
  四、精心设计实验教学内容
  
  《编译原理》对实践的要求比较高,所以实验课是培养学生实践能力的重要环节,是巩固和验证所学理论知识,培养学生分析问题、解决问题能力的重要环节。但是在教学的过程中,绝大部分学生无法完成编译原理的实验。即使告诉学生实验的思路和算法,有的还是不知如何入手,整个实验的效果很差。为了能达到好的实验效果,极大地促进学生对原理的理解,可以从以下几个方面思考:
  1.认真设计合适的实验内容
  编译技术中有很多经典的算法,由于课时有限,可以选择具有代表性的典型算法来实现。根据课程的特点和大纲的要求,可以设置三个实验内容:词法分析器的设计、递归下降分析器的设计、LR(0)分析器的设计。很多教材中都有相关的设计算法和程序代码片断,这样降低了《编译原理》实验课的难度。另外,根据老师可以根据的实验效果对实验内容再做适当调整。
  2.采用适当的实验形式
  根据课程的重难点和实验覆盖的知识点不同,将《编译原理》的实验内容分为两大部分:独立实验和分组实验。
  在实验的过程中,将词法分析器的设计和递归下降分析器的设计作为独立的实验,由每一个学生自己独立完成,而将LR(0)分析器的设计作为分组实验。分组实验以学生自由组合的小组形式为单位进行,一般一个小组由3至4名学生组成,并推荐一人作为组长,负责师生之间的联系,采用分组实验的形式锻炼了团队分工协作的能力,培养了团队精神。
  3.教师的耐心指导
  教师在实验过程中的指导也很重要。教师对学生的指导要细心认真,让学生记录下每次实验的输入和输出形式,实现理论与实践的结合,注意调动学生的积极性,引导他们独立思考、独立完成;另外,更要加强实验结果的监督,提高实验教学质量。
  
  五、结束语
  
  以上结合自己的教学实际,在编译原理的课堂教学和实验教学中的一些思考。事实上学好编译原理课程需要老师和学生双方的共同努力,需要我们共同不断的思考、探索、实践和积累。
  
  参考文献:
  [1]张昱,陈意云,郑启龙.编译原理课程的教学方法和教材建设[J].中国大学教学,2005,(7):61-62.
  [2]余玛俐,张海.《编译原理》教学方法探析[J].九江学院学报(自然科学版),2005,(4):114-118.
  [3]陈意云,张昱.编译原理[M].高等教育出版社,2003.
  [4]陈意云,张昱.编译原理习题精选[M].中国科学技术大学出版社,2002.
  [5]侯惠芳.《编译原理》课程教改探讨[J].科技信息,2007,(17):152.193.
学海网

返回顶部