编译原理论文范文

2022-05-09

下面是小编精心推荐的《编译原理论文范文(精选3篇)》的文章,希望能够很好的帮助到大家,谢谢大家对小编的支持和鼓励。摘要:结合编译原理课程教学工作,从课程特点、教学内容的合理取舍、语法和语义分析等难点内容的讲授方式、实验内容的设计等方面进行深入探讨,对教学过程进行总结,讲述如何提高教学质量。关键词:编译原理;课程内容;实验环节0引言编译原理是计算机专业本科生的重要核心课程,通常开设在大学3年级。

第一篇:编译原理论文范文

关于编译原理课程定位的思考

摘要:本文针对编译原理课程教学的现状,对这门课程在计算机专业中的定位进行理性思考。然后以人本主义教学理论为指导,研究编译基础理论的辐射范围,将编译原理课程的学习和其他领域的研究结合起来,以此提高学生的学习积极性,获得良好的教学效果。

关键词:编译原理;课程定位;教学改革

编译原理是培养计算机专业人才的一门重要的核心课程,由于涉及形式语言、有限自动机等抽象内容,学生在学习过程中感觉很难理解,主要反馈包括内容抽象、枯燥,算法复杂、不易理解,课程实验难等。同时由于学生觉得自己将来从事编译程序开发工作的可能性很小,学习积极性不够高。作为授课老师,如何改善这门课程的教学效果,提高教学质量,是一个需要研究的课题。本文对编译原理课程的定位进行了理性的思考,并对课程教学方法进行了改革和实践,取得了良好的教学效果。

1编译原理课程定位的思考

编译原理课程以介绍程序设计语言编译程序构造的基本原理和设计方法为教学目标,是一门理论性、实践性、技术性很强的课程,强调理论与实践的紧密结合。我们的编译原理课程的定位是让学生掌握和理解编译系统的结构、工作流程以及编译程序各组成部分的设计原理和实现技术,从而掌握分析、设计、实现和维护编译系统的初步能力[1]。

基于该课程定位,编译原理课程的教学方法一般都是以原理讲授为主,以简单算法设计强化对原理的理解,课程实验则是实现或扩充一个简单编译器。在

学习过程中,学生容易产生对学习抽象原理的畏难心里,再加上感觉自己将来参与编译程序开发工作的可能性不大,学习的兴趣和积极性就不会很高。同时,由于课程学习确实存在一定的难度,学生很难跟上进度,最终导致上课听课不理解,课后复习不上心,课后实验做不了甚至抄袭的现象,达不到课程的教学目标。

针对这种现象,我们重新思考了编译原理课程的定位问题。我校编译原理课程安排在第7学期,在计算机专业核心课程中排在了最后面。除了课程本身的教学目的之外,编译原理课程更是综合应用了前面多门课程所学的知识。例如编译原理课程中直接使用了离散数学所探讨的集合论、图论、逻辑推理的相关知识,尤其是形式语言与自动机理论更是编译理论的主要理论基础,而编译程序对中间代码的优化的实现则是数学、逻辑学、结构程序设计和优化理论的综合应用。课程实验需要使用计算机程序设计、算法、数据结构、软件工程等课程的相关知识,如:线性表、图、树、栈等数据结构以及基于这些数据结构的一些算法的实现。此外,构造编译程序当然还需要了解机器的指令结构以及与硬件、操作系统相关的知识,如寄存器和存储器的分配等。因此,编译原理课程的学习和实践可以从多个方面提高学生的逻辑思维能力、实践动手能力、编程调试和综合应用能力,有助于切实有效地提高学生的专业素质。

