编译原理论文范文

时间:2023-11-16 14:37:13

编译原理论文

编译原理论文篇1

【关键词】新闻;目的论;新闻编译

0 引言

新闻翻译是一种目的性的行为。由于各民族间语言、风俗、和文化等差异性的不可避免性,源语言文本很难被译者按照字面的意思翻译。因此,完全地重视源语言新闻有时并不能达到理想的信息传播效果,那么译者需要发挥其主观能动性,采取必要的翻译策略,以达到更有效的信息传播的目的。其次,新闻翻译要求目标语言读者能够理解译文,译文在其介入的交际环境和文化中应有一定的意义。新闻译者需要采取目标语言及目标语言文化定位的翻译策略,使得译文在其介入的的交际环境和文化中有一定的意义。因而,以德国功能派翻译大师H.J.弗米尔(H.J. Vermeer)提出的以目的论为指导理论对新闻翻译具有重要的指导意义。

1 目的论概述

德国功能派大师H.J.弗米尔在二十世纪七十年代摆脱了当时盛行的翻译对等理论的束缚,提出了“目的论”(Skopos theory),为译者在翻译实践中灵活运用翻译策略和方法提供了理论基础,对于有目的的交际行为的新闻翻译具有十分重要的指导意义。目的论所注重的并非译文与原文的对等性,而是译文的可读性,这对于新闻翻译而言,指导意义可见一斑。

目的论强调翻译应遵循三大法则:(1)目的法则(Skopos rule)目的法则是翻译目的论的最高法则,整个翻译行为的目的是决定新闻翻译过程的首要法则。因而,在翻译过程中,翻译策略和翻译方法的选择,都是由翻译目的所决定的。(2)连贯性法则(Coherence rule)连贯性法则要求译文必须符合语内连贯的标准,即译文具有可读性和可接受性,能够使接受者理解并在目标语接受者的文化及使用译文的交际语境中有意义。(3)忠实性法则(Fidelity rule)忠实性法则要求原文与译文之间应该存在语际连贯一致。这相当于其他翻译理论所谓的忠实于原文,但与原文忠实的程度和形式取决于译文的目的和译者对原文的理解。

2 新闻编译的概述

新闻因其本身具备其及时性、重要性、显著性、地方性以及趣味性的特征,因而要求在跨文化新闻翻译中既能保持这些特征,又能准确地表达源语言新闻的意思。新闻编译是通过翻译人员的加工,将源语言新闻通过各种翻译策略和翻译方法的的运用转化为目标语言新闻。编译类似于翻译,都是一个转换过程,即把源语言的信息转换成目的语中意义对应的信息。翻译要求准确和忠实,而新闻编译则不同,它要求译者在一定的目的性的前提下对源语言新闻进行一定的加工,如背景知识的补充、相关新闻的政治性不利言辞的删减、修正等。

3 目的论指导下的英语新闻编译

目的论以目的为总的原则,在新闻编译过程中,它需要新闻编译者通过采取合理有效的新闻编译方法和策略对源语言新闻进行必要的改动,使源语言新闻信息能让目标语接受者正确地理解和接受,这样才能达到有效传播新闻信息的目的。

3.1 缩译法

在新闻编译中缩译法是行之有效的编译方法,它在不改变源语言新闻所传达的中心信息的同时既能节省目标语接受者阅读时间也能准确地表达源语言新闻的意思。

例:Emails and text messages could be read on contact lenses linked to the internet, a new invention.

Researchers constructed a computerized contact lens and demonstrated its safety by testing it on live eyes, and there were no signs of adverse side effects.

The contact lens created by researchers at the University of Washington and Aalto University, Finland, consists of an antenna to harvest power sent out by an external source, as well as an integrated circuit to store this energy and transfer it to a transparent sapphire chip containing a single blue LED.

One major problem the researchers had to overcome was the fact that the human eye, with its minimum focal distance of several centimeters, cannot resolve objects on a contact lens. Any information projected on to the lens would probably appear blurry.

科学家发明隐形眼镜可直接查看邮件短信

研究人员制造了一种计算机化的隐形眼镜,并宣称已经通过肉眼使用的安全测试,没有产生不良副作用的迹象。这种隐形眼镜是由来自华盛顿大学和芬兰阿尔托大学的研究人员共同创造的,其组成部分包括一根用来接收外界信息来源发出的能量的天线,以及一个集成电路,这一电路会把接收到的能量储存起来,并将其转移到一个透明的包含单个蓝色二极管的宝石蓝芯片上。

显而易见,在此新闻编译中,目标语文本较源语言新闻更加短小精悍,因为源语言文本的中的最后一段与标题所表达的意思没有关联,而新闻报道往往由于版面空间的有限的实际情况需要对长篇的新闻报道采取必要的删减,因而缩译法在新闻编译中发挥重要的作用。

3.2 增补法

在新闻编译中,对源语言新闻词语的直接翻译有时往往不能准确地表达所要传达的信息,在此情况下需要译者采取必要的增补方法对源语言新闻进行合理的编译,即编译时按意义上和句法上需要增加一些词来更加忠实通顺地表达原文的思想内容。

例:“铁饭碗”如今已被一个新出现的词“跳槽”代替。

The phrase “iron-rice-bowl”, which refers to the job-for-life system, has been replaced by a new term, Tiao Cao, meaning“to seek better troughs.”

对于中国人而言,“铁饭碗”和“跳槽”所表达的意思是众所周知的,然而对于外国人而言,却是难以理解和领会的,因此在编译中,为了使得译文能准确地表达原文的意思,常常必须增加一些原文字面上没有而在上下文种包含内容的词语。

3.3 改编法

新闻编译是一种有目的性的交际行为,它需要译者在新闻编译中进行有目的的词汇或句子上的合理翻译,尤其是在政治新闻中,对源语言新闻中被曲解的词汇或句子进行正确的修正是十分必要的,这样才能使源语言新闻在目标语受众中得到有效的信息传播。

例:China has considered Taiwan a renegade province since communist forces drove nationalists from the mainland in 1949, and has repeatedly threatened to use military power against the island if it declares independence

中国坚持台湾自1949年以来一直是其不可分割的一个省,并重申如果台湾宣称其独立将采取武力行动。

在此例句中,源语言新闻的读者认为中国把台湾理解为“叛乱省”,这当然是有悖于中国人民大众的意思的,如果直(下转第158页)(上接第145页)接翻译成“叛乱省”势必会影响与台湾人民之间的感情,也是与事实不相符合的,因而,译者巧妙地运用了改编法,把“叛乱省”翻译成“不可分割的一个省”,这样既符合事实也加深了与台湾同胞的感情。

4 结语

翻译目的论作为新闻翻译的指导理论,为新闻翻译研究开辟了一个全新的视角。因而,新闻翻译者可以在目的论的指导下有效地运用各种翻译策略,更好地达到信息有效传播的目的,推动各文化之间的交流。

【参考文献】

[1]王友琴.浅谈目的论与新闻英译的关系[J].牡丹江教育学院学报,2011.

[2]袁健兰.从目的论看新闻英语标题翻译[J].海外英语,2010.

[3]王大志.翻译与翻译伦理[M].北京:北京大学出版社,2012.

[4]郭建中.文化与翻译[M].北京:中国对外翻译出版公司,2000.

[5]彭汉良.新闻翻译中的跨文化思考[J].武汉教育学院学报,1998.

编译原理论文篇2

关键词:编译程序;教学改革;对象式程序设计;java

1引言

编译原理课程是高校计算机类专业的重要基础和骨干课程。编译原理对计算机专业的学生的重要性与高等数学对理科学生的重要性几乎可以相提并论。同时,由于这门课程涉及其他多门课程的知识,使得它成为大学阶段中最难学的课程之一。

从表面上看,编译程序是将高级语言源程序翻译成低级语言程序,但编译程序构造的基本原理和技术也广泛应用于一般软件的设计和实现,其中的设计思想、算法、思维方式和技术都可能会对学生今后的职业发展产生比较大的影响。

