“编译原理”实践驱动式教学探讨
时间:2022-03-20 10:20:52 浏览次数:次
摘要:该文针对编译原理的重要性以及当前教学中存在的问题,提出了实践驱动式教学方法,克服了传统课堂理论讲授式教学方法缺点,以实践指导运用作为课堂主要教学手段,提高了学生的学习兴趣和课程的实用性。经实践证明此方法取得良好的教学效果,对“编译原理”教学有一定的指导意义。
关键词:编译原理;实践驱动;教学改革
中图分类号:TP3 文献标识码:A 文章编号:1009-3044(2014)31-7392-02
Abstract: The paper proposes a teaching method of practice-driven aiming at the importance of “compiler principle” and the problems existing in the current teaching. The method uses practice and application as the main teaching approach, which overcomes the weaknesses of the traditional depiction teaching method, and improves the students’ interests in the course and its practicability. It has been proved by practice that the method had achieved a good teaching performance and is instructive for the teaching on “compiler principle”.
Key words: compiler principle; Practice-driven; teaching reformation
1 编译原理重要性
“编译原理”是计算机专业的核心理论课程之一,也被视为此专业最难的专业课之一,是此专业区别于其他的专业的标志性课程之一。早在二十世纪六十和八十年代时,国外和国内就已经设置了“编译原理”课程[1]。
“编译原理”课程重点介绍了编译程序构造的一般原理、基本设计方法、主要实现技术和一些自动化构造工具。包括编译程序在内的翻译程序具有实现语言的功能,它所涉及的知识领域有形式语言、自动机理论等语言定义、翻译与实现程序的基础知识,这些知识正可以让学生从其中领悟到计算机理论知识的精髓,并可以让他们从实现的角度来重新审视软件的开发过程,从而帮助学生真正的认识软件,这些对于以后从事应用软件、编译系统、语言开发平台,甚至操作系统开发等均有非常大的好处。对于学生来讲,毕业以后无论从事编译器的开发,还是不从事编译器的开发,大量的实践证明此课程的原理和实现技术亦可广泛应用于一般普通软件的设计和实现,它对程序设计语言的准确掌握,新的编程范型的学习,程序的理解和开发出正确可行的软件都是不可或缺的理论基础知识,所以编译原理是计算机专业学生不可缺少的一门专业课程。
同时“编译原理”是许多课程中一个综合性实践的结合体,其中包括计算机理论、算法设计与分析、离散数学、软件工程、程序设计、数据结构等,是理论性强同时也是理论应用于实践的成功典范[2]。编译原理知识的学习能让学生对程序设计语言课程中语言的基本单位的定义和作用有更深层次的理解,并对今后从事计算机相关领域项目的开发,有很多思想和观念是值得借鉴,从而受益匪浅。譬如:编译程序中采用的一些大量的数据结构和算法均是 “数据结构” 、“离散数学”以及“算法设计与分析”等课程知识的典型应用;编译程序对目标代码的分配与存储组织功能的实现原理又是“操作系统”的相关知识的应用;编译程序对中间代码的优化方法则是对数学、结构程序设计、逻辑学以及优化理论的综合应用[3]。因此,对编译原理的研究、学习和实践编程,可以从多方面提高学生的逻辑思维能力、动手实践能力、编程调试和综合应用的能力,且能有效的提高学生的专业素质,此外编译课程中介绍的理论知识也是有些后续课程的基础。总而言之,”编译原理”中的基本原理知识是计算机专业学生必须掌握的,也是计算机专业相当重要的一门专业基础课程。
2 当前教学中存在的问题
众所周知, “编译原理”存在一个普遍的现象那就是学难、教难、实验更难。学生们都普遍认为这门课程学习起来的难度系数太大,理论性太强,而且表面上看起来实用性也不好,没有java、jsp等课程实用性那么直观市场需求量大,这些因素导致学生忽视这门课程的重要性,降低了学习兴趣,从而导致出现恶劣的教学效果。下面简单指出了目前“编译原理”教学中存在的主要问题。
2.1 课程重要性认识不足
在学习的过程中很多学生认为这门课程是讲解编译程序的构造原理知识,而自己以后涉及到编译器的设计工作的几率很低甚至为零,故错误的认为“编译原理“不重要了。“编译原理”的应用价值没有他们学的一些编程语言和网页制作语言那么“直接有用”,他们没有领会到这门课程对于提高他们对计算机知识体系和提高软件开发效率与质量等方面存在着潜在的意义。通过学习编译的理论和方法,可以提高学生对程序设计语言的设计和实现等相关知识的综合理解,而这些知识恰好是准确掌握程序设计语言,理解程序,学习新的编程范型以及开发出正确的软件都是不可缺少的基础知识[4]。
2.2 理论性强,实验难度太大
“编译原理”这门课程的基本知识所涉及到的一些重要理论基础具有很强的
抽象性,从而使学生对其理解产生了较大难度,而且其整体理论性很强,学生学起来觉得枯燥无味。编译器构造过程中涉及到的算法多而且复杂,实现起来更加困难,不是几行代码能轻松完成的,而且需要对C的程序设计语言知识掌握牢固。这一系列的因素导致了学生的学习兴趣和动力直线下降。
2.3 课堂教学枯燥无味
由于这门课程大部分的教学模式几乎都是采用课堂理论教学,实践教学环节比较薄弱,没有真正的做到实践和理论结合起来教学。传统的教学中在课堂上扮演着主要角色均是教师,教学中以教师为中心,教师课堂传授理论知识,学生机械性的接受,没有很好的调动学生的积极性,加上课程本身难度系数又偏大,从而导致学生学习兴趣大打折扣。
虽然目前很多高校都在开设编译原理这门课程的同时均增加了相应的课程实践环节,甚至安排了专门的编译原理课程设计以加深学生对知识点的掌握, 但是由于编译原理的实验题目难度较大,其数据结构设计比较困难,并且需要实践者要有足够的基础理论和较强的编程能力作为支撑,所以大多数学生在课程实践时都是无从下手,不知道从何做起,实践效果不理想,这些因素导致了学生对编译原理的知识理解往往只是停留在书本上的理论概念上,根本不明白如何将这些理论知识运用到实际的编译程序设计中去。
3 实践驱动教学方法
3.1 规划教学内容
在编译原理教学之前教师首先规划好整个课程教学内容,有重点的介绍各章节的内容,让学生明白各个章节的教学和上机时间安排。部分章节如语法分析和语义分析章节由于这些章节的程序设计比较复杂,教师可以在传授理论知识的同时结合程序进行讲解和演示,使得学生能够掌握如何将这些理论知识运用到实际的编译程序中去,从而避免出现上机无从下手的现象。
3.2 实践教学与理论教学相结合
编译原理的课堂教学一开始可以讲授编译系统的总体系统,可以在总体结构指导下,将其分解为“词法分析器设计与实现”、“语法分析器设计与实现”、“语义分析与中间代码器设计与实现”,每个程序将利用前一个程序的结构,最终形成一个简单的编译系统。在课堂教学中将这些具体实验程序贯穿到理论教学中,效果会事半功倍,并能够很好的帮助学生理解和运用理论知识。
比如,关于词法分析、语法分析中很多的理论描述比较抽象复杂,此时教师在分析理论知识的前提下,结合设计出的“词法分析器”、“语法分析器”一起讲解这些理论知识如何运用到实际的编程中,通过对源代码的讲解能让学生茅塞顿开,能体会到这些知识的有用性。在课堂教学中更多的强调如何将这些理论知识通过编程运用到具体的编译器中,改变了传统的课堂上的理论教学,以实践教学为主,这样通过具体实现源码加深学生对知识的掌握,既提高了教学效果又营造了轻松愉快的课堂气氛,师生互动得以更良性的发展下去。
3.3 课程实验的加强
目前高校都提倡理论结合实际,比较重视实践教学。例如笔者学校在二年级和三年级暑假都会安排学生去公司实习,以更好的将课堂中所学的理论知识与实践结合起来,提高他们的职业技能素养和动手编程能力。大学整个的课程体系以及人才培养方案都在强化实践,同时编译原理课程属于技术学科,必须注重理论与实践的有机结合,强调课程实验的重要性,加强对学生实践动手能力的培养。由于编译原理的实验涉及到的知识比较多,导致了实验难度很大,所以在上机实验安排上我们可以分模块由易到难循序渐进的开展,例如编译器的词法分析器设计相对比较容易,这个实验可以让所有的学生都动手去编写;然后再逐步在词法分析器的基础上设计语法分析器,最后再设计出语义分析器。让学生逐步深入的进行课程实践,真正的把实践教学落到实处。
这样采用功能递增的方式对实验进行引导性划分,使学生在学习词法分析时就可以着手进行相关的实验设计,随着教学的开展和教学内容的深化,组织系列化的上机实验,学生逐步完成词法分析器的设计与实现、语法分析器的设计与实现,一些优秀的学生可以进一步完成语义分析与中间代码生成器的设计与实现。最后一个实验完成后,学生就已经开发出一个满足要求的编译程序了。
(下转第7405页)
(上接第7393页)
4 总结
总之,编译原理在计算机专业培养计划中是一门不容忽视的课程,然而传统的课堂教学存在教难学难实验更难的现象,如何通过教学手段降低其难度系数,提高学生的课程兴趣,使得编译原理的知识能真正的被学生全面深刻的掌握,是当今编译原理教学的研究目标。采用本文实践驱动式的教学模式,通过实践发现能够很高的改善当前编译原理原理教学中存在的尴尬问题,能够激发学生的学习动力,在课堂上我们更多的强调实践学教而不是单纯的理论教学,不仅提高了学生对理论知识的掌握程度,而且能够改善学生的学习主动性,使其不仅知其然更使其知其所以然。 在教学过程中采用多样的教学手段和灵活的教学方法,不断提高编译原理的教学质量。
参考文献:
[1] 黄贤英,刘贞,刘全利.“编译原理”课程的地位及教改思路[J].重庆科技学院学报,2005,3(103):103-105.
[2] 廖伟志,李文敬. 编译原理课程教学中计算思维能力的培养方法[J].广西科学院学报,2012,28(3):232-235.
[3] 陈晶.《编译原理》课程教学改革初探[J]. 琼州学院电子信息工程学院学报,2013,20(2):57-59.
[4] 王一宾,陈义仁. 研究性学习理念下的《编译原理》教学研究[J]. 安庆师范学院学报, 2011,17(4):111-113.“编译原理”实践驱动式教学探讨
王丽丽,方贤文
(安徽理工大学 理学院,安徽 淮南 232001)
摘要:该文针对编译原理的重要性以及当前教学中存在的问题,提出了实践驱动式教学方法,克服了传统课堂理论讲授式教学方法缺点,以实践指导运用作为课堂主要教学手段,提高了学生的学习兴趣和课程的实用性。经实践证明此方法取得良好的教学效果,对“编译原理”教学有一定的指导意义。
关键词:编译原理;实践驱动;教学改革
中图分类号:TP3 文献标识码:A 文章编号:1009-3044(2014)31-7392-02
Discussion of Practice-driven Teaching on Compiler Principle Course
WANG Li-li, FANG Xian-wen
(College of Mathematics and Physics, Anhui University of Science and Technology, Huainan 232001, China)
Abstract: The paper proposes a teaching method of practice-driven aiming at the importance of “compiler principle” and the problems existing in the current teaching. The method uses practice and application as the main teaching approach, which overcomes the weaknesses of the traditional depiction teaching method, and improves the students’ interests in the course and its practicability. It has been proved by practice that the method had achieved a good teaching performance and is instructive for the teaching on “compiler principle”.
Key words: compiler principle; Practice-driven; teaching reformation
1 编译原理重要性
“编译原理”是计算机专业的核心理论课程之一,也被视为此专业最难的专业课之一,是此专业区别于其他的专业的标志性课程之一。早在二十世纪六十和八十年代时,国外和国内就已经设置了“编译原理”课程[1]。
“编译原理”课程重点介绍了编译程序构造的一般原理、基本设计方法、主要实现技术和一些自动化构造工具。包括编译程序在内的翻译程序具有实现语言的功能,它所涉及的知识领域有形式语言、自动机理论等语言定义、翻译与实现程序的基础知识,这些知识正可以让学生从其中领悟到计算机理论知识的精髓,并可以让他们从实现的角度来重新审视软件的开发过程,从而帮助学生真正的认识软件,这些对于以后从事应用软件、编译系统、语言开发平台,甚至操作系统开发等均有非常大的好处。对于学生来讲,毕业以后无论从事编译器的开发,还是不从事编译器的开发,大量的实践证明此课程的原理和实现技术亦可广泛应用于一般普通软件的设计和实现,它对程序设计语言的准确掌握,新的编程范型的学习,程序的理解和开发出正确可行的软件都是不可或缺的理论基础知识,所以编译原理是计算机专业学生不可缺少的一门专业课程。
同时“编译原理”是许多课程中一个综合性实践的结合体,其中包括计算机理论、算法设计与分析、离散数学、软件工程、程序设计、数据结构等,是理论性强同时也是理论应用于实践的成功典范[2]。编译原理知识的学习能让学生对程序设计语言课程中语言的基本单位的定义和作用有更深层次的理解,并对今后从事计算机相关领域项目的开发,有很多思想和观念是值得借鉴,从而受益匪浅。譬如:编译程序中采用的一些大量的数据结构和算法均是 “数据结构” 、“离散数学”以及“算法设计与分析”等课程知识的典型应用;编译程序对目标代码的分配与存储组织功能的实现原理又是“操作系统”的相关知识的应用;编译程序对中间代码的优化方法则是对数学、结构程序设计、逻辑学以及优化理论的综合应用[3]。因此,对编译原理的研究、学习和实践编程,可以从多方面提高学生的逻辑思维能力、动手实践能力、编程调试和综合应用的能力,且能有效的提高学生的专业素质,此外编译课程中介绍的理论知识也是有些后续课程的基础。总而言之,”编译原理”中的基本原理知识是计算机专业学生必须掌握的,也是计算机专业相当重要的一门专业基础课程。
2 当前教学中存在的问题
众所周知, “编译原理”存在一个普遍的现象那就是学难、教难、实验更难。学生们都普遍认为这门课程学习起来的难度系数太大,理论性太强,而且表面上看起来实用性也不好,没有java、jsp等课程实用性那么直观市场需求量大,这些因素导致学生忽视这门课程的重要性,降低了学习兴趣,从而导致出现恶劣的教学效果。下面简单指出了目前“编译原理”教学中存在的主要问题。
2.1 课程重要性认识不足
在学习的过程中很多学生认为这门课程是讲解编译程序的构造原理知识,而自己以后涉及到编译器的设计工作的几率很低甚至为零,故错误的认为“编译原理“不重要了。“编译原理”的应用价值没有他们学的一些编程语言和网页制作语言那么“直接有用”,他们没有领会到这门课程对于提高他们对计算机知识体系和提高软件开发效率与质量等方面存在着潜在的意义。通过学习编译的理论和方法,可以提高学生对程序设计语言的设计和实现等相关知识的综合理解,而这些知识恰好是准确掌握程序设计语言,理解程序,学习新的编程范型以及开发出正确的软件都是不可缺少的基础知识[4]。
2.2 理论性强,实验难度太大
“编译原理”这门课程的基本知识所涉及到的一些重要理论基础具有很强的
抽象性,从而使学生对其理解产生了较大难度,而且其整体理论性很强,学生学起来觉得枯燥无味。编译器构造过程中涉及到的算法多而且复杂,实现起来更加困难,不是几行代码能轻松完成的,而且需要对C的程序设计语言知识掌握牢固。这一系列的因素导致了学生的学习兴趣和动力直线下降。
2.3 课堂教学枯燥无味
由于这门课程大部分的教学模式几乎都是采用课堂理论教学,实践教学环节比较薄弱,没有真正的做到实践和理论结合起来教学。传统的教学中在课堂上扮演着主要角色均是教师,教学中以教师为中心,教师课堂传授理论知识,学生机械性的接受,没有很好的调动学生的积极性,加上课程本身难度系数又偏大,从而导致学生学习兴趣大打折扣。
虽然目前很多高校都在开设编译原理这门课程的同时均增加了相应的课程实践环节,甚至安排了专门的编译原理课程设计以加深学生对知识点的掌握, 但是由于编译原理的实验题目难度较大,其数据结构设计比较困难,并且需要实践者要有足够的基础理论和较强的编程能力作为支撑,所以大多数学生在课程实践时都是无从下手,不知道从何做起,实践效果不理想,这些因素导致了学生对编译原理的知识理解往往只是停留在书本上的理论概念上,根本不明白如何将这些理论知识运用到实际的编译程序设计中去。
3 实践驱动教学方法
3.1 规划教学内容
在编译原理教学之前教师首先规划好整个课程教学内容,有重点的介绍各章节的内容,让学生明白各个章节的教学和上机时间安排。部分章节如语法分析和语义分析章节由于这些章节的程序设计比较复杂,教师可以在传授理论知识的同时结合程序进行讲解和演示,使得学生能够掌握如何将这些理论知识运用到实际的编译程序中去,从而避免出现上机无从下手的现象。
3.2 实践教学与理论教学相结合
编译原理的课堂教学一开始可以讲授编译系统的总体系统,可以在总体结构指导下,将其分解为“词法分析器设计与实现”、“语法分析器设计与实现”、“语义分析与中间代码器设计与实现”,每个程序将利用前一个程序的结构,最终形成一个简单的编译系统。在课堂教学中将这些具体实验程序贯穿到理论教学中,效果会事半功倍,并能够很好的帮助学生理解和运用理论知识。
比如,关于词法分析、语法分析中很多的理论描述比较抽象复杂,此时教师在分析理论知识的前提下,结合设计出的“词法分析器”、“语法分析器”一起讲解这些理论知识如何运用到实际的编程中,通过对源代码的讲解能让学生茅塞顿开,能体会到这些知识的有用性。在课堂教学中更多的强调如何将这些理论知识通过编程运用到具体的编译器中,改变了传统的课堂上的理论教学,以实践教学为主,这样通过具体实现源码加深学生对知识的掌握,既提高了教学效果又营造了轻松愉快的课堂气氛,师生互动得以更良性的发展下去。
3.3 课程实验的加强
目前高校都提倡理论结合实际,比较重视实践教学。例如笔者学校在二年级和三年级暑假都会安排学生去公司实习,以更好的将课堂中所学的理论知识与实践结合起来,提高他们的职业技能素养和动手编程能力。大学整个的课程体系以及人才培养方案都在强化实践,同时编译原理课程属于技术学科,必须注重理论与实践的有机结合,强调课程实验的重要性,加强对学生实践动手能力的培养。由于编译原理的实验涉及到的知识比较多,导致了实验难度很大,所以在上机实验安排上我们可以分模块由易到难循序渐进的开展,例如编译器的词法分析器设计相对比较容易,这个实验可以让所有的学生都动手去编写;然后再逐步在词法分析器的基础上设计语法分析器,最后再设计出语义分析器。让学生逐步深入的进行课程实践,真正的把实践教学落到实处。
这样采用功能递增的方式对实验进行引导性划分,使学生在学习词法分析时就可以着手进行相关的实验设计,随着教学的开展和教学内容的深化,组织系列化的上机实验,学生逐步完成词法分析器的设计与实现、语法分析器的设计与实现,一些优秀的学生可以进一步完成语义分析与中间代码生成器的设计与实现。最后一个实验完成后,学生就已经开发出一个满足要求的编译程序了。
4 总结
总之,编译原理在计算机专业培养计划中是一门不容忽视的课程,然而传统的课堂教学存在教难学难实验更难的现象,如何通过教学手段降低其难度系数,提高学生的课程兴趣,使得编译原理的知识能真正的被学生全面深刻的掌握,是当今编译原理教学的研究目标。采用本文实践驱动式的教学模式,通过实践发现能够很高的改善当前编译原理原理教学中存在的尴尬问题,能够激发学生的学习动力,在课堂上我们更多的强调实践学教而不是单纯的理论教学,不仅提高了学生对理论知识的掌握程度,而且能够改善学生的学习主动性,使其不仅知其然更使其知其所以然。 在教学过程中采用多样的教学手段和灵活的教学方法,不断提高编译原理的教学质量。
参考文献:
[1] 黄贤英,刘贞,刘全利.“编译原理”课程的地位及教改思路[J].重庆科技学院学报,2005,3(103):103-105.
[2] 廖伟志,李文敬. 编译原理课程教学中计算思维能力的培养方法[J].广西科学院学报,2012,28(3):232-235.
[3] 陈晶.《编译原理》课程教学改革初探[J]. 琼州学院电子信息工程学院学报,2013,20(2):57-59.
[4] 王一宾,陈义仁. 研究性学习理念下的《编译原理》教学研究[J]. 安庆师范学院学报, 2011,17(4):111-113.
[“编译原理”实践驱动式教学探讨]相关文章
- “微课程”在初中地理教学中的运用探讨
- 任务驱动法在高校计算机教学中的作用方法探讨
- 对排列组合问题的探讨
- 人力资源会计探讨
- 电子商务环境下物流成本的会计探讨
- 社会责任会计问题探讨
- 实施学校营养教育的策略探讨
- 关于人力资源会计理论问题的探讨
- 探讨环保工程造价管理控制研究
- 计算机数据库安全技术探讨
- 社区实践个人工作总结5篇
- 实践活动心得总结3篇
- 关于红色文化实践活动的感想10篇
- 红色文化实践活动报告3篇
- 国家级特色专业建设实践研究
- MOOC环境下使用Visual,Studio制作动态网站课程的理论与实践
- 基于科学计算和实践创新能力培养的数值计算方法课程改革与实践研究
- 高职“绿色食品生产”实践教学改革与实践
- 2022年在“四学四大”主题教育实践活动动员部署会议上的讲话
- 2022年度阅读《实践论》心得体会【精选推荐】
- Catalyst半导体宣布为摄像/闪光模式的应用推出500mA电感式LED驱动器