另一方面,编译原理课程所讲授的知识不仅仅能用于编译程序的构造,更能用于其他很多领域,对其他课程的学习和很多领域的研究也具有重要的意义,包括计算机软件、计算机系统结构、人工智能、机器学习、并行处理等领域。例如,软件测试与验证的研究中就需要程序的分析技术;文本编辑器的实现涉及到的单词和语法正确性检查就需要使用编译原理课程中介绍的词法分析、语法分析技术;网络搜索引擎在处理用户输入的查询要求、对文档资源的特征分析、提取和描述等工作中都要用到编译的相关知识。而且由于编译系统作为系统软件在性能上具有严格的要求,这使得其所使用的都是经典、高效的算法,而这些算法的思想和实现技术也可广泛地应用于一般软件的设计实现,如正规表达式和有穷自动机就可以应用于XML文档分析、网络协议解析、自然语言处理等系统和领域中。

因此,编译原理课程不应该仅仅是介绍编译程序构造的基本原理和设计方法,同时还是培养学生具有综合应用前面所学的各种计算机相关知识的能力,并为将来从事相关不同领域的研究和开发打下良好基础的一门课程[2]。

2编译原理课程教学改革

人本主义教学理论的代表人物罗杰斯(C.R.Rogers) 认为,人类具有天生的学习愿望和潜能,它们可以在合适的条件下释放出来;当学生了解到学习内容与自身需要相关时,学习的积极性最容易激发;在一种具有心理安全感的环境下可以更好地学习[3]。罗杰斯认为,教师的任务不是教学生知识,也不是教学生如何学习知识,而是要为学生提供学习的手段,至于应当如何学习则应当由学生自己决定。教师的角色应当是学生学习的“促进者”[4]。

在人本主义教学理论指导下,我们以提高学生学习积极性为目的对编译原理课程的教学过程进行了全面的改革和设计。通过构建编译经典理论应用案例库,并结合教学研讨让学生了解编译技术的辐射范围,通过课程实验的精心设计和学生自选领域的单元实验让学生将所学习的各种计算机专业知识和自己感兴趣的研究领域紧密结合起来,全面激发学生的学习积极性,让学生能够自主学习。

1) 搜集编译基础理论和技术在计算机科学的各领域中的成功应用案例,构建编译经典理论应用案例库。

编译理论中最经典的莫过于有限自动机和各种语法分析方法,包括词法分析、语法分析、属性文法分析等。这些方法在数据库、操作系统、人工智能、网络信息处理、语言和文字处理等领域都有广泛的应用,我们收集编译基础理论和技术在这些领域中的成功应用案例,并对这些案例进行分析和加工,形成了案例资源库。

在将这些案例推向学生之前,我们给案例加上领域标签,并明确其和编译理论和技术的关系。例如XML分析案例可以用于网络信息处理、知识表示、信息交换等领域,使用了形式语言与自动机的理论以及词法分析和自底向上的语法分析技术。这些案例资源可以向学生展示编译经典理论和先进技术相结合的突出特点,基于这些案例设计的课程实验更能让学生体会到编译经典理论在不同研究领域的作用。

2) 收集编译开源工具,构建编译工具资源库。

我们对网上的开源编译工具进行了分析,从所使用的分析方法和针对的源语言进行了分类。如Bison和Yacc采用的都是LALR(1)自底向上的语法分析方法,JavaCC采用的则是LL(K)自顶向下的语法分析方法。Bison针对C语言进行语法分析,Yacc则根据输入的BNF范式自动生成具有相应语法规范的分析器,JavaCC提供了C++、Java、IDL(Interface Definition Language)、RTF、SQL等语言的分析工具的实例,ANTLR支持C、Objective-C、Ruby、C#、ActionScript、JavaScript、Java、Python等语言的分析。

我们将这些开源工具进行整理,并按照支持的源语言和所使用的方法进行分类。作为学生自学和课程实验设计的基础。

3) 结合编译基础理论,设计有针对性的能激发学生兴趣的课程实验。

