任务驱动的编译原理课程教学方案研究

时间:2022-06-11 07:42:02

任务驱动的编译原理课程教学方案研究

摘要:针对编译原理课程教学中存在内容抽象、算法复杂、难于理解等问题,本文在分析国内学者的研究对策基础上,提出任务驱动的编译原理课程教学方案,结合河南科技大学计算机专业编译原理课程教学的实际,在实验项目的设计、教学计划的制定、辅导材料的编写、网络资源信息平台的构建、教学资料的开发等方面进行改革,取得了令学生满意的教学效果。

关键词:任务驱动;编译原理;教学方案;教学改革

编译原理是计算机软件及其相关专业一门重要的核心课程,它能使读者对程序设计语言的设计和实现有深刻的理解,对和程序设计语言有关的理论有所了解,对宏观上把握程序设计语言,能起到奠基作用,有助于读者快速理解、定位和解决在程序调试与运行中出现的问题。对软件工程来说,编译器是一个很好的实例(基本设计、模块划分、基于事件驱动的编程等),它所涉及的概念和技术能应用到一般的软件设计之中。另外,编译技术在软件安全、程序理解和软件逆向工程等方面有着广泛的应用。因此,怎样让学生学好编译原理课程是每一位老师必须思考的问题。

1编译原理课程教学中存在的问题及探索

编译原理课程内容具有较强的理论性和实践性,学生在学习过程中感到内容抽象、算法复杂、难于理解,因此,编译原理被普遍看做是计算机专业本科教学中最难讲解、最难学习的课程之一。具体原因如下:(1)在现行的教材中,大部分都是从编译的基本理论与思想来讲述的,学生感觉太抽象;(2)对于学生来说,本课程涉及的理论知识抽象、难懂,如形式语言和自动机理论、语法制导理论等;(3)本课程包含很多算法,大的有LL(1)分析算法和各种LR(1)分析算法等,小的有DFA化简算法、计算FIRST集合和FOLLOW集合的算法、各种数据流方程的迭代求解算法等。学生想深刻理解算法的思想很困难;(4)编译程序规模大,不可能在一门课的时间内把所有的细节都讲清楚,学生对编译程序各逻辑部分之间的接口和一些算法的实现模糊不清;(5)新形势下学生的学习热情不高,畏难情绪严重,在学习上的钻劲和毅力不够。

针对这些情况,国内从事编译原理课程教学的老师对此进行了大量的理论教学与实践教学的探索。如张昱、陈意云等从中国科技大学教学实际说明了教材建设的重要性[1],给出了编译原理课程实践教学的建议[2],并对本科生应掌握的编译原理教学内容进行了讨论[3];何炎祥、伍春香给出了编译原理课程分解式和内容分解式的建议[4];李冬梅、施海虎介绍了提高学生学习编译原理课程兴趣的对策[5]。这些方法和实践对于国内的编译原理课程教学起到了极大的推动作用,但它们都无法摆脱先讲授理论,再进行实验验证的传统模式。为了提高学生学习编译原理课程的积极性和主动性,帮助学生把学习编译原理的理论知识与开发编译器结合起来,并提高运用编译技术和有关形式语言理论和方法解决实际问题的能力,河南科技大学在2009年9月从2007级计算机科学与技术专业部分学生中开始采用任务驱动的学习方法,即整个

基金项目:河南省基础与前沿技术研究计划项目(092300410234);河南科技大学教育教学改革项目(2009Y-016)。

作者简介:张海朝(1963-),男,副教授,硕士,研究方向为数字图像处理;孙士保(1970-),男,副教授,博士,研究方向为智能信息处理、数字图像处理。

编译原理课程教学就是开发一个简单语言编译器的过程,即明确编译器的开发分为五个阶段:词法分析、语法分析、语义分析与中间代码生成、代码优化和目标代码生成,在每一个阶段,首先介绍实验任务,再给学生们讲解实现这些实验任务必须具备的基本编译知识,让学生们带着实验任务学习,并在规定的时间内完成这一阶段的实验,它与张晶等介绍的任务驱动的编译原理教学[6]有着本质的区别,文献[6]实质上还是一个分模块的教学方法,而我们的教学方法是为了开发一个简单语言的编译器,反过来学习理论的过程,即边实践边理论的过程。这样做的目的是对编译原理课程教学内容进行系统的规划、教学方法进行全面的改革,以期提高编译原理的教学效果。