当今,程序设计已经基本上从传统的过程式转向对象式,并且正在从对象式转向组件型。这其实是程序设计范型的变迁,是在计算机技术背景下认识世界的观点的变化:过程式将完成事务看成是一系列的步骤,而对象式却将世界看成是由一系列对象组成的,这些对象之间交互合作完成特定的事务。从过程式到对象式,有着质的变化,而非一般的修改和完善,由此带来了语言(算法描述工具)的变化。编程语言影响思维,面向对象的思维方法又促进了编程语言的发展。

目前,程序设计的一些后继课程,如数据结构等都进行了同步跟进,出现了诸如用c++或java描述的数据结构教材。但编译原理课程却没有及时跟进,上述改变基本上没有反映到编译原理课程中。这门课程近20年来基本上没有大的变化,教学内容仍然是基于过程式语言展开的,编译算法和模型描述是用pascal语言或者c语言。虽然个别教材加入了少量关于对象式语言编译技术的内容,那也是稍加点缀而已,作用不大。这就造成了一种奇怪的现象:对象式语言已经成了高校计算机教学的主流语言,社会上大量使用的也是对象式语言,而我们的编译原理教学仍然沿袭旧的一套。这种“状态”严重地脱离了计算机技术的发展和社会的实际需要,因此需要进行“调态”,其根本做法是“转型”,即将本课程的讨论对象从过程式语言转到对象式语言。

国外近年关于编译原理方面的新教材已经有了重要改变,不再连篇累牍地讨论那些已经过时的内容,增加了许多新的内容。其中一个重大改变是出现了用对象式语言描述编译算法和教学模型的编译原理教材,如:用java语言描述的编译原理教材,且其教学模型为minijava。

这种改变也涉及到课程上机实践。众所周知,编译原理课程的学术性和实践性都很强:学术性是这门课程的生命所在,实践性是这门课程的活力所在。因而本课程的上机实践也要作同步调整。

2课程内容围绕对象式语言展开

研究程序设计语言的语法描述需要有文法理论的支持,老教材中文法、词法分析和语法分析部分内容基本上不需要作什么变动。词法分析主要依赖有穷状态自动机理论,语法分析主要讲述ll方法和lr方法,其他方法略做介绍即可,无需展开讨论。ll方法和lr方法含盖了许多分析技术,理论性和应用性都很强,完全可以代表主流技术。

重要的就是研究对象和教学模型的改变。首先,研究对象将从过程式程序设计语言转到对象式程序设计语言(当然还可以兼顾过程式),例如java、c++等,围绕实现这类语言的编译实现技术展开讨论。对象式程序设计语言的要素是封装、继承、多态性,在编译实现时都必须仔细考虑。其次,涉及到对象式程序设计语言编译程序教学的模型选择问题。目前传统的教材选择的教学模型有pl/0、tinic等。实践证明,围绕某个模型展开编译设计技术的讨论,效果是比较好的。课程研究对象和教学模型的改变涉及到调整的章节主要有语法分析、语义分析、代码生成、符号表管理、存贮分配等方面。

一旦我们讨论的模型发生变化,这些章节的内容就要作很大调整。如对象式语言的作用域规则、语言动态特性、模块化封装(类)、类的继承、多态性的实现等,都需要具体的技术来实现,这些都要反映在教材和教学中。

就课程中关于代码生成内容来看,目前java编译程序生成java虚拟机(jvm)代码,c#生成msil虚拟机代码。这两个虚拟机作为教学模型来说可能比较复杂了一些,在教学中可以选定一个简单的子集;或者在pl/0虚拟机上适当增加一些指令代码,以便于代码生成、存贮分配等部分的讲解。

实践证明,作为教学模型,在教材上提供一个小型语言的编译程序供学生分析和研究,非常有利于加深对基本原理的理解和掌握。这个小型编译程序可以比较小但应该能够说明一些基本问题,例如传统的编译原理课程中选择pl/0编译程序作为教学模型,就收到了比较好的教学效果。在对象式程序设计语言编译原理课程中选择object-pl/0或者minijava作为教学模型是比较恰当的。前者是在传统的pl/0语言上增加类,补充封装、继承、多态性之语言成分得到的;后者是对java语言进行适当简化得到的,

编译原理课程可以围绕此模型展开讨论。国外已经有这类教材出现,并且不少大学已经开始使用。

3用对象式语言描述编译算法和教学模型

本课程中各类编译算法都应该伴随着教学模型的变化,改用对象式语言来描述,如用java语言描述或者用c++语言描述。其中一个重大的变化是教学模型如minijava或object-pl/0要用对象式语言实现,也就是提出了教学模型的面向对象构造问题,这就比较好地将讨论对象和描述讨论对象的语言统一起来了。国外有的教材就选择了用java描述minijava编译程序。

编译程序是一个重要的中大型软件,传统的编译程序大都是用pascal、c等语言描述的(参见图2)。像编译程序这样的中大型程序如何用类这个工具来进行分解,其实是对学生的对象式程序设计能力的一个重要检验。学习用对象式语言来描述编译程序,学生可能会受到一次严格的对象式语言程序设计训练,编译程序如何用类这个工具进行分解,这些类(对象)如何合作完成编译任务,都需要较好的对象式程序设计基础。图3是一个程序设计语言文法的面向对象表示。

传统的编译程序构造主要存在如下一些问题:

(1)传统编译程序试图通过将编译程序根据功能模块分解,而使整个编译程序的复杂性降低。这种方法虽然在一定程度上简化了编译过程。但为了处理大型、复杂且多变的编译程序,仅仅将它按照功能分解成词法分析、语法分析、语义处理和代码生成几个阶段是远远不够的。

(2)传统的编译程序构造中,编译的每个阶段依然是大型、复杂的,且每个阶段内部依然存在复杂的联系,这对编译程序的可维护性没有实际上的改变,反而造成维护困难。

(3)虽然传统的编译程序构造有着丰富的理论基础,也有一些工具诸如lex、yacc等,但对一个具体的编译程序的构造仍然要从最基本的描述开始。传统的编译程序构造的功能分解方法缺乏支持复用的良好机制。

总之,过程式程序设计范式存在的问题在编译程序设计中广泛存在。而用对象式程序设计语言来描述编译程序,则对象式程序设计范式带来的好处基本上都能够得到。具体主要表现在:

(1)编译程序效率高。由于面向对象的编译程序构造采用的是语法树构造法,可以得到上下文相关信息,并根据上下文进行语法树的优化,所以生成的代码效率高。

(2)复用方便。由于语法类和具体的语法结构一一对应,所以在复用语法结构时,可以直接得到能被复用的语法类,不需要经过查找过程。

(3)修改方便。由于面向对象方法中的封装和多态等技术的实现,语义处理方法中所用到的数据都是局部数据,因此要做语义修改时,只要继承相应的语法类,并且重载相应的语义处理方法即可,需修改的内容较之传统方法要少。

(4)有利于构造编译程序类库,使得编译程序的构造能够大量复用已有的类,这是更高层次上的复用。

4课程实验的设计

计算机学科是一门技术学科,它虽然有一定的科学的成分,但工程技术的成分更多一些,因此需要加强动手能力的培养。编译原理课程除了注重它的原理性,还必须注重其实践性。学习这门课程时,学生对编译的理解往往只停留在书本的概念上,而不知道怎样把编译理论应用到实际的编译程序设计的实践中。另外,有些学校只将教学内容锁定在文法、词法分析(有穷状态自动机)、语法分析(ll、lr文法)上,以应付学生考研的需要。这些做法使得学生很难掌握这门课程的精髓。

图2传统的编译程序功能分解

图3程序设计语言文法的面向对象表示

编译系统可能是所有软件系统中最复杂的系统之一,通过本课程实践环节的教学,还可以帮助学生掌握一些大、中型软件设计的技术和技巧,提高学生面向对象软件开发的综合能力。

传统的编译原理课程往往要求学生自己实现一个词法分析程序;实现一个基于递归子程序递归下降分析程序或基于预测分析表的语法分析程序;为某虚拟机(例如pl/0虚拟机)生成代码;对教学模型(例如pl/0)进行扩充,写出完整的编译程序等。且在此过程中学生可以借助词法分析自动生成程序lex和语法分析自动生成程序yacc进行有关实验。我们要求学生通过对教学模型的分析,能够在机器上动手实现一个小的编译系统,以加深对编译整个过程的一致性、连贯性、整体性的理解。