建设包括单元实验和综合实验的编译原理课程实验体系。针对编译理论和技术设计一组结合不同研究领域的单元实验,学生可以选择其中之一去完成。单元实验要求学生使用编译原理基础理论解决某个领域的具体问题,包括对相关编译理论的理解、案例的分析、方案设计和实现等。例如对于网络信息处理单元实验,首先让学生对格式化网络信息抽取的案例进行分析,然后让学生实现一个基于HTML格式的新闻信息抽取系统,要求能自动抽取出指定网站(如新浪网)新闻报道的信息,包括新闻名称、作者、新闻时间、大致内容等。要完成这个实验,学生需要使用词法分析和语法分析方法,并了解HTML以及指定网站的新闻网页格式。课程单元实验的设计结合了具体的应用案例和编译技术,可以让学生在自己感兴趣的领域体会编译理论和技术的魅力。

综合实验则要求学生使用开源工具LEX、YACC和JavaCC等实现指定语言子集的词法分析和语法分析功能,锻炼学生的自主性和综合运用知识的能力。

4) 充分发挥课程网站的优势,建设立体学习环境。

编译原理是一门基础理论与实践紧密结合的课程。让学生了解这些抽象的理论不仅仅能用于编译程序的构造,也广泛应用于其他很多领域,这可以激发学生的学习兴趣,提高学习积极性。我们完善了编译原理课程网站,除了包括课件、作业、答疑、实习、讨论等教学环节,以及课程标准、教学日历、参考资料等课程信息外,还为学生提供了编译经典理论的实际应用案例以及各种开源编译工具,建立了在线研讨环境,结合课堂教学引导,纠正学生“学编译原理就是为了做编译器”的错误认识,明确编译原理课程不仅是计算机专业各种基础知识的综合运用,同时也为未来很多领域的科学研究打下基础,让学生能自发主动地学习。

3教学改革成效

经过课程组的努力,我们建设了编译经典理论应用案例库和编译工具资源库;完善了课程网站,建立了有效的网络学习环境;引导学生重新思考编译原理课程定位,激发了学生的学习积极性;改革课程实验内容,提高了课程实验质量;改革课堂教学方法,注重引导式教学和启发式教学,培养学生创新能力。这一系列工作使编译原理课程的教学效果得到了很大的提高,得到了学校督导组和学生的广泛好评。

参考文献:

[1] 王挺,李梦君,周会平. 对编译原理课程教学中计算思维培养的探讨[J]. 计算机教育,2009(21):11-13.

[2] 何炎祥,伍春香. 计算机专业不需要开设编译原理课程吗?[J]. 计算机教育,2009(4):61-62.

[3] Smith, M. K. Carl Rogers and informal education, the encyclopaedia of informal education[EB/OL].[2009-09-03]. www.infed.org/thinkers/et-rogers.htm.

[4] 何炎祥,伍春香. 现代教学理论指导下的“编译原理”教学综合改革[J]. 计算机教育,2010(4):46-49.

The Course Orientation and Teaching Reform of Compiler Theory

ZHOU Huiping, WANG Ting, LI Mengjun

(Department of Computer Science, National University of Defense Technology, Changsha 410073, China)

Key words: compiler theory; course orientation; teaching reform

(编辑:白杰)

作者:周会平,王挺,李梦君

第二篇:编译原理课程教学之思考

摘要:结合编译原理课程教学工作,从课程特点、教学内容的合理取舍、语法和语义分析等难点内容的讲授方式、实验内容的设计等方面进行深入探讨,对教学过程进行总结,讲述如何提高教学质量。

关键词:编译原理;课程内容;实验环节

0 引言

编译原理是计算机专业本科生的重要核心课程,通常开设在大学3年级。编译器是计算机3大系统软件之一,其构造原理和技术是计算机科学技术领域的重要组成部分。虽然绝大多数计算机专业学生未来不可能去构造或维护一个主流程序设计语言的编译器,但与编译原理相关的模型、理论和算法可以用在多种应用领域,将对研究开发产生有益的影响。学习该课程可以培养学生抽象思维、独立解决复杂问题、编程和调试等涉及多门专业课程知识的综合应用能力。