2任务驱动的编译原理课程教学方案研究

2.1本项研究的意义

编译技术是计算机语言发展的支柱,也是计算机科学中发展最迅速、最成熟的一个分支,编译原理课程在计算机学科的教学体系中占有重要的地位。本项研究主要将重理论的教学模式向重实践的教学模式转变,通过对编译原理教学内容的规划,让整个授课过程变成一个具体的编译器实现的过程,也就是词法分析器实现、语法分析器实现、语义分析与中间代码生成器实现、代码优化器实现和代码生成器实现的过程。编译器实现过程中的每一阶段都是一个具体的任务,为了完成这些任务再反过来学习书本上的理论知识,真正让学生实现学以致用,理论与实践相结合。教学方法上采用以完成具体任务为目标的课堂教学、课堂讨论和多媒体教学等多种形式,提高学生学习的积极性和主动性。这样学生可以亲手设计一个简单的高级语言程序编译器,从而更加深刻理解词法分析器、语法分析器、语义分析与中间代码生成器、代码优化器和代码生成器的构造原理和实现技术;通过编译器的开发,学生们能够提高对程序设计语言的理解和正确使用程序设计语言的能力,提高开发大型软件的能力,提高抽象思维能力和形式化描述能力;掌握编译技术有助于加深学生对计算机的组织结构、指令系统以及操作系统的理解。另外,由于编译程序作为系统软件在性能上具有严格的要求,这使得它所使用的算法经典、高效,而这些算法、思想和实现技术也可广泛应用于一般软件的设计实现,同时还可以培养好的程序设计风格。

该项研究可以为编译原理课程教学提供教学内容、教学方法和实验项目设计方面的指导,为学生学习编译原理课程提供一种全新的思路,多方面帮助学生掌握编译过程的工作原理和构造方法,培养和提高学生理解编译原理、分析设计过程和运用高级语言进行编程的能力。所以说,该项研究具有非常重要的现实意义。

2.2本项研究的主要内容

任务驱动的编译原理教学方案研究主要是把编译过程的工作原理和构造方法融入一个高级语言程序编译器的开发当中,用开发过程中的实际需求来驱动学生学习书本上深奥的编译原理理论知识,具体内容安排如下。

2.2.1设计课程教学所必需的实验项目

实验项目设计成功与否是整个项目成功的关键,本项目首先从整体上把握高级语言程序编译器的开发,然后采用从上而下的顺序把编译器的开发分成一个个小的实验任务,对于比较复杂的实验内容,可以分为两个或多个实验来做,最后再进行汇总。对于每一个实验任务制定实现这一任务的实验目的、实验要求、实验内容、实验步骤和预期的实验结果。让学生们很容易理解并实现这些实验任务。

高级语言程序的编译是由词法分析、语法分析、语义分析与中间代码生成、代码优化和代码生成等五个阶段完成的,每个阶段都涉及到符号表的管理。所以,可以把每一个阶段确定为一个具体的实验任务,并制定相应的实验目的、实验要求、实验内容、实验步骤和预期的实验结果。具体实验及它们的任务为:a.词法分析器设计,读入构成源程序的字符流,按编程语言的词法规则把它们组成词法记号流;b.语法分析器设计,按编程语言的语法规则检查词法分析输出的记号流是否符合这些规则,并依据这些规则所体现出的该语言的各种构造的层次性,用各记号的第一元建成一种树形的中间表示,这个中间表示用抽象语法的方式描述了该记号流的语法情况;c.语义分析器设计,使用语法树和符号表中的信息,依据语言定义来检查源程序的语义一致性,以保证程序各部分能有意义地结合在一起,并实现一种抽象机的程序;d.代码优化器设计,改进中间代码,以便产生较好的目标代码;e.代码生成器设计把源程序的一种中间表示作为输入并映射到一种目标语言。下面以“词法分析器设计”为例来说明实验项目的设计:

上一篇:以就业为视角,提高大学生科技创新能力 下一篇:信息安全开放实验探讨