一旦我们的讨论对象改变为对象式语言,则其编译程序语法和词法分析的自动生成不能再采用lex、yacc这类工具了,需要改用javacc(javacompilercompiler)或sablecc等,它们都能生成java语言代码;或者使用jikespg(jikespasergernerator),它生成c++代码。

我们初步制定了本课程的实践环节,它主要分四个层次:

(1)借助javacc或sablecc等工具让学生自动生成小语言的词法分析和语法分析程序。这个实验的目的是教会学生关于词法分析和语法分析的自动生成,同时弄清这些工具生成出来的代码的程序结构,特别是面向对象的类结构。

(2)为上面生成的语法树添加语义动作,完成生成代码的工作。这个实验的目的是让学生理解如何在抽象语法树上添加语义动作,理解为虚拟机生成代码的知识。

(3)扩展教学模型,如minijava,为其增加一些语言成分,如有关语句等,然后为其构造完整的编译程序。这一实验让学生把握编译的总体,弄清各部分之间的关系。

(4)逐步构造面向对象的编译程序类库,使得“编写”编译程序逐步走向“组装”编译程序。

5结束语

对计算机人才的层次结构、知识、能力与素质等方面的要求在很大程度上取决于计算机市场。我们需要与时俱进,适时考虑相应教学体系和内容的改变。依赖过程范性的编译原理课程势必要被依赖对象范性的编译原理课程所取代,这是软件技术发展和社会实际应用的需要。但建立本课程新的课程信念、课程价值、课程技术等尚需时日,需要不断探索和创新。

编译原理论文篇3

关键词: 第一堂课; 编译原理; 教学; 动态演示

中图分类号:TP314 文献标志码:A 文章编号:1006-8228(2014)03-59-03

0 引言

请经验丰富、学术造诣深厚的名师为大学新生开设学科导论课,可让学生更好地了解本学科和专业的知识体系及发展趋势,掌握本学科和专业的研究方法和思维方式,解决本专业“为何学、学什么、怎么学”的问题[1]。同样,对于一门课,也需要在教学的开始安排导论性的内容,以帮助学生解决这门课“为何学、学什么、怎么学”的问题。这就要求任课教师精心进行教学设计,上好课程教学的第一堂课。

1 如何上好第一堂课

如果说学科是一片森林,那么课程就是一棵棵树木,如果说学科导论课是为了让学生掌握森林的导航地图,那么课程导论就是为了让学生掌握某棵树木的总体概貌。课程导论要说清楚树木在森林中的位置与作用,以及树木本身的主要枝杈,而不是去研究细小的枝丫,甚至树叶。第一堂课如何上,很大程度上决定了课程教学的成败。

1.1 第一堂课的教学内容

第一堂课应以教师讲授为主,需要向学生讲授的内容有以下几个方面。

⑴ 课程在学科体系中的地位

学科的知识体系是由一门一门的课程构建起来的,每门课在学科知识体系中都有其特有的地位和作用。第一堂课首先要介绍课程的历史、现状和发展趋势,介绍该门课的前导课程和后续课程,以及该课程与前导课程和后续课程之间的关系,让学生对该课程在学科体系中的地位和作用有个清楚的认识,使得学生在后续的学习过程中明确大方向。

⑵ 课程主要内容概览

每门课都有自身的核心内容和知识结构,对学生来说,课程学习首先就需要解决“学什么”的问题。第一堂课需要向学生概略性地介绍本门课程的主要内容、知识点,以及知识点之间的关系。最好是能将课程的主要内容以知识点为单位串联起来,形成一个完整的知识图谱,使得学生在后面的学习过程中做到胸中有丘壑,在学习具体章节或者知识点的时候不会迷路。

⑶ 课程的作用

学习某门课程,其作用体现在很多方面。一是可以通过课程学习来构建完整的学科知识体系,并为后续学习打下基础;二是可以通过学习掌握本课程的相关知识,为将来解决实际问题提供帮助;三是课程学习对培养学生专业素养和能力的促进作用,这一点很重要。在第一堂课中应向学生介绍本课程的多方面作用,解决学生“为何学”的问题,这对于激发学生的学习兴趣非常重要。

⑷ 课程的学习方法

每门课都有其自身的性质和特点,计算机专业的课程可分为理论类、实践类、编程类等。课程的性质和特点不同,学习方法也各不相同。第一堂课需要向学生介绍课程的类属,本课程与别的课程的区别与类同之处,课程各部分内容的比例,课程的实验或者上机要求等。然后结合课程特点,介绍本课程的学习方法,比如是采用理论思辨、算法分析,还是编程验证,为学生解决“如何学”的问题。

1.2 第一堂课的教学方法

第一堂课的目的是介绍课程的总体概貌,激发学生的学习兴趣。要达到这个教学目的,需要采用合适的教学方式。首先不能让课堂气氛严肃压抑,而应该营造得轻松愉快一点。最好以讲故事的方式开始,介绍课程的发展史和发展过程中重要科学家的事迹。在介绍课程内容概貌时,应该采用形象、直观、易记的方式,比如图、表、动画、音频、视频等。为介绍课程的作用,增强学生学习动力,可以用具体实例说明课程知识在解决实际问题过程中的应用,以及在专业素养和专业能力培养方面所发挥的作用。可以说上好第一堂课,课程教学就成功了一半。

2 “编译原理”第一堂课

“编译原理”是计算机专业的重要基础课,在教学中存在着教难、学难、实验组织难等问题,是计算机专业教学中一门公认的难上课程[2],因此上好“编译原理”第一堂课显得尤为重要。

编译系统在现代计算机系统中占有重要的地位,它是直接运行在操作系统之上的一类重要系统软件,如图1所示。

[裸机][操作系统][编译系统]

图1 编译系统的地位

编译原理课程的目的在于系统地向学生讲述编译系统的结构、工作流程及编译程序各组成部分的设计原理和实现技术,使学生通过课程学习,既掌握编译理论和方法方面的基本知识,也初步掌握设计、实现、分析和维护编译程序的技能。编译原理课程与其他课程之间的关系如图2所示。

[高级语言程序设计][自动机和形式语言][操作系统][数据结构][离散数学][编译理论][素材] [控制对象][技术][基础]

图2 “编译原理”与其他课程的关系

向学生介绍编译原理课程在学科体系中的地位之后,还需向学生概略性介绍课程的主要内容。编译原理课程内容纲要如图3所示。编译原理课程教学中几乎所有内容都是围绕这一纲要展开的。

[符号表管理][中间代码生成][语义分析][语法分析][词法分析][目标代码生成][代码优化][源程序][目标代码][错误诊断处理]

图3 “编译原理”课程内容纲要

编译原理课程要重点介绍编译的整个过程,这一过程包括词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等步骤(见图3)。编译过程是非常复杂的,但是编译过程中每个阶段完成的主要工作又是非常明确的。

让学生掌握编译过程各阶段分别完成哪些编译工作,并在脑海中建立深刻印象,对后续教学是非常关键的。为此,我们采用多媒体开发工具FLASH CS3[3],自行设计开发了一个“编译过程动态演示系统”,系统导航界面如图4所示。

图4 编译过程动态演示系统导航界面

系统将文本、表格、图形、音频、视频等不同的媒体结合在一起,以形象直观的方式动态演示高级程序设计语言编译过程各个阶段对源程序或其中间表示的处理工作,并以一个典型的源程序例子为对象,展示其编译过程中的变换情况。图5是代码优化阶段的实例变换情况动态展示。

图5 代码优化实例展示

通过播放以上演示系统,可以使学生轻松掌握编译中的几个核心概念,更重要的是可以牢固把握整个高级程序的编译过程及其特点,更深刻理解编译原理课程学习的核心内容,使得学生在后续学习中无论在学习哪部分内容都明白当前内容在课程知识体系中所处的位置。