编译原理课程内容抽象、理论性强、形式化方法不易理解,对学生编程实践有较高的要求。对于教师而言,如何在有限的学时内优化教学内容,合理安排实验环节,是值得探讨的问题。

1 课程特点

编译领域里的经典教材作者Alfred V.Aho认为编写编译器的原理和技术还可以用于编译器设计之外的众多领域,这些原理和技术通常会在一个计算机科学家的职业生涯中多次被用到。这句话给出了编译原理课程的教学定位——兼具理论与实践两方面的高要求。

编译器构造各阶段的工作均有其抽象理论基础,涉及多种数学模型,词法分析阶段涉及正则表达式与有穷状态自动机理论;语法分析阶段涉及上下文无关文法;语义分析阶段涉及属性文法、类型系统;而树形结构是表示程序语法结构以及源程序到中间代码翻译的重要模型。编译器中的算法研究同样重要,必须考虑算法的功能、通用性,其中语法分析阶段的算法最为典型,依次引入了一系列算法。而编译器开发的实践性强,需要学生实际动手实现一个规模较大的编译器,这本身是一个较复杂的软件工程项目,必须考虑子模块划分、模块之间信息传递、算法效率、编译器构造自动工具等多方面因素。

编译原理融合多门专业课程,包括来自于计算机科学不同领域的思想,如高级语言程序设计、形式语言与自动机理论、数据结构中树及图形算法;操作系统中存储分配方式、人工智能中的贪婪算法、启发式搜索技术;汇编指令系统等。编译原理和高级语言程序设计联系紧密,学好该门课程有利于学生对程序设计语言的理解,可以迅速掌握新的语言工具,在遇到新的程序语言时,学生不会因为没有学过某一门语言而无从人手,这对学生今后从事软件开发工作有重要价值。编译原理课程蕴含着计算机学科中解决问题的思路和方法。学习编译原理课程,不仅要学习如何构造编译器,还要学习解决复杂和开放性问题的一般方法,从中接受的思维训练将会在今后的学习、工作中逐渐体现其价值。

2 合理安排课程内容,突出重点,注重方法

厦门大学计算机科学系的编译原理课程历年采用经典编译教材“编译原理、技术与工具”,其中讲解的核心编译原理是教学内容的重要部分,包括词法分析、语法分析、语义分析、中间代码生成以及运行时环境、优化和代码生成方法的基本技术,教材中对编译前端的技术进行了详细的阐述,但在一个学期60~64学时课堂讲授中,往往无法详尽地介绍所有内容,需要突出重点,对某些章节适当选择。

例如,运行时环境中有关源程序语言相关问题的讨论、非局部命名的访问、参数传递等高级程序语言设计可略讲,向学生列举这些技术在哪些相关课程、书籍或文献中找到参考,拓宽学生思路,培养其自学能力。代码生成、代码优化等编译器后端技术限于学时数,往往涉及甚少,匆匆带过。而这一部分内容对于编译器构造十分重要,关系到生成代码的质量,也是现代编译技术的研究重点。在教学中可介绍代码优化的主要来源、几种经典的优化方法,优化的主要数据结构和实现技术,让学生对这部分知识有所了解,便于将来深入学习。

又如,语法分析方法是编译教学的重点,详细介绍自顶向下分析和自底向上分析,LR分析中有LR(0)、SLR、LR(1)、LALR不同方法,若拘泥于教材逐一讲授,学生较难接受,没有头绪。教师注重讲授方法,在讲解过程中不断提出问题,寻求解决技术及其背后的原理。在语法分析讲授中先介绍递归子程序法,可以用该方法编写某些语法的语法分析器,但这必须对于每个文法手工编写相应的编译程序,教师提出是否可以找到非递归的自动生成语法分析器的方法问题,由此引出LL(1)分析方法。进一步提出LL(1)分析方法适应的文法是有限定的,是否有更普遍适用的分析方法问题,由此引出自底向上的LR分析方法,从SLR、LR(1)到LALR方法,每一种分析方法的引入相互关联。这一方法能够保证语法分析这一要点有清晰的脉络贯穿,让学生能把握这一主线。

