编译原理课程 [“编译原理”课程建设的新思考]

“编译原理”课程建设的新思考

“编译原理”课程建设的新思考 “编译原理”课程建设的新思考 从当前的就业情况看,计算机专业的学生在软硬件知识和应用能力上的优 势逐渐弱化,在与具备特定行业、应用领域和专业背景的学生竞争就业时,面临 的压力越来越大,而在已就业的学生中又少有人从事编译系统的研究和开发工作。

所以,“编译原理”作为计算机科学与技术专业的“经典”核心课程的存在价值受到 质疑。其实,本科教育解决的是培养学生基本专业能力、可持续发展能力这些本 质性的问题,因此,我们要从如何结合专业课程完成学生专业能力的培养与素质 的提高这样的角度来看问题。

在大学里,学习一门课程,不能简单、肤浅地看成是对这门课程所含内容 的研究、设计和开发,而是关注是否在有限的时间内最有利于学生专业能力的培 养。计算机是一门技术性、工程性和应用性很强的学科,有其自身的基础理论支 撑体系。“编译原理”课程本身以计算机专业基础知识为载体,含有问题求解的典 型思想、技术和方法,整个课程的内容对培养学生的计算思维,程序设计与实现, 算法设计与分析,计算机系统的认识、开发和利用等学科基本能力都非常重要。

并且,编译技术在计算机体系结构设计、提高软件开发效率与质量的工具开发等 方面有着重要的应用。因此,“编译原理”课程不但有存在的价值,而且对于计算 机专业学生的能力培养和素质提高有着极其重要的作用和意义。

作为计算机专业的教育工作者,应该结合当前计算机的发展状况,重新认 识“编译原理”课程的重要性,并根据当前的教育和就业形势,积极研究、改进“编 译原理”课程的教学和实验方法,提高教学效果和质量。

一、明确“编译原理”课程对学生能力培养和素质提高的重要性 从课程体系总体设计看,“编译原理”课程的主要教学目标之一是使学生在 系统的级别上重新认识算法和程序,提升学生的系统能力。它是计算机专业课程 中最难学的课程,既涉及形式语言和自动机等抽象理论,又是数据结构、程序设 计语言、算法和软件设计等知识的综合体现,有效培养了计算机专业学生应具有 的计算思维,算法设计与分析,程序设计与实现(硬件和软件实现),系统的认 知、分析、开发与应用等四大基本能力。

计算学科问题求解的基本思路是“问题-形式化描述-计算机化”,以抽象、理论、设计为其学科形态。“编译原理”课程中要求学生掌握的包括程序变换基本 概念、问题描述和处理方法(自顶向下、自底向上、逐步求精、递归求解,目标 驱动,问题分析、问题的抽象与形式化描述,算法设计与实现,系统构建、模块 化)等知识、思想和方法,有利于学生养成“问题、形式化描述、计算机化”问题 求解 的习惯,实现从“实例计算”到“类计算”和“模型计算”的跨越。这其中既有 明确的、便于抽象的问题,又有较成熟的理论,而且在限定规模下又容易实现(设 计),涉及的是一个比较适当的抽象层面上的数据变换,所以该课程是计算机专 业本科生的重要专业技术基础课程。

二、“编译原理”课程“教”与“学”的新思考 目前,在“编译原理”课程教学中,“教”与“学”两方面的问题都很突出:一 些抽象的重要理论使学生学习的畏难情绪严重,加上有些人认为毕业后很少有机 会参与设计与实现编译系统,使得该课程的“教”与“学”的热情偏低,而适用于新 型体系结构及新一代计算机系统的编译器的需求和大量应用,也给“编译原理” 课程内容的充实与更新提出更高要求。

作为教师,要让学生深刻认识到:“编译原理”是许多课程知识的集成与实 践,能进一步加深对许多专业基础课程知识的理解;
编译程序所使用的原理、方 法和技术有利于领悟计算机理论的精髓,在非编译系统的实际应用中也发挥着很 大作用;
学习编译对今后从事应用软件,语言开发平台、编译系统甚至操作系统 的开发等工作非常有益。

实践证明,如果首先让学生认识到课程内容的重要性,再辅之以合适的教 学方法和教学手段,是不难取得好的教学效果的。根据笔者的“编译原理”课程教 学经验,认为对于该课程的设置和教学可以从以下几个角度来开展。

1.科学设置课程 对于“编译原理”课程的设置问题,可以根据本科院校自身办学宗旨,从普 通高校本科、重点高校本科和研究生阶段教育三个层次来考虑教学目标和培养要 求等因素,在总学时的限制下,实现总目标的最佳课程。因此,可以考虑以下2 种模式。