编译原理是计算机相关专业尤其是软件类专业的核心课程,对于学科知识体系的构建是不可或缺的,这对于提高学生的专业素养和软件开发能力是至关重要的。如果一个软件类专业的学生不能深刻理解高级语言程序的编译理论与核心算法,在进行程序开发的时候也就无法写出高质量的程序。虽然编译原理课程主要讲述编译理论(形式语言与自动机)与经典的编译算法,而绝大多数学生毕业后并不会从事编译器开发工作,但是学习该课程仍然是重要的和有益的。首先编译器本身就是一个大型软件,剖析这一大型软件的系统结构,对于培养学生的软件开发能力非常有帮助。另外,编译原理课程中涉及到的算法与技术可应用到其他软件的开发中,如文本分析与处理器、情报检索软件、模式识别软件等。应该在第一堂课向学生讲述课程的重要作用,激发学生对本课程的学习兴趣。

编译原理是一门典型的理论与实践相结合的课程,如何学好这门课程也是在第一堂课需要向学生重点阐述的。学好该课程,首先需要牢固掌握编译的经典算法,虽然这些算法已有几十年的历史,但是在现代编译器设计中仍然被广泛采用,这一点必须向学生说清楚,以免其对学习产生抵触心理。为了让学生能轻松掌握编译中的主要算法,我们采用Flash CS3,设计实现了一个编译算法动态演示系统[4],能够对几个经典的编译算法(NFA到DFA的等价转换算法、LL分析器的组成和分析算法、SLR分析器的组成和分析算法)进行全方位动态演示。

要学好编译原理,只学习理论是不够的,也是难以真正掌握的,根据学习进程去剖析一个实际编译器的源代码是一个很好的学习方法,最好在第一堂课就提供这样一个编译程序实例,并向学生提出具体的要求。

实验部分是编译原理课程教学中的重要环节。目前大多数高校在编译原理课程的实践环节都要求学生能上机实现一个小型模型语言的编译程序。这对于大部分学生来说似乎是一个不可能完成的任务。为了克服学生的畏难心理,我们在第一堂课向学生提供一个类Pascal语言的可拆卸式编译器[5]。该编译器是往届学生在课程实验中设计实现的。这样,一方面提供了一个编译器的范例供学生学习参考,另一方面也告诉学生,编译器设计并没有那么神秘,通过他们自身努力是可以实现的,从而增强学生上机实验的动力,并进一步激发其学习兴趣。

3 结束语

第一堂课是教师和学生的第一次见面,第一堂课教学效果的优劣在很大程度上决定了整个课程教学的成败,因此教师必须高度重视第一堂课。第一堂课的内容一般是导论性的,涉及课程的性质、地位和作用,课程的学科基础、主要内容、知识结构、学习方法和应用领域等多个方面。本文简要介绍了第一堂课的教学内容和教学方法,重点介绍了我们课程组在“编译原理”第一堂课中的教学手段和教学方法,如图表法、动态演示法等。在教育界不断强调提高本科教育质量,强调素质教育的今天,希望本文研究不仅对编译原理教学,也对计算机相关专业课程,甚至对其他工科专业的课堂教学起到参考作用。

参考文献:

[1] 朱振岳.杭州电子科大教授给新生做“向导”[N].中国教育报,

2013.10.11.

[2] 谌志群,王小华,朱文华.编译原理课程的教学改革思路[J]. 杭州电子

科技大学学报(社会科学版),2007.3(4):69-72

[3] 王环,李安宗.新编中文Flash CS3实用教程[M].西北工业大学出版

社,2009.

[4] 谌志群,王荣波.基于Flash的编译算法动态演示系统设计[J].计算机

时代,2011.9:59-61

[5] 谌志群,王小华.面向试验教学的可拆卸小型编译器设计[J].现代教

编译原理论文篇4

继往开来,与时俱进

――更好地用马克思主义指导实践的需要

高度重视马克思主义理论的研究和建设,是中国共产党的优良传统。中国共产党从诞生之日起就把马克思主义写在自己的旗帜上,并开始有组织、有计划地编译出版马克思主义经典著作。

1921年9月,人民出版社在上海成立,翻译出版了《共产党宣言》等一批马克思主义经典著作单行本,对我国革命力量的成长起了巨大的推动作用。

1938年,马克思主义经典著作编译和研究的专门机构在延安成立。在抗日战争和解放战争时期条件十分困难的情况下,相继推出《马克思恩格斯丛书》10种、《列宁选集》18卷等经典著作,出版了许多单行本和专题文集。

新中国成立以后特别是改革开放以来,马克思主义经典著作编译工作得到长足发展,陆续推出了《列宁全集》、《马克思恩格斯全集》以及《马克思恩格斯选集》、《列宁选集》等一大批经典著作,有力促进了全党的马克思主义理论学习。

党的十六大以来,以同志为总书记的党中央,从推进中国特色社会主义伟大事业全局的高度,作出了实施马克思主义理论研究和建设工程的重大战略决策。2004年1月,中央下发了关于实施马克思主义理论研究和建设工程的意见,明确提出要重新修订和编译马克思主义经典作家的重要著作。

中央高度重视这项工作。中央领导同志亲自审核编辑方案,就编辑方针、审订原则和出版质量提出明确要求,明确提出要坚持科学的态度和方法,“确保译本的准确性和权威性”使两部文集成为精品。同时,在编译出版的整个过程中,给予了及时有力的指导,帮助解决了一系列实际问题,从根本上保证了两部文集编译出版工作的顺利推进。马克思主义理论研究和建设工程抽调最强的编译力量,组成了马克思主义经典作家重点著作译文审核和修订课题组。这是一个立足当前、着眼长远的重要部署,是一个强基固本、凝魂聚气的重大举措。

马克思主义经典著作是人类文明的瑰宝,是马克思主义政党的精神支柱和强大思想武器。无论时代如何发展,无论国际风云如何变幻,坚持以马克思主义为指导始终是我们不可动摇的原则。中国作为世界上最大的社会主义国家,中国共产党作为世界上最大的马克思主义政党,在研究、传播马克思主义方面可以说义不容辞、责无旁贷。

马克思主义经典著作编译课题组负责人谈到,对马克思主义经典著作的编译工作是一个永无止境的过程,不可能一劳永逸,也要与时俱进。由于种种原因,我国过去出版的马克思主义经典著作,或多或少存在编译不够准确、阐释注解不到位甚至不正确的地方,有必要重新进行校译和审核,为学习研究马克思主义经典著作提供更好的版本。

一些专家学者认为,我国已经出版的选集、全集或失之过简,或篇幅过大,不能满足干部群众特别是领导干部学习研究的需求,迫切需要有一个能体现马克思列宁主义的理论精髓、篇幅适中的基础性读本。《马克思恩格斯文集》和《列宁专题文集》的问世,为深入学习研究马克思主义基本原理,全面理解和掌握马克思主义中国化最新成果,提供了权威的基础文本。

还要看到,在实际工作中,一些人不同程度地存在着用教条主义和实用主义的态度对待马克思主义的问题。比如,对马克思主义的一些重要思想观点没有足够重视、深入阐发;对一些本来不属于马克思主义的观点,附会、强加在马克思主义名下;对马克思主义经典作家在特定历史条件下的具体论述作了机械的、僵化的理解。

重新编译马克思主义经典著作,一个重要任务,就是要帮助人们分清哪些是必须长期坚持的马克思主义基本原理,哪些是需要结合新的实际加以丰富发展的理论判断,哪些是必须破除的对马克思主义的教条式理解,哪些是必须澄清的附加在马克思主义名下的错误观点,就是为了人们能够更好地掌握和运用马克思主义。

2004年4月,《马克思恩格斯文集》的编辑和译文审核修订工作启动;8月,《列宁专题文集》的编辑工作拉开序幕。在党中央的坚强领导和亲切关怀下,在马克思主义理论研究和建设工程的精心组织下,经过5年多的不懈努力,这项重要工作圆满完成。

两部文集的出版是党的思想理论建设的一件大事,是马克思主义理论研究和建设工程的一个重大成果,对于推进中国特色社会主义伟大事业,推进党的建设新的伟大工程,具有重要的现实意义和深远的历史意义。

砥砺奋进,精益求精

――更加准确反映马克思主义经典作家的原意

作为马克思主义理论研究和建设工程的重点项目,两部文集从立项之日起,工程主管部门就十分重视,精心组织、周密安排,从具体内容到装帧设计都给予了具体指导和帮助。