语法制导定义及翻译方案的设计是教学的重点和难点,也是学生学习中反映困难最大的内容。因为它没有普适的一般方法,本质上是一种事件驱动的程序设计,这对于3、4年级的本科生较难掌握。如何把握课程难点的讲授,值得深入探讨。这一部分内容教师采用“归纳法”,在讲解过程中围绕语义描述和计算问题,结合具体实例寻求解决技术,阐述语法制导定义和翻译的作用,强调这些技术将运用于解决类型分析和中间代码生成的语义问题。可以将语义规则求值方法归纳为4点:

(1)由下向上计算S属性定义:用带属性值的语法分析栈实现;

(2)由上向下计算L属性定义:消除左递归后引入继承属性,扩充递归的语法分析器,可以实现预测翻译器;

(3)由下向上计算继承属性:用加标记非终结符的方法,使得嵌入产生式右部的语义动作全部出现在产生式末尾,从而能在归约之前执行语义动作;

(4)遍历分析树的翻译方法,上述3种翻译方法均和语法分析同时进行,但不是所有的SDD都能在语法分析同时完成,给出一般化的求值方法,先建立带语义动作的语法分析树,后遍历执行语义动作,要求属性依赖关系图无环。

这一讲解方法能更好地帮助学生理解抽象的问题,提高分析和综合能力。

3 精心设计实践环节

编译原理是实践性很强的课程,要真正理解编译系统,单纯依靠课堂讲解理论知识是不够的。实验课程是培养学生实践能力,巩固和验证所学理论知识,培养学生分析问题、解决问题能力的重要环节。通过实验环节,使学生对编译程序各功能部分间的接口有更好地理解,对算法的实现细节更明了。

在理想的情况下,完成一个完整的编译系统构造,从词法分析到目标代码生成,直至汇编程序的执行,这有助于真正理解整个编译过程,以及系统的运行过程。但在实际教学过程中,限于课时安排,实验课和课堂讲授同步进行,通常只能完成到中间代码生成阶段。编译程序构造是复杂的程序开发,不可能在课堂教学中把所有细节讲清楚,学生往往难以人手,在有限的时间内,实验的效果不好。为了达到好的实验效果,促进学生对编译原理的理解,教师从以下几个方面开展实验环节教学实践:

(1)注重自动工具的使用。利用kex/Yacc编译器自动生成工具,先实现简单的程序(如算术表达式的转换/求值、HTML文件转化成纯文本文件、C源程序格式化转化),所需知识限于正则表达式和自动生成工具本身的使用方法,对语义分析知识要求较少,可以提供相关的资料和网上相关教程,学生易于入手。目的是使学生体会到编译原理的实用性,提高学习兴趣,并获得编译器自动生成工具的使用经验,提高解决实际问题的能力。

(2)分阶段进行实验。根据课程的特点和大纲的要求,可以设置4个阶段的实验内容,词法分析器的设计实现、由上向下递归下降分析器的设计实现、利用工具生成的自底向上语法分析器、语义分析和中间代码生成器的设计实现。每个阶段需要利用之前得到的实验成果,逐步完成编译器系统的构造,通过明确的阶段划分,接口的定义,提高编译原理实验的完成质量。