(1)课程分解模式。分为:“编译技术”(必修),介绍为满足基本应用 而需要学生掌握的基础知识、方法和技术,以达到语言转换和实现理论基础介绍的目的;
“编译理论”(选修),主要偏重于介绍形式化等原理性的深层次内容, 方便有进一步深造需要的学生学习。

(2)内容分解模式。不单独设置一门“编译原理”课程,根据深浅和涉及 到的具体问题,将与其他课程相关的内容分解到不同的课程中去,使学生在相关 课程的学习中逐步掌握相关知识。这和前者比有一定难度:一是课程难分解,课 程内容分解后与其他课程内容的重新整合在短时期内难做到科学分解与组织;
二 是增加了其他课程授课教师的工作量与难度。

2.优化教学内容 教师还要坚持教学与科研相结合,将最新的教改和科研成果引入教学,将 经典编译理论与现代编译技术有机地结合起来。例如,可以将嵌入式编译器、分 布并行编译器、多核编译器以及适应新体系结构及新一代计算机系统编译器的研 究及其研究结果迅速充实到“编译原理”课程中。此外,还可以向学生介绍编译技 术在人工智能、并行计算、自然语言处理等领域里的具体应用,为后续课程做好 铺垫。

3.用实例演示来形象化抽象理论 学生学习“编译原理”课程的最大困难是其较为抽象,要获得好的教学效果, 就要将抽象理论形象化。改革教学方法,提倡互动式、研讨式和案例式等教学方 法。一方面,可以通过实例类比,例如,用自然语言的翻译过程来类比编译程序 执行高级程序设计语言的翻译过程。另一方面,教师可以借助多媒体手段,把抽 象的原理用动画、图像等形象化的方式展示,便于学生的理解。同时,还可以向 学生推荐网上优秀的“编译原理”课程教学网站、电子书等资源,拓宽学生视野, 培养和激发学生学习兴趣。

4.把握联系,启发学生积极思维 在教学过程中,充分考虑“编译原理”课程与数据结构、计算机组成原理、 操作系统、算法分析与设计等先修课程之间的内在联系,不断深入和强化,以加 强课程的系统性,培养学生的全局观。同时还要把握编译过程各个功能阶段的内 在联系与规律,有目的地设计问题,有意义地提出问题,通过问题把编译原理中 的理论难点、抽象概念引导出来。

三、重视实验,建立行之有效的实验教学方法设计和组织良好的实践教学环节可以使“编译原理”课程获得良好的教学 效果。现在很多高校都增加了实验学时,并独立计算实验成绩。我们在借鉴兄弟 院校和国外经验的基础上,摸索出验证性实验加综合设计性实验的2阶段实验教 学模式,各高校可根据自己的教学目标和培养要求来选择实施。

1.验证性实验 这类实验主要是为配合配合课堂授课内容,由教师按编译原理授课顺序, 提供同步的若干验证性实验题目,让学生逐个完成相关子模块,逐步扩大完善整 个编译程序。这样循序渐进地完成实验,不仅增加了学生的成就感和自信心,而 且使他们养成扎实的作风,使学练互动,激发学生学习兴趣和积极性。而作为教 师,则要做好组织、监督和解惑工作,帮助学生掌握编译系统主要技术、算法的 理解和设计,引导学生从整体上把握编译系统的结构和各子系统之间的协调工作。

2.综合设计性实验 一定规模的综合设计性实验训练是保证实践教学效果必不可少的环节。我 们可以让学生以小组(由4~5名成员)为单位结合软件工程课程实验的环节完成 一个规模适度的编译程序开发。在实际操作时,可根据验证性实验阶段的情况, 把学生分成不同层次的小组,由他们选择适合自己水平的不同的实验题目。每组 遵循完整的编译器开发方式,融入软件工程的思想,由大家推举的组长分工、协 调完成任务。这样,不仅能让每个学生体验从分析设计、编码测试到交付维护的 软件开发全过程,还提高了他们的工程和团队意识以及开发大型软件的协调结构 设计能力。实验结束时,教师要求学生以演示系统、答辩的方式公布实验成果, 以便公正评分。

四、结论 总之,“编译原理”课程很好地体现了计算机专业课程的系统性、完整性、 科学性和原理性,对培养学生的专业能力和提高他们的专业素质起到关键的作用。

在新环境和新形势下,作为专业课教师,首先,要认清“编译原理”课程存 在的必要性和重要性;
其次,必须改革理论教学和实验教学的方法,激发学生学 习兴趣和积极性;
最后,必须展开新编译方法和新编译技术的研究,并将研究结 果迅速充实到“编译原理”课程中。在计算机专业课程的教学道路上,我们任重而 道远。