马克思主义理论研究和建设工程办公室先后组织召开7次集中审议会和两次书面审议,对两部文集的总体框架、收文原则、各卷编目以及译文修订和题注等内容进行认真审议,提出了许多宝贵意见,极大地提升了两部文集的编译质量。

工程咨询委员以极端负责的精神,高标准、严要求,出色地完成了政治和学术把关任务。有的咨询委员抱病审读提纲和书稿。有的咨询委员不顾年迈体弱,坚持参加每一次审议。有的咨询委员不辞辛劳,查阅大量资料,认真修改、精心批注。他们精益求精、一丝不苟的精神感染、激励着每一位课题组成员。

编译马克思主义经典著作是一项严肃的事业。5年来,课题组和编审委员会时刻铭记党中央的嘱托,全力以赴、齐心协力,相互砥砺、埋头苦干,度过了2000多个难忘的日日夜夜。

课题组成员年龄最大的80岁,最年轻的不到30岁。多位退下来的老专家不计名利,不讲报酬,心甘情愿地投入到这项事业中。在大量艰巨复杂的工作中,老专家发挥了中坚作用。一批优秀的中青年骨干勇挑重担,迎难而上,完成了一个个攻坚任务。

一位参加过许多马克思主义经典著作编译工作的老同志动情地说:“我们这些年逾古稀的老人在晚年还能参加马克思主义理论研究和建设工程这一重点项目的工作,继续为马克思主义经典著作的编译事业尽自己的绵薄之力,感到十分荣幸和无比欣慰。”

编译过程中,最重要的任务是审核修订马克思恩格斯著作的译文。在《马克思恩格斯文集》中,除《资本论》及其手稿因不久前刚刚修订过译文,这次只是作个别修订外,其余各卷译文都对照原文逐字逐句作了审核和修订,主要修改了没有确切反映原著理论内涵和逻辑思路的译文,还修改了译文表达不顺畅、逻辑关系不清楚、容易引起歧义的段落句子。

译文修订不是简单的文字改动,必须确切把握马克思恩格斯的原意。对一些不易理解的语句,课题组都要反复推敲,参考不同文字的多个版本的译文,通过集体讨论,在弄清原意后再作修订。有些重大修改经过编审委员会的认真研究才确定修改方案。在修订过程中,还收集了学术界对马克思恩格斯著作译文的意见,对这些意见作了认真研究,汲取其中合理的建议。正是这种严谨的科学态度,保证了译文修订的准确性。

不忽略一处细节,不放过一个错误,这是课题组全体成员对待这项工作的共同态度。

为了精益求精,编译中要进行大量重复性、机械性的工作,十分枯燥,比如各处引文的统一、各专门术语和名词的统一,都要在每篇著作中逐一对照。据介绍,仅名目索引的核校这一项工作,就花去了一名工作人员一年半的时间。

为了精益求精,常常要咬文嚼字。在编译过程中,有些学者提出批评和建议,十分中肯,对提高译文的准确性有很多帮助,课题组接受了一些意见,修订了原来的译文。对一些有争议的译文,课题组本着科学的精神,反复研究,不管是否修改,都提出了充分理由。

为了确保译著文字、标点准确无误,中央编译局和人民出版社的工作人员进行了20多遍校核,努力保证不错一字一点。

特色鲜明,重点突出

――集中体现马克思主义的思想精髓

《马克思恩格斯文集》正文约480万字,各种资料约160万字,总字数约640万字。《列宁专题文集》正文约120万字,各种资料约30万字,总字数约150万字。打开两部文集,读者会发现它们鲜明的时代特色、实践品格和创新意识。

《马克思恩格斯文集》选文精当,内容完整,既全面反映了马克思主义理论的科学体系,又充分体现了马克思主义与时俱进的理论品格。文集精选了马克思和恩格斯在各个时期有代表性的著作,内容涵盖了马克思主义的主要组成部分――哲学、政治经济学和科学社会主义,还涵盖了马克思主义创始人在政治、法学、史学、教育、新闻、科技、文艺、军事、民族、宗教等方面的重要论述,还从马克思、恩格斯的数以千计的书信中选收了280封书信编成专卷。

《马克思恩格斯文集》体例新颖,结构严谨,既反映经典作家理论创造的历程,又突出重点著作的地位。与以前出版的全集和选集均按照编年原则编排不同,文集首次采用按年代编排与重要专著单独设卷相结合的编辑方法,既体现了马克思主义基本理论形成发展的历史进程,同时又突出了《资本论》、《反杜林论》等著作在马克思主义科学体系中的重要地位。

《列宁专题文集》的编辑,则采取了另一种思路。文集从60卷《列宁全集》中精选115篇最具代表性的著作,同时从本卷未收的著作中摘选与本专题有关的重要论述,编成《重要论述摘编》,作为对所收文献的补充。这种新的编辑体例,把系统反映列宁主义科学内涵同密切结合新时期理论武装工作需要这两个要求有机统一起来,既注重反映列宁毕生坚持和发展马克思主义的理论贡献,又着眼于适应干部群众学习中国特色社会主义理论体系的实际需要。

两部文集用新的思路改写了各篇著作的题注,力求用简练的文字概述每篇著作的主要观点,帮助读者掌握原著的理论要义和思想精髓,增强了题注的导读性,不仅可以让读者理解原著,而且有助于澄清对马克思主义理论观点的一些误解。

编译马克思主义经典著作的目的,主要是为了更好地学习和运用。两部文集的出版,为党的思想理论建设提供了鲜活教材。在两部文集出版座谈会上,中央领导同志明确提出,学习运用两部文集,要坚持以我们正在做的事情为中心,着眼于马克思主义理论的运用,着眼于对实际问题的理论思考,着眼于新的实践和新的发展。要紧密联系我们党领导亿万人民从事的伟大事业,紧密联系用科学理论武装全党、教育人民的工作,把学习研究两部文集与推进马克思主义学习型政党建设紧密结合起来,与推进马克思主义中国化、时代化、大众化紧密结合起来,与研究阐释中国特色社会主义理论体系紧密结合起来,与学习贯彻科学发展观紧密结合起来,与开展社会主义核心价值体系学习教育紧密结合起来,努力掌握马克思主义立场、观点、方法,不断推进用发展着的马克思主义指导新的实践。

思想闪耀光辉,理论显现魅力。在新的历史条件下坚持和发展马克思主义,需要广大干部群众解放思想、实事求是、与时俱进,不断赋予马克思主义以新的内涵,使马克思主义焕发出强大生机和活力。

编译原理论文篇5

关键词:编译程序;教学改革;对象式程序设计;Java

1 引言

编译原理课程是高校计算机类专业的重要基础和骨干课程。编译原理对计算机专业的学生的重要性与高等数学对理科学生的重要性几乎可以相提并论。同时,由于这门课程涉及其他多门课程的知识,使得它成为大学阶段中最难学的课程之一。

从表面上看,编译程序是将高级语言源程序翻译成低级语言程序,但编译程序构造的基本原理和技术也广泛应用于一般软件的设计和实现,其中的设计思想、算法、思维方式和技术都可能会对学生今后的职业发展产生比较大的影响。

当今,程序设计已经基本上从传统的过程式转向对象式,并且正在从对象式转向组件型。这其实是程序设计范型的变迁,是在计算机技术背景下认识世界的观点的变化:过程式将完成事务看成是一系列的步骤,而对象式却将世界看成是由一系列对象组成的,这些对象之间交互合作完成特定的事务。从过程式到对象式,有着质的变化,而非一般的修改和完善,由此带来了语言(算法描述工具)的变化。编程语言影响思维,面向对象的思维方法又促进了编程语言的发展。

目前,程序设计的一些后继课程,如数据结构等都进行了同步跟进,出现了诸如用C++或Java描述的数据结构教材。但编译原理课程却没有及时跟进,上述改变基本上没有反映到编译原理课程中。这门课程近20年来基本上没有大的变化,教学内容仍然是基于过程式语言展开的,编译算法和模型描述是用PASCAL语言或者C语言。虽然个别教材加入了少量关于对象式语言编译技术的内容,那也是稍加点缀而已,作用不大。这就造成了一种奇怪的现象:对象式语言已经成了高校计算机教学的主流语言,社会上大量使用的也是对象式语言,而我们的编译原理教学仍然沿袭旧的一套。这种“状态”严重地脱离了计算机技术的发展和社会的实际需要,因此需要进行“调态”,其根本做法是“转型”,即将本课程的讨论对象从过程式语言转到对象式语言。