(3)提供编译器源代码。编译器构造是一个具有相当规模和相当复杂度的系统,对于本科学生独立动手编写小型语言的编译器是有难度的。为了帮助学生掌握,结合一个小型语言编译器构造的完整实例,提供编译器构造的源代码,要求学生对源代码进行分析、扩充和改造,有助于学生的理解和掌握编译原理的构造技术。例如Alfred Aho著的“编译原理(第2版)”和“编译原理(本科教学版)”附录均给出了一个用Java语言实现的完整的编译器前端,包括:源语言的文法描述、词法分析器、语法分析器、符号表和类型、表达式的中间代码、布尔表达式的跳转代码、控制流语句的中间代码,实现源程序到等价中间代码的转换。Kenneth C,Louden编著的“编译原理与实践”以Tiny语言编译程序作为范例,结合各章内容讲解Tiny语言编译程序中的相关部分的实现方法。

4 对课程发展的思考

为培养高素质的计算机专业人才,重视软件开发能力的培养至关重要。在编译原理课程中强调理论知识的综合应用和编程实践能力的训练,要求学生针对特定语言(如C语言的子集),从文法出发,设计一个编译器构造方案,并以此为基础开发满足要求的编译器,将其看作软件开发的综合训练的重要一环。

编译原理课程的实践是在理论基础知识的指导下进行。学生在学习基本理论后进行实验系统的设计与实现;教师在掌握系统总体构成和基本原理、方法的基础上提出实验的基本要求。鼓励学生选择适当的方法进行系统设计,包括选择自动化生成方法。为实现相应效果,要求学生在每个实验之前应完成设计、描述解决方法并给出算法、编写出源程序、给出测试实例,实验完成后要求提交。学生对编译课程内容积极投入,绝大多数学生都能够在有限时间内独立完成词法分析和语法分析的实验,较优秀的学生能够独立完成中间代码生成的实验。

在教学过程中也发现了一些不足,编译原理的教学和实验对后端工作不够深入,尤其是实验,往往到中间代码生成阶段已经接近学期末,目标代码(汇编代码)生成、寄存器分配、优化等没有充分时间进行,对综合运用C语言、计算机组成原理、汇编等知识锻炼不够。

5 结语

正所谓“教学相长”,提高编译原理课程教学质量,需要教学双方的共同努力,互相促进。对学生而言,要提高自身学习积极性,敢于提出问题、解决问题;对教师而言,在讲授知识的同时,要注重学生能力的培养,激发学生的学习兴趣,充实教学内容,提升教学质量,在教学实践中不断思考、探索、实践和总结。

参考文献:

[1]Aho A,Sethi R'Ullman J D.编译原理[M],赵建华,译,2版。北京:机械工业出版社,2009

[2]张昱,陈意云,郑启龙,编译原理课程的教学方法和教材建设[J],中国大学教育,2005(7):61-62

[3]Aho A,Sethi R,Ullman J D.编译原理[M],赵建华,译,本科教学版,北京:机械工业出版社,2009

[4]Louden K C.编译原理与实践[M],冯博琴,冯岚,译,北京:机械工业出版社,2001:373-380

(编辑:赵廓)

作者:李慧琪

第三篇:“编译原理”实践驱动式教学探讨

摘要:该文针对编译原理的重要性以及当前教学中存在的问题,提出了实践驱动式教学方法,克服了传统课堂理论讲授式教学方法缺点,以实践指导运用作为课堂主要教学手段,提高了学生的学习兴趣和课程的实用性。经实践证明此方法取得良好的教学效果,对“编译原理”教学有一定的指导意义。

关键词:编译原理;实践驱动;教学改革

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)

摘要:该文针对编译原理的重要性以及当前教学中存在的问题,提出了实践驱动式教学方法,克服了传统课堂理论讲授式教学方法缺点,以实践指导运用作为课堂主要教学手段,提高了学生的学习兴趣和课程的实用性。经实践证明此方法取得良好的教学效果,对“编译原理”教学有一定的指导意义。

关键词:编译原理;实践驱动;教学改革

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)

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.

作者:王丽丽 方贤文

上一篇:数字环保论文范文下一篇:制作专业论文范文