国外近年关于编译原理方面的新教材已经有了重要改变,不再连篇累牍地讨论那些已经过时的内容,增加了许多新的内容。其中一个重大改变是出现了用对象式语言描述编译算法和教学模型的编译原理教材,如:用Java语言描述的编译原理教材,且其教学模型为MiniJava。

这种改变也涉及到课程上机实践。众所周知,编译原理课程的学术性和实践性都很强:学术性是这门课程的生命所在,实践性是这门课程的活力所在。因而本课程的上机实践也要作同步调整。

2 课程内容围绕对象式语言展开

研究程序设计语言的语法描述需要有文法理论的支持,老教材中文法、词法分析和语法分析部分内容基本上不需要作什么变动。词法分析主要依赖有穷状态自动机理论,语法分析主要讲述LL方法和LR方法,其他方法略做介绍即可,无需展开讨论。LL方法和LR方法含盖了许多分析技术,理论性和应用性都很强,完全可以代表主流技术。

重要的就是研究对象和教学模型的改变。首先,研究对象将从过程式程序设计语言转到对象式程序设计语言(当然还可以兼顾过程式),例如Java、C++等,围绕实现这类语言的编译实现技术展开讨论。对象式程序设计语言的要素是封装、继承、多态性,在编译实现时都必须仔细考虑。其次,涉及到对象式程序设计语言编译程序教学的模型选择问题。目前传统的教材选择的教学模型有PL/0、Tini C等。实践证明,围绕某个模型展开编译设计技术的讨论,效果是比较好的。课程研究对象和教学模型的改变涉及到调整的章节主要有语法分析、语义分析、代码生成、符号表管理、存贮分配等方面。

一旦我们讨论的模型发生变化,这些章节的内容就要作很大调整。如对象式语言的作用域规则、语言动态特性、模块化封装(类)、类的继承、多态性的实现等,都需要具体的技术来实现,这些都要反映在教材和教学中。

就课程中关于代码生成内容来看,目前Java编译程序生成Java虚拟机(JVM)代码,C#生成MSIL虚拟机代码。这两个虚拟机作为教学模型来说可能比较复杂了一些,在教学中可以选定一个简单的子集;或者在PL/0虚拟机上适当增加一些指令代码,以便于代码生成、存贮分配等部分的讲解。

实践证明,作为教学模型,在教材上提供一个小型语言的编译程序供学生分析和研究,非常有利于加深对基本原理的理解和掌握。这个小型编译程序可以比较小但应该能够说明一些基本问题,例如传统的编译原理课程中选择PL/0编译程序作为教学模型,就收到了比较好的教学效果。在对象式程序设计语言编译原理课程中选择Object-pl/0或者MiniJava作为教学模型是比较恰当的。前者是在传统的PL/0语言上增加类,补充封装、继承、多态性之语言成分得到的;后者是对Java语言进行适当简化得到的,其主要语法描述如图1所示。

图1MiniJava语法

编译原理课程可以围绕此模型展开讨论。国外已经有这类教材出现,并且不少大学已经开始使用。

3 用对象式语言描述编译算法和教学模型

本课程中各类编译算法都应该伴随着教学模型的变化,改用对象式语言来描述,如用Java语言描述或者用C++语言描述。其中一个重大的变化是教学模型如MiniJava或Object-pl/0要用对象式语言实现,也就是提出了教学模型的面向对象构造问题,这就比较好地将讨论对象和描述讨论对象的语言统一起来了。国外有的教材就选择了用Java描述MiniJava编译程序。

编译程序是一个重要的中大型软件,传统的编译程序大都是用PASCAL、C等语言描述的(参见图2)。像编译程序这样的中大型程序如何用类这个工具来进行分解,其实是对学生的对象式程序设计能力的一个重要检验。学习用对象式语言来描述编译程序,学生可能会受到一次严格的对象式语言程序设计训练,编译程序如何用类这个工具进行分解,这些类(对象)如何合作完成编译任务,都需要较好的对象式程序设计基础。图3是一个程序设计语言文法的面向对象表示。

传统的编译程序构造主要存在如下一些问题:

(1)传统编译程序试图通过将编译程序根据功能模块分解,而使整个编译程序的复杂性降低。这种方法虽然在一定程度上简化了编译过程。但为了处理大型、复杂且多变的编译程序,仅仅将它按照功能分解成词法分析、语法分析、语义处理和代码生成几个阶段是远远不够的。

(2)传统的编译程序构造中,编译的每个阶段依然是大型、复杂的,且每个阶段内部依然存在复杂的联系,这对编译程序的可维护性没有实际上的改变,反而造成维护困难。

(3)虽然传统的编译程序构造有着丰富的理论基础,也有一些工具诸如Lex、Yacc等,但对一个具体的编译程序的构造仍然要从最基本的描述开始。传统的编译程序构造的功能分解方法缺乏支持复用的良好机制。

总之,过程式程序设计范式存在的问题在编译程序设计中广泛存在。而用对象式程序设计语言来描述编译程序,则对象式程序设计范式带来的好处基本上都能够得到。具体主要表现在:

(1)编译程序效率高。由于面向对象的编译程序构造采用的是语法树构造法,可以得到上下文相关信息,并根据上下文进行语法树的优化,所以生成的代码效率高。

(2)复用方便。由于语法类和具体的语法结构一一对应,所以在复用语法结构时,可以直接得到能被复用的语法类,不需要经过查找过程。

(3)修改方便。由于面向对象方法中的封装和多态等技术的实现,语义处理方法中所用到的数据都是局部数据,因此要做语义修改时,只要继承相应的语法类,并且重载相应的语义处理方法即可,需修改的内容较之传统方法要少。

(4)有利于构造编译程序类库,使得编译程序的构造能够大量复用已有的类,这是更高层次上的复用。

4 课程实验的设计

计算机学科是一门技术学科,它虽然有一定的科学的成分,但工程技术的成分更多一些,因此需要加强动手能力的培养。编译原理课程除了注重它的原理性,还必须注重其实践性。学习这门课程时,学生对编译的理解往往只停留在书本的概念上,而不知道怎样把编译理论应用到实际的编译程序设计的实践中。另外,有些学校只将教学内容锁定在文法、词法分析(有穷状态自动机)、语法分析(LL、LR文法)上,以应付学生考研的需要。这些做法使得学生很难掌握这门课程的精髓。

图2传统的编译程序功能分解

图3程序设计语言文法的面向对象表示

编译系统可能是所有软件系统中最复杂的系统之一,通过本课程实践环节的教学,还可以帮助学生掌握一些大、中型软件设计的技术和技巧,提高学生面向对象软件开发的综合能力。

传统的编译原理课程往往要求学生自己实现一个词法分析程序;实现一个基于递归子程序递归下降分析程序或基于预测分析表的语法分析程序;为某虚拟机(例如PL/0虚拟机)生成代码;对教学模型(例如PL/0)进行扩充,写出完整的编译程序等。且在此过程中学生可以借助词法分析自动生成程序Lex和语法分析自动生成程序Yacc进行有关实验。我们要求学生通过对教学模型的分析,能够在机器上动手实现一个小的编译系统,以加深对编译整个过程的一致性、连贯性、整体性的理解。

一旦我们的讨论对象改变为对象式语言,则其编译程序语法和词法分析的自动生成不能再采用Lex、Yacc这类工具了,需要改用JavaCC(Java Compiler Compiler)或SableCC等,它们都能生成Java语言代码;或者使用Jikespg(Jikes paser gernerator),它生成C++代码。

我们初步制定了本课程的实践环节,它主要分四个层次:

(1)借助JavaCC或SableCC等工具让学生自动生成小语言的词法分析和语法分析程序。这个实验的目的是教会学生关于词法分析和语法分析的自动生成,同时弄清这些工具生成出来的代码的程序结构,特别是面向对象的类结构。

(2)为上面生成的语法树添加语义动作,完成生成代码的工作。这个实验的目的是让学生理解如何在抽象语法树上添加语义动作,理解为虚拟机生成代码的知识。

(3)扩展教学模型,如MiniJava,为其增加一些语言成分,如有关语句等,然后为其构造完整的编译程序。这一实验让学生把握编译的总体,弄清各部分之间的关系。

(4)逐步构造面向对象的编译程序类库,使得“编写”编译程序逐步走向“组装”编译程序。

5 结束语

对计算机人才的层次结构、知识、能力与素质等方面的要求在很大程度上取决于计算机市场。我们需要与时俱进,适时考虑相应教学体系和内容的改变。依赖过程范性的编译原理课程势必要被依赖对象范性的编译原理课程所取代,这是软件技术发展和社会实际应用的需要。但建立本课程新的课程信念、课程价值、课程技术等尚需时日,需要不断探索和创新。

编译原理课程的改革不仅需要教师付出大量辛勤劳动,及时跟进技术的发展,还需要好的教材、好的课程实验设计。《对象式程序设计语言编译原理》便是我们按照上述思路来编写的教材。

参考文献

[1] 中国计算机本科专业发展战略研究报告[J].中国大学教学,2005,5:7-10.

[2]Andrew W.Apple.现代编译器的Java实现[M].北京:电子工业出版社,2004.

[3]Dick Grune etc.Modern Compiler Design[M].JOHN WILEY&SONS,LTD,2002.

[4] 胡学联.开设软件新技术课程的实践探索[J].黄河科技大学学报,2004 ,2.

编译原理论文篇6

关键词:编译原理;能力培养;教学

作者简介:张艳(1976-),女,河南南阳人,上海理工大学光电信息与计算机工程学院,讲师。(上海200093)

中图分类号:G642.0     文献标识码:A     文章编号:1007-0079(2012)08-0053-02

从当前的就业情况看,计算机专业的学生在软硬件知识和应用能力上的优势逐渐弱化,在与具备特定行业、应用领域和专业背景的学生竞争就业时,面临的压力越来越大,而在已就业的学生中又少有人从事编译系统的研究和开发工作。所以,“编译原理”作为计算机科学与技术专业的“经典”核心课程的存在价值受到质疑。其实,本科教育解决的是培养学生基本专业能力、可持续发展能力这些本质性的问题,因此,我们要从如何结合专业课程完成学生专业能力的培养与素质的提高这样的角度来看问题。

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

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

一、明确“编译原理”课程对学生能力培养和素质提高的重要性

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

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

二、“编译原理”课程“教”与“学”的新思考

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

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

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

1.科学设置课程

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

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

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

2.优化教学内容

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

3.用实例演示来形象化抽象理论

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

4.把握联系,启发学生积极思维

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

三、重视实验,建立行之有效的实验教学方法

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

1.验证性实验

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

2.综合设计性实验

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

四、结论

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

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

参考文献:

[1]教育部高等学校计算机科学与技术教学指导委员会.高等学校计算机科学与技术专业人才专业能力构成与培养[M].北京:机械工业出版社,2010.

[2]霍欢,彭敦陆,张艳.“编译原理”课程的教学研究[J].计算机教育,2009,(23):26-28.

[3]张昱,陈意云.编译原理课程实践改革探索[J].计算机教育,2008,(8):24-26.

[4]蒋宗礼.谈高水平计算机人才的培养[J].中国大学教学,2005,(9):

24-27.

编译原理论文篇7

《编译原理》作为计算机专业的一门必修专业课程,在教学中占据着十分重要的地位。但由于其内容抽象,算法复杂,而且具有较强的理论性和实践性,故讲课和学习难度都较大。本文就该课程的教学方法总结出一些经验,以提高学生对该课程的学习兴趣,为学生更好的掌握计算机专业知识打下坚实的基础。

【关键词】

编译原理;教学方法

0引言

《编译原理》课程是计算机专业的主干课程之一。本课程讲述高级程序设计语言的编译程序构造的基本原理和实现技术,是计算机软件的核心技术之一。通过本课程的学习,学生应掌握文法和形式语言基础知识,具有分析和实现编译程序的初步能力,加深对程序设计语言原理的理解,并且提高中、大型程序的分析和开发能力。对于将来从事编译系统设计工作的学生来说,编译原理课程将为其打下坚实的能力和知识基础;对于从事其它工作的学生,也能够提高他们对计算机系统总体的认识。但由于该门课程内容抽象,算法复杂难懂,且传统的教学方法主要突出书本知识的传授,枯燥无味,晦涩难懂,导致学生对该门课程的积极性和学习兴趣不高。针对这种情况,本文对编译原理课程的教学方法进行一些初步的探讨。

1理论教学

教师在讲授《编译原理》课程时,首先应该让学生明白该门课程的教学目标:对课程整体应该有较为全面的认识和了解,熟悉编程程序的构造过程和形式语言中的基本概念和理论;理解并能掌握编程程序过程中每个阶段出现的相应的重点算法,并能对该重点算法能够简单编程实现;能够使用课本中出现的理论知识和算法解决常见离散事件问题。

1.1分阶式理论教学

《编译原理》课程内容覆盖广泛,涉及到很多相关学科的知识,就目前教学的基本学时来说,基本无法满足教材中所有内容的详细讲授,故教师在课堂教学过程中,采用分阶式教学方法,把教材中得相关内容按基本内容和高级内容两个方面进行分类:对于基本内容必须要学生完成,而对于高级内容可由部分能力较强的学生带帮其他学生协作完成。以词法分析为例,《编译原理》课程中的词法分析部分的知识点包括正规表达式、正规文法和有限自动机。有限自动机和正规表达式以及他们之间的相互转换是学生必须完成的基本内容,而正规文法及其相关内容则属于高级内容,可以作为提高内容留给学习能力强的学生,然后由他们带帮其他学生协作完成,在这过程中,不但可以加深能力强学生对该内容的理解,而且可以加深学生之间的友谊,在他们讨论和带帮中也可以提高学生的学习积极性。

1.2典型式理论教学

《编译原理》课程中一些内容较抽象,算法多且杂,为了让学生掌握该门课程中的重点知识和算法,教师可以采用典型式教学方法。对每次学生做完布置的作业后,教师可以从中提取一些典型的作业:作业中做错的内容,该内容为什么错,错在哪里,怎么改正,其中有没有可以提取的好的方面;作业中做对的内容,该内容有没有值得学习的方面,有没有需要进一步改进的方面。

1.3讨论式理论教学

很多学生认为该门课程的理论只能用于编写一个编译器,而他们可能以后不会从事编译器相关方面的研究,所以认为该门课程对他们以后的学生生活没什么帮助,故学习兴趣不高,认为可学可不学。所以教师在讲授这门课程时不能采用以前那种满堂灌的教学方法,否则使得学生更加厌学,茫然。为了激发学生的积极性,教师采用讨论式教学方法,让学生参与到课堂中来,积极与学生互动。在课堂上,教师提出问题,讲解基本理论与思想,让学生积极参与课堂讨论与分析,找到问题的解决方法以及可能存在的不足;教师也可以根据时下计算机方面的技术热点,将其与《编译原理》课程相关的知识点先阐述自己的认识和观点,然后让学生提出自己的观点,这样不仅可以加深学生对所学知识的掌握程度,而且可以让他们认识到该门课程不仅仅只是用于设计一个编译器,该门课程涉及的相关知识跟很多计算机相关课程以及以后他们所从事的计算机方面的研究都有莫大的关系。

2实践教学

在实践教学中,教师应该循序渐进地引导学生在实践中开展研究,而不是一开始就要求他们完成很难的实践任务。例如,先要学生实现一个简单的词法分析器,该词法分析器功能简单,只能完成词法分析器的一些基本的简单的功能,等他们完成这个任务后,学生不但学习兴趣大增,而且对以后较难的实验也充满的信心。如果一开始就要求他们完成功能齐全的词法分析器,可能有很多学生做不出来,那么他们对后面的实践教学更加会产生畏惧心理。对于较难的实践研究任务,教师可以让学生分组来实现,这样既能更好的完成实践任务,而且更重要的是能培养学生团队精神和分工协作能力,实现计算机专业学生的培养目标之一。

3结束语

《编译原理》课程是计算机专业的主干课程之一,本课程讲述的高级程序设计语言的编译程序构造的基本原理和实现技术,是计算机软件的核心技术之一,所以该门课程对计算机专业的学生来说很重要。探讨该课程的教学方法,提高教学质量,才能使学生更好的将该课程所学知识应用到以后的科学研究中去。

作者:吴春辉 单位:湖北科技学院计算机科学与技术学院

参考文献:

[1]陈火旺,刘春林,谭庆平,赵克佳,刘越.程序设计语言编译原理[M].第3版.北京:国防工业出版社,2000.

[2]吕映芝,张素琴,蒋维杜.编译原理[M].北京:清华大学出版社,1998.

[3]顾彬,郑关胜《.编译原理》教学方法的研讨[J].教育教学论坛.2013(15):64

[4]王海文,林月,王辉《.编译原理》课程教学方法的探讨[J].黑龙江科技信息,2012(6):160

[5]肖楠.编译原理课程教学方法的改革与实践[J].牡丹江师范学院学报,2013(2):72

[6]余玛俐,张海《.编译原理》教学方法探析[J].九江学院学报,2005(4):114

编译原理论文篇8

关键词:编译程序;教学改革;对象式程序设计;Java

1 引言

编译原理课程是高校计算机类专业的重要基础和骨干课程。编译原理对计算机专业的学生的重要性与高等数学对理科学生的重要性几乎可以相提并论。同时,由于这门课程涉及其他多门课程的知识,使得它成为大学阶段中最难学的课程之一。

从表面上看,编译程序是将高级语言源程序翻译成低级语言程序,但编译程序构造的基本原理和技术也广泛应用于一般软件的设计和实现,其中的设计思想、算法、思维方式和技术都可能会对学生今后的职业发展产生比较大的影响。

当今,程序设计已经基本上从传统的过程式转向对象式,并且正在从对象式转向组件型。这其实是程序设计范型的变迁,是在计算机技术背景下认识世界的观点的变化:过程式将完成事务看成是一系列的步骤,而对象式却将世界看成是由一系列对象组成的,这些对象之间交互合作完成特定的事务。从过程式到对象式,有着质的变化,而非一般的修改和完善,由此带来了语言(算法描述工具)的变化。编程语言影响思维,面向对象的思维方法又促进了编程语言的发展。

目前,程序设计的一些后继课程,如数据结构等都进行了同步跟进,出现了诸如用C++或Java描述的数据结构教材。但编译原理课程却没有及时跟进,上述改变基本上没有反映到编译原理课程中。这门课程近20年来基本上没有大的变化,教学内容仍然是基于过程式语言展开的,编译算法和模型描述是用PASCAL语言或者C语言。虽然个别教材加入了少量关于对象式语言编译技术的内容,那也是稍加点缀而已,作用不大。这就造成了一种奇怪的现象:对象式语言已经成了高校计算机教学的主流语言,社会上大量使用的也是对象式语言,而我们的编译原理教学仍然沿袭旧的一套。这种“状态”严重地脱离了计算机技术的发展和社会的实际需要,因此需要进行“调态”,其根本做法是“转型”,即将本课程的讨论对象从过程式语言转到对象式语言。

国外近年关于编译原理方面的新教材已经有了重要改变,不再连篇累牍地讨论那些已经过时的内容,增加了许多新的内容。其中一个重大改变是出现了用对象式语言描述编译算法和教学模型的编译原理教材,如:用Java语言描述的编译原理教材,且其教学模型为MiniJava。

这种改变也涉及到课程上机实践。众所周知,编译原理课程的学术性和实践性都很强:学术性是这门课程的生命所在,实践性是这门课程的活力所在。因而本课程的上机实践也要作同步调整。

2 课程内容围绕对象式语言展开

研究程序设计语言的语法描述需要有文法理论的支持,老教材中文法、词法分析和语法分析部分内容基本上不需要作什么变动。词法分析主要依赖有穷状态自动机理论,语法分析主要讲述LL方法和LR方法,其他方法略做介绍即可,无需展开讨论。LL方法和LR方法含盖了许多分析技术,理论性和应用性都很强,完全可以代表主流技术。

重要的就是研究对象和教学模型的改变。首先,研究对象将从过程式程序设计语言转到对象式程序设计语言(当然还可以兼顾过程式),例如Java、C++等,围绕实现这类语言的编译实现技术展开讨论。对象式程序设计语言的要素是封装、继承、多态性,在编译实现时都必须仔细考虑。其次,涉及到对象式程序设计语言编译程序教学的模型选择问题。目前传统的教材选择的教学模型有PL/0、Tini C等。实践证明,围绕某个模型展开编译设计技术的讨论,效果是比较好的。课程研究对象和教学模型的改变涉及到调整的章节主要有语法分析、语义分析、代码生成、符号表管理、存贮分配等方面。

一旦我们讨论的模型发生变化,这些章节的内容就要作很大调整。如对象式语言的作用域规则、语言动态特性、模块化封装(类)、类的继承、多态性的实现等,都需要具体的技术来实现,这些都要反映在教材和教学中。

就课程中关于代码生成内容来看,目前Java编译程序生成Java虚拟机(JVM)代码,C#生成MSIL虚拟机代码。这两个虚拟机作为教学模型来说可能比较复杂了一些,在教学中可以选定一个简单的子集;或者在PL/0虚拟机上适当增加一些指令代码,以便于代码生成、存贮分配等部分的讲解。

实践证明,作为教学模型,在教材上提供一个小型语言的编译程序供学生分析和研究,非常有利于加深对基本原理的理解和掌握。这个小型编译程序可以比较小但应该能够说明一些基本问题,例如传统的编译原理课程中选择PL/0编译程序作为教学模型,就收到了比较好的教学效果。在对象式程序设计语言编译原理课程中选择Object-pl/0或者MiniJava作为教学模型是比较恰当的。前者是在传统的PL/0语言上增加类,补充封装、继承、多态性之语言成分得到的;后者是对Java语言进行适当简化得到的,其主要语法描述如图1所示。

图1MiniJava语法

编译原理课程可以围绕此模型展开讨论。国外已经有这类教材出现,并且不少大学已经开始使用。

3 用对象式语言描述编译算法和教学模型

本课程中各类编译算法都应该伴随着教学模型的变化,改用对象式语言来描述,如用Java语言描述或者用C++语言描述。其中一个重大的变化是教学模型如MiniJava或Object-pl/0要用对象式语言实现,也就是提出了教学模型的面向对象构造问题,这就比较好地将讨论对象和描述讨论对象的语言统一起来了。国外有的教材就选择了用Java描述MiniJava编译程序。

编译程序是一个重要的中大型软件,传统的编译程序大都是用PASCAL、C等语言描述的(参见图2)。像编译程序这样的中大型程序如何用类这个工具来进行分解,其实是对学生的对象式程序设计能力的一个重要检验。学习用对象式语言来描述编译程序,学生可能会受到一次严格的对象式语言程序设计训练,编译程序如何用类这个工具进行分解,这些类(对象)如何合作完成编译任务,都需要较好的对象式程序设计基础。图3是一个程序设计语言文法的面向对象表示。

传统的编译程序构造主要存在如下一些问题:

(1)传统编译程序试图通过将编译程序根据功能模块分解,而使整个编译程序的复杂性降低。这种方法虽然在一定程度上简化了编译过程。但为了处理大型、复杂且多变的编译程序,仅仅将它按照功能分解成词法分析、语法分析、语义处理和代码生成几个阶段是远远不够的。

(2)传统的编译程序构造中,编译的每个阶段依然是大型、复杂的,且每个阶段内部依然存在复杂的联系,这对编译程序的可维护性没有实际上的改变,反而造成维护困难。

(3)虽然传统的编译程序构造有着丰富的理论基础,也有一些工具诸如Lex、Yacc等,但对一个具体的编译程序的构造仍然要从最基本的描述开始。传统的编译程序构造的功能分解方法缺乏支持复用的良好机制。

总之,过程式程序设计范式存在的问题在编译程序设计中广泛存在。而用对象式程序设计语言来描述编译程序,则对象式程序设计范式带来的好处基本上都能够得到。具体主要表现在:

上一篇:程序设计基础论文范文 下一篇:比较教学法论文范文