编译原理论文实用13篇

编译原理论文
编译原理论文篇1

1.2教学中存在的问题

一般应用型本科院校学生的兴趣是应用计算机去处理现实问题而不是理论知识的获取,但是传统的编译原理教学内容理论性强,并且学生认为学习编译理论即是要构造编译器,所以学生的学习兴趣不浓。同时,学习编译原理要涉及到离散数学、组成原理、操作系统和数据结构等多方面的知识,所以学生接受吸收编译原理的理论知识和技术比较难。

1.3实践环节薄弱

编译程序是大型复杂的软件系统,在教学中一般把编译原理逻辑划分成五个阶段进行讲授,如:词法分析、语法分析、语义分析与中间代码生成、中间代码优化和目标代码生成。但是这样做易导致学生不清楚编译各个部分是如何协调工作的,尤其对于语法制导翻译技术和语义规则,学生理解起来异常困难,把复杂的编译理论和技术通过编程实现,大部分学生上机时无从下手,没有思路。

2软件工程化的编译原理教学改革

把软件工程化的思想引入到编译理论教学中,将软件工程的知识由浅入深、阶梯状、循序渐进地贯穿在编译原理实践各个阶段项目的开发中。

2.1依据应用型本科的特点进行教材建设

近几年来,经过教学团队继续不懈的努力,《编译方法及应用》教材在充分吸收国内外最新计算机教学理念和教育体系的同时,面向一般工程类院校本科教学,在基础理论之上,更加注重编译原理应用性、基本知识和基本技能的培养,集思想性、科学性、启发性、先进性和适应性于一身。自编《编译原理实验指导书》规范学生实验报告的格式,对实践涉及到的关键算法和数据存储结构给予说明,从软件工程的角度,从实验的需求、可行性报告等方面,要求学生完善文档体系,引导帮助学生完成编译原理实验。自编《编译原理习题与解析》,对知识点、重点、难点和典型算法进行深度总结,选择或设计富有启发性的例题,并对这些例题给出透彻的分析与解答,使学生掌握问题的解决方法和思路,收到了举一反三的效果,学生编译原理期末考试成绩明显高于往年。

2.2优化编译方法课程体系和教学内容

编译原理的整个知识体系是数十年来无数学术精英在形式语义学、计算数学、计算机科学等相关领域不懈探索、积累的结果。整个编译程序是一个完整的系统算法,理论性强而抽象。鉴于此,面向软件工程化改造编译理论,阶梯状迭代工程实践项目,将现代应用软件工程模型特点与编译技术紧密结合,引导学生利用大型软件的分析设计方法及手段,不断充实编译方法课程的内容,从而使得本课程的教学内容不仅具有先进性,还具有实用性。通过对知识点的概要总结、实验指导、课堂锻炼、经典习题解答、课后研讨等方式,加强学生对编译抽象理论的理解,把软件工程化思想引入到编译方法教学实践中,加强学生对编译理论与实践的相互深化与促进。

2.3基于软件工程化的教学实践

以创新性和实践性为目标,开设综合性设计性必做实验项目,引导学生利用大型软件的分析设计方法及手段进行编译原理实践,构造一个完整的编译器。按照编译程序的逻辑功能结构,将一个完整的编译实践划分为:词法分析、语法语义分析、中间代码生成、代码优化和目标代码生成。将软件工程的知识由浅入深、阶梯状、循序渐进地贯穿在编译原理实践各个阶段项目开发中。把编译理论知识内容巧妙地隐含在每个任务之中,学生以任务驱动、成立开发项目小组的形式协作完成任务。编译实践每个阶段的需求是前一个阶段的拓展,因此每一个阶段的软件开发可以看成前一阶段开发的迭代,从而锻炼学生解决大型软件开发项目中用户需求不断变更的疑难问题的能力,以及最大程度地使用重用技术的能力。教师组织开发团队进行汇报,小组内部之间经常交流情况和信息,以减少误解,删除软件中的个人特征,提高软件的质量,从而提高学生项目规划、队伍组织、工作分配、成员交流和演讲汇报等多方面的能力,培养学生的团体合作精神、团队合作进行项目研发的能力,以及采用软件工程化方法开发大型软件的能力,为研究和学习软件生产线新技术奠定基础。以创新性和实践性为目标,开设选作实践项目,如:算符优先文法的FIRSTVT、LASTVT集合的求法,算符优先文法的判断;FIRST、FOLLOW集合的求法,LL(1)文法的判断;LR(0)文法的判断,SLR(1)文法的判断。通过开设选作实践项目,拓展学生的思维,更进一步提高了学生把基础理论、基本技术、基本方法转化为解决实际问题的能力,以及理论与实践相结合的能力。

2.4编译原理技术的工程应用

形式化方法是编译理论最重要的方法,由于形式化方法是建立在严格的语法和语义规则基础上的,因此注重向学生介绍编译原理技术的工程应用,如:形式化方法在TEX科技排版系统和方正排版系统上的应用,形式化方法在数字电路设计和验证、通信电路设计和验证、需求分析描述、系统正确性验证等方面应用,取得了显著的成绩。

2.5培养编译方法教学团队

有计划、有目的地培养中青年教师。助教在完成编译原理课程的辅导、作业批改、实验辅导、软件综合课程设计的安排和实施等的基础上,参与编译原理课程、离散数学、汇编语言程序设计课程的建设,并参与课程大纲的讨论及教学计划的制订,获得了多项教改成果。课程团队还鼓励青年教师把先进的科研方向带进本科生课堂,实现科研与教学的有机结合,不仅有利于提高授课内容的先进性,也有利于锻炼年青教师的创造性和责任感。通过教学实践、实验教学的训练以及定期组织教学研究讨论,青年教师的教学态度得到进一步端正、教学方法得到进一步丰富,教学水平也有了很大的提高。课程团队还让青年教师通过科研的实际锻炼提高自己的研究能力,扩展知识面。课程团队目前已建立起一支强有力的教学梯队,形成了以高素质教师为骨干力量的教师队伍。

编译原理论文篇2

旅游景点门票;功能主义翻译;编译;模型

0 引言

门票即进入风景名胜区、公园、纪念馆、博物馆、展览馆、影剧院等旅游观光场所的凭证。旅游景点门票已发展成了一种多功能艺术品,除了发挥其基本功能之外,还具有导游功能、宣传功能、资料功能、纪念功能、管理功能等等。作为景点对外展示的载体,它传递、宣传景点的风貌特征,以增强风景点的知名度,吸引更多游客前往观光。随着我国国际旅游业的发展,旅游景点门票,作为外宣最直接的窗口,其翻译质量直接影响到外国游客对中国的印象。然而通过笔者研究一些旅游景点门票的英译发现,许多门票文本的英文版仅仅是的字词句上的简单对应,形式上的生硬“忠实”,未能成功传达出旅游景点门票的预期功能。针对这一现象,本文从功能主义翻译理论出发,重点研究旅游景点门票的的编译策略,旨在建立旅游景点门票编译的功能模型,提高旅游门票翻译质量,增强其对外宣传效果。

1 文献综述

将编译独立纳入翻译研究视野始于1986年,维颐等人将常用译法归为六类,认为编译是将原文译出后,以其内容为资料进行加工创作,是译者在理解消化原文的基础上根据需要进行再创作的过程(维颐,嘉祥,& 同均,1986,p.15)。随后,人们对编译现象认识的逐渐深化,战英明(1989)介绍了五种编译技法,杜大宁(1993)总结出编译的三大步骤。桂乾元(1997)归纳了编译的三大特点。许明武(1998)在《编译研究概说》一文中指出,早期的编译研究已经涉及到了编译的主要问题:编译的概念、原则、方法、步骤、局限性等,但总体上还有待深入,关于编译的基本方法和基本原理仍是亟待解决的问题(p.6)。最近十年,译界对编译现象的关注更加广泛,黄忠廉教授(2000,2002)的《翻译变体研究》、《变译理论》两本专著及其相关论文,在编译理论上具有里程碑式意义,他(1990)认为:“编译是译者根据读者的特殊需求采用扩充、取舍、浓缩、阐释、补充、合并、改造等变通手段摄取原作中心内容或部分内容的翻译。”(p.80)。同时指出,同全译比较,编译在处理内容与形式的矛盾上,提供了一整套变通手法,是一种有别于微观翻译技巧的更宏观的翻译方法。(p.91)。另有一批学者将西方语言学理论和翻译理论引入编译研究,王涛(2000)从信息结构、篇章结构和语言风格方面对编译的标准进行探讨。张美芳(2004)从功能翻译理论角度研究编译,她认为,“编译”隐含着“改变’之意,即翻译者为了满足某些读者需要或者为了实现译文的,可以适当改变原文的形式与内容与。”(p.95)。她强调译文功能及潜在读者等因素对编译的影响。刘庆元(2005)以语篇翻译理论为基础,探讨了编译的合理性及发展趋势。可见,人们对编译的认识已经从最初的经验式总结慢慢深化到对编译理据和操作过程的探索。

功能翻译理论强调译文要在分析原文的基础上,以译文预期功能为目的,根据各种语境因素,选择最佳的翻译方法。这一理论为编译现象研究提供了较为坚实、客观的理论基础。弗米尔(1987)指出,“每一种翻译都指向一定的目的语读者,因此翻译是在目的语情景中为某种目的及目的语读者而生产的文本”(p.29)。诺德(1991)认为“按照目的语的文化准则来调整或‘改写’原文,是每个专业翻译者日常工作的一部分。”(p.25)。“任何一个译本都含有编译的成分,而编译则是‘目的论’的一种体现。”(p.38)。她又在《翻译的文本分析模式》一书中,对决定编译的功能要素加以研究,对编译过程作出初步构想,为编译研究体系化奠定基础。功能学派的另一代表人物纽马克(2001)认为编译属于交际翻译,“是一种最自由的翻译形式”,(p.22)。其目的是“努力使译文对目的语读者所产生的效果与原文对源语读者所产生的效果相同”(p.22)。译者在交际翻译中有较大的自由度去解释原文,调整文体、排除歧义,甚至是修正原作者的错误。

功能翻译理论也成为研究各文类编译的理论基础,但是,此类研究数量有限,未曾涉及景点门票编译,且内容均停留在如何“删减”、“分合”等技巧总结层面,缺乏对指导编译实践的宏观理论和操作原则的探究。因此,对景点门票的编译研究还需广泛收集实例,调查总结问题,理论与实践相结合,构建起编译过程的理论模型,具体指导门票编译实践。

2 功能主义视角下的景点门票编译

“功能翻译理论” 诞生于20世纪八十年代,由德国的弗米尔(H.J.Vermeer)、曼特瑞(J.H.Manttarix)和诺德(C.Nord)等学者提出,为翻译理论研究开辟了一个新视角。理论核心是翻译目的和译文功能。主要理论包括莱思提出的文本类型与翻译策略论、曼特瑞的翻译行动论、弗米尔的目的论和诺德的翻译文本分析理论。

综合以上翻译理论,功能主义视角下的文本编译即,涉及任务发起者、译者、目的语读者等多方人士参与的交际活动,根据译文文本类型、预期功能、译文读者,传播媒介、翻译目的对原文进行修改,增补甚至改写的目的。因而,编译须将以下几方面因素纳入考虑。

2.1 任务发起者

任务发起者是指发起翻译任务的团体或个人。任务发起者提供“翻译指南”,引导整个翻译过程,通过“翻译指南”译者可以确定译文文本类型、预期功能和翻译目的。景点门票翻译的发起者往往是景区行政管理机构或旅游局,他们负责景点门票的设计和发行,景点门票的文本大致分为信息型文本和呼唤型文本,信息型文本比如导游图,游览须知,这类文本旨在传达信息,引导游客正确行为,拥有固体的文体范式,需要编译的内容不多,不作为本文研究重点。还有一类呼唤型文,介绍景点风貌,彰显景区特色,突显外宣功能,这类文本文化词负载严重,与英文旅游文本文体类型上有较大差异,因此需要根据文本预期功能和翻译目的对原文进行编译。

2.2 目的语读者

目的语读者,即翻译活动的预期受众,目的语读者是翻译活动开展的先决条件,其教育背景,母语,使用译文的目的,文化背景,对译文的期待都是译者在翻译展开前必须掌握的至关信息。译者为了保证实现译文的预期功能,可以根据以上诸因素对原文进行编译。印刷在景点门票上的英文文本受众为懂英语的外国人,为了吸引潜在旅客来景点观光,达到外宣目的,对原文编译时应遵循易读性原则,尽量照顾目的语读者文化背景和心里诉求,译文文体范式尽量符合英文旅游文本表达习惯。

2.3 传播媒介

传播媒介,即文本的传播方式,媒介从一定程度上反应了文本发出者的交际意图,它决定了文本的接受条件,限制着文本的产出方式,即文本该用怎样的语言和句式来展现在读者面前,其语言简洁性和句式长短都受限于媒介本身。景点门票文本是在有限纸质空间内的一种文字呈现,它的主要目的是介绍景区信息,方便游客游览,同时作为景区的一种可视化资料,许多游客在观光结束后还对其加以保存,这时景点门票具有吸引潜在游客的功能,因此对旅游景点门票的编译要兼顾信息的传达和版面的设计。中英两种语言的字符占位不同,因此必要时候必须删减。

3 景点门票编译的功能主义模型

综上,决定景点门票编译的主要影响因素有:任务发起者,目的语读者以及传播媒介。翻译任务的发起者翻译任务,确定翻译目的,景点门票的英文文本主要是给来景点观光的外国游客看,作为游览凭证和行为指南,景点门票一方面要介绍景点相关信息,方便游客游览,另一方面兼顾景点的宣传,景区形象的树立,力争给外国游客留下一个良好的印象,同时能够激发一部分潜在游客前来观光,满足开发潜在市场的需要。因此门票文本分为信息型和呼唤型文本两大类,无论哪种文本都要充分考虑目的语读者,目的语读者的受教育程度,决定了译文语言尽量平实,尽量保证游客能够看懂,预期游客为讲英语的国家游客,译者要充分考虑母语对他们思维的影响,尽量使得译文的表达符合英语旅游文本的文体范式。目的语读者来景点的目的,是观光还是商务活动,决定了译本的语言表达口语化还是相对正式,考虑到他们对中国文化的熟悉程度,译者要对原文中的文化负载词进行编译,原则上尽量使用与目的语读者文化关联度高的表达,这样才能实现译文信息传达或者呼唤感染的功能。门票文字布局受到印刷纸张大小的制约,同时要兼顾门票的版面设计,文字表达力求简短,简洁。可以根据实际情况进行省译或不译。在功能主义翻译理论基础上建构起来的景点门票编译模型,解释了景点门票文本为什么编译,在什么情况下编译的问题,提供了编译的基本原则,即在考虑任务发起者,目的语读者,传播媒介三大主要因素的前提下,结合翻译目的、文本类型、文体范式和语言风格对原文进行改写,重组和删减,力求译文符合目的语文体范式,语言表达平实简洁,文化信息传递与目的语受众已有知识背景高度关联,实现文本传达信息,引导行为,激发消费,对外宣传的功能。

4 结语

本研究是将编译纳入功能主义翻译理论视角下的一次尝试,本理论模型建立后作者曾选取西安大唐芙蓉园门票做了个案研究,对原文本翻译中所出现的文化负载词翻译不当问题进行了重新编译,并请目的语读者对原文本和理论模型下编译后文本进行了对比反馈,填写了调查问卷,问卷表明,编译后文本更符合目的语读者要求,达到翻译功能。但是本研究本仅提供了一个理论框架,对影响景点门票编译的变量本身缺乏深入研究,这将在未来的研究中进一步深化。

编译原理论文篇3

中图分类号:G642

文献标识码:B

1“编译原理”课程教学现状

编译原理作为计算机专业的一门核心课程,在教学中占据十分重要的地位。但由于其内容具有较强的理论性和实践性,学生在学习过程中感到内容抽象、算法复杂、难于理解,因此“编译原理”被普遍看作是计算机本科教学中最难讲解、最难学习的课程。总结起来理由如下。

(1) 本课程涉及不少理论知识,如形式语言和自动机理论、语法制导的理论等。这些理论的学习有一定的难度,特别是语法制导定义(或翻译方案)的设计,因为它本质上是一种事件驱动的程序设计,这对于三、四年级的本科生来说还是较难掌握的。

(2) 本课程包含了很多算法,大的有LL(1)分析算法和各种LR(1)分析算法等,小的有DFA化简算法、计算开始符号集合和后继符号集合的算法、各种数据流方程的迭代求解算法。这些算法要比数据结构中接触的算法复杂得多,学生在学习数据结构的时候,接触过很多算法,对于不理解的算法可以跟踪算法的执行过程,而跟踪编译程序中的算法则要麻烦得多,想深刻理解算法的思想很困难。

(3) 编译程序规模大,不可能在一门课的时间内把所有的细节都讲清楚,这使学生对编译程序各逻辑部分之间的接口和一些算法的实现是模糊的。

针对这种情况,如何提高这门课程的教学效果,是一个值得探讨的问题。笔者多年来一直从事“编译原理”课程的教学,对如何改进教学方法和提高教学效果做了一些研究和探索,并取得了良好的效果。

2明确教学目标,提高学生学习兴趣

很多学生认为“编译原理”只能应用在写程序语言的编译器上,而他们以后可能不会在编译器及其相关领域方面钻研,所以学习兴趣不高,其实这是一种误解。编译技术是计算机语言发展的支柱,也是计算机科学中发展最迅速、最成熟的一个分支。通过学习编译程序的构造原理和技术,将有助于深刻理解和正确使用程序设计语言。编译内容涉及到计算机的组织结构、指令系统以及操作系统,掌握编译技术有助于加深对整个计算机系统的理解。另外,由于编译程序作为系统软件在性能上具有严格的要求,这使得它所使用的算法经典、高效,而这些算法、思想和实现技术也可广泛地应用于一般软件的设计实现。如正规式和有穷自动机在文本编辑器中的广泛应用,有穷自动机在字符串查找中的运用,必经节点算法在网络中的运用,由文法来定义网络协议等。在教学中,可以鼓励学生尝试将编译程序中的各种算法和技术应用到各个应用领域,从而激发学生的创造性思维,培养学生的创新能力,为今后的学习打下坚实的基础。

3优化教学内容,搞好课堂教学

由于这门课程理论性强,内容丰富且抽象,具有严密的逻辑性,应用其他课程知识比较多,要在有限课时内很好地完成本课程的教学。教师首先必须吃透教学内容、把握课堂教学环节。这就要求教师对教材非常熟悉,掌握编译原理的主要内容及基本框架,对教材及教学内容作一定的优化。

3.1选取合适的教材

某些“编译原理”教材并不是完全面向学生的,可能是作为这门学科的大全来编写的。例如由美国著名计算机科学家编著的“龙书”《Compilers Principles, Techniques and Tools》,中文译名为《编译原理》,由机械工业出版社出版,这本书是最经典权威的编译教材,应该是教师教学的必备参考用书,但如果将其作为授课的教材,对大部分学生来说都不太适合,因为内容过多,难度过大。

笔者总结了多年的教学经验,编写了一本《编译原理》教材,已由人民邮电出版社出版,我们在教学中采用这本教材。结合教材的特点,我们在教学中力求做到以下几点。

(1) 考虑到学生对C语言较为熟悉,所讲授的主要算法、例题和习题均以C语言为背景。

(2) 把编译原理和编译技术两方面有机地结合起来。将“PL/0语言编译程序”模型的实现过程贯穿于各个章节,这样使学生在掌握相关的编译原理之后,通过阅读理解和扩充此编译程序,加深对所学内容的理解,使所学内容融会贯通,能够建立一个较为完整的编译系统模型。

(3) 对常用分析器的自动生成工具(LEX和YACC)的功能和使用方法做了详细的介绍,并给出了使用LEX和YACC实现的PL/0语言编译器的源程序,从而使学生真正掌握如何借助LEX和YACC实现一个编译器。

3.2抽象内容形象化

编译系统中的一些概念很抽象,学生无法理解,就只会死记硬背,当然更无兴趣可言。在讲解的过程中,可以选用学生最熟悉的一些实例,通过类比使抽象的概念更容易被理解。例如,从理论上来说,编译过程一般包括词法分析、语法分析、语义分析和中间代码生成、代码优化、目标代码生成这五个阶段。学生记住这五个阶段并不难,但理解阶段划分的依据有一定的难度。编译程序的功能是将用高级语言编写的源程序翻译成等价的用机器语言或汇编语言表示的目标程序。既然编译过程是一种语言的翻译过程,那么它的工作过程就类似于外文的翻译过程,不同之处仅在于由哪种语言翻译成另外哪种语言,但其原理是类似的。两者的翻译过程对比如表1所示。

例如,我们要将英文句子“I wish you success”翻译成中文,首先进行词法分析,根据英语的词法规则,识别出四个英语单词,并检查是否有单词的拼写错误。其次是语法分析,根据英语的语法规则,对词法分析后的单词串进行分析、识别,并做出语法正确性检查,看其是否能组成一个符合英语语法的句子。再次进行语义分析,即对语法正确的英文句子分析其含义,并用汉语表示出来。然后对译文进行修饰,根据上下文的关系及汉语语法的相关规则进行综合考虑,对初步翻译后的句子进行必要的修饰。最后翻译成中文,“祝你成功”。学生经常做这种翻译,对翻译过程非常熟悉。将它与编译过程进行类比,既加深了学生的印象,又有助于理解为什么将编译过程划分成这几个阶段。

3.3运用实例教学

编译原理论文篇4

1编译知识在计算机学科中的作用

自从20世纪50年代中期诞生世界上第一个高级语言编译器――Fortran语言编译器以来,编译技术不断进步,已经成为计算机科学中发展最迅速、最成熟的一个重要分支。自1966年以来的所有55位图灵奖获奖者中,有近1/3的科学家是因为在程序设计语言和编译方面的成就而获得该项奖励,可见程序设计语言和编译的发展集中体现了计算机科学发展的重要成果与精华。计算机应用能发展到今天,编译技术的发展有着极其重要的、不可替代的作用。

五十多年以来,随着编译技术的发展,有关编译原理和技术的内容被逐步引入到了计算机专业本科教学中。从早期各阶段ACM和IEEE的计算机专业教学计划,到近年ACM和IEEE联合制定的CC 2005,再到我国教育部高等学校计算机科学与技术教学指导委员会2006年编制的《高等学校计算机科学与技术专业发展战略研究报告暨专业规范(试行)》,直至最新的ACM和IEEE联合制定的CS2008,都把有关编译原理和技术的知识作为重要教学内容列入。目前,我们编译原理课程的教学内容覆盖了CS2008体系中程序设计语言领域、算法和复杂性等领域的多个知识单元。

2编译原理课程的理论性和技术性特点

编译程序的构造原理和技术可以说是计算机科学技术中理论和实践相结合的最好典范。在许多课程的教学中,经典理论和先进技术之间的联系往往缺乏具体而形象的例证,而“编译原理”课程在这方面具有得天独厚的优势。形式语言和自动机理论为编译程序的设计提供了坚实的理论基础,正是在科学理论的保证下,才形成了一系列先进的编译程序设计方法和工具,使得编译程序的构造具有很高的系统性和自动化程度。例如,正是有了有限自动机的经典理论,才有了LEX这样的高度自动化的词法分析器的自动产生器;正是有了Knuth提出的LR分析方法,才有了YACC这样的高效的语法分析器产生器,将程序员从繁琐的代码编写中解放出来。编译课程的教学既要强调经典理论在计算机科学中的重要作用,又要注重介绍利用这些基础理论来设计和构造编译程序各模块的先进方法及工具,可以具体形象地说明经典理论与先进技术的关系。理论和实践相结合是“编译原理”课程的鲜明特色。

“编译原理”课程特别强调运用理论知识进行实践的能力和素质,以突出计算机专业人才培养的特色。“编译原理”是每个优秀的计算机专业人员必修的一门课程。通过编译程序这一具体的案例,学生可以综合理解和运用计算机的程序语言、操作系统和体系结构等各种软硬件知识,形成计算机专业人才特有的系统的专业知识结构。在系统学习编译的理论和技术的过程中,学生一方面对科学理论的基础作用有了充分的认识,提高了学习经典理论的兴趣,形成了较高的理论素养;另一方面,通过课程综合性的实践,分析或改进简单或复杂、原型级或产品级的各种编译程序或工具,也可以提高灵活运用理论知识、设计较大规模的软件来解决实际问题的能力。在课程的学习和实践中,学生可以深刻体会到理论学习的意义和动手实践的乐趣。

有许多人认为,如果今后不从事编译器的开发,编译知识就显得并不重要了――事实上并非如此。编译课程鲜明的理论性和技术性特点,使得这些知识对于计算机专业人员来说具有重要作用,甚至可以说是计算机专业人才区别于一般计算机人员的重要知识结构。对于将来从事编译系统设计工作的学生来说,编译课程的学习当然可以使他们掌握和理解编译系统的结构、工作流程以及编译程序各组成部分的设计原理和实现技术,获得分析、设计、实现和维护编译系统的初步能力,打下坚实的能力和知识基础;而对于那些将来不从事编译器研制的学生来说,编译课程的教学对于提高他们对计算机系统总体认识也具有重要的意义。通过学习编译的理论和方法,学生可以提高对程序设计语言的设计与实现等知识的综合理解,而这些知识对于准确掌握程序设计语言,学习新的编程范型,理解程序,开发出正确的软件都是不可缺少的基础。图灵奖获得者Perlis教授的名言“To understand a program you must become both the machine and the program”就精辟地说明了这一点。此外,编译课程介绍的经典语言分析方法和工具,对于一些实用的工具和软件,如自然语言理解、网络信息处理、网络协议的分析与实现等领域的软件或工具的研制,都是很好的基础。更为重要的是,编译课程中介绍的一些经典的理论和方法,对于传授计算机科学研究的方法、训练学生的思维都是难得的生动案例。因此,不能把编译课程片面地理解成为一个介绍编译程序的课程,而应当把该课程的教学放在培养专业素质、训练思维的层面加以认识,特别是应当强调如何在编译的教学中培养学生的计算思维。

3计算思维及其在编译理论和技术发展中的作用

计算思维(Computational Thinking)是卡内基梅隆大学计算机科学系Jeannette M. Wing教授在2006年提出来的先进的教育理念,被认为是近十年来产生的最具有基础性、长期性的学术思想,并将成为21世纪计算机科学研究的热点。

计算思维是运用计算机科学的基础概念去求解问题、设计系统和理解人类的行为,它包括了一系列广泛的计算机科学的思维方法。Wing教授认为,计算思维不仅仅属于计算机科学家,它将和阅读、写作和算术一样,是21世纪每个人必须具备的基本技能。计算思维已经在其他学科中产生影响,而这种影响在不断拓展和深入。例如计算生物学、计算博弈理论、纳米计算和量子计算等新兴研究领域的发展正在深刻改变生物学、经济学、化学和物理学领域研究的思考方式。

典型的计算思维包括一系列广泛的计算机科学的思维方法:递归、抽象和分解、保护、冗余、容错、纠错和恢复,利用启发式推理来寻求解答,在不确定情况下的规划、学习和调度等。显然,这些计算思维方法都可以在许多编译理论和技术的发展中找到痕迹,很多编译成果正是运用计算思维的结晶。例如,抽象和自动化是计算思维的两个重要手段,也是编译理论和方法产生的基础。编译课程中介绍的语法知识描述、词法分析、语法分析、属性文法、乃至优化等知识点,都体现了面向具体应用、从实际问题中抽象出科学问题并运用科学的思维方法进行问题求解的思想,其成果根植于坚实的经典理论,并应用于实践,以推动技术的进步。因此,在编译课程的教学中,结合编译理论和技术中经典的案例培养学生的计算思维,是一条值得探索的途径。

4结合编译案例的计算思维培养

如何培养“计算思维”,是目前计算机教育界非常关心的问题。例如,在计算机专业的教学中,有些学校在专业核心课程中融入计算思维的培养;在非计算机专业的教学中,对计算机导论类或程序设计类的课程进行改革,针对学科交叉的需求,从教学内容和方法上进行改革,培养学生的计算思维。总体来说,计算思维的培养应该贯穿在大学教育的全过程,甚至在大学之前的教育中。计算思维对于计算机专业的人才培养提出了新的要求,我们必须在专业课程教学中结合计算思维的培养。

编译课程的知识体系完整,既有经典理论成果奠定的坚实基础,又有在实践中发挥巨大作用的先进技术,其中很多知识点都为计算思维提供了很好的诠释和生动的案例。下面,我们从抽象、自动化、递归、问题分解和权衡等典型计算思维方法出发,探讨结合编译案例培养计算思维的可能途径。

(1) 抽象

“抽象”是科学研究的重要手段,也是计算机科学研究的重要工具。在编译理论和技术的发展中,正是运用“抽象”这一有力工具,才获得了一系列的重要成果。例如有限自动机、形式文法等都是重要的抽象工具,有了这些工具,才能够把握词法分析和语法分析等问题的本质,发现其中规律,最终形成一系列的自动分析方法。

(2) 自动化

将抽象思维的结果在计算机上实现,是一个将计算思维成果物化的过程,也是将理论成果应用于技术的实践。有限自动机、预测分析程序、算符优先分析、LR分析等编译经典方法,都是在抽象的基础上将知识和控制分离(即分析表加控制程序),从而获得了经典的分析工具,而这种知识和控制的分离也为分析工具的自动产生提供了可能。自动化的思维方法不仅体现在编译程序本身的工作机制上,更体现在编译程序的生成工具的研究和设计上。

(3) 递归

许多编译中的问题都具有明显的递归特征。运用递归思维解决复杂的问题,通常是对问题进行逐步化简,最后得到了一个规模非常小、非常简单、更容易解决的类似问题,将该问题解决后,再逐层解决上一级问题,最后解决了较复杂的原始问题。编译中的递归下降分析是最直观的对递归思维的运用,此外,基于树遍历的属性计算、语法制导翻译都是典型的递归问题求解。

(4) 问题分解

程序设计中的“自顶向下、逐步求精”的思想就是一种典型的问题分解的计算思维方法。运用问题分解这种思维方法进行问题求解,首先须做出对问题本身的明确描述,并对问题解法做出全局性决策,把问题分解成相对独立的子问题,再以同样的方式对每个子问题进一步精确化,直到获得对问题的明确解答。在编译程序的设计中,通过引入中间语言,将编译程序划分成前端和后端,就是一种典型的分解问题的思路。

(5) 权衡

“编译原理”课程是一门理论性和技术性都非常强的课程。理论研究重在探寻问题求解的方法,而在编译程序的设计和实现过程中,对于理论成果的研究运用又需要在能力和运用中做出权衡。这方面一个典型的例子是,我们知道,虽然高级语言的大部机制都可以由上下文无关文法来描述,但是上下文无关文法不能完全刻画高级程序语言的所有规范,有些语言机制甚至存在二义性。但是上下文无关文法的分析是高效的,所以我们在编译程序设计中依然采取上下文无关文法来描述高级语言语法,但是在具体实现时,通过改造分析表消除冲突、符号表操作、语义检查等手段,去实现上下文无关文法分析所不能完成的功能――这正是在具体实践中结合具体问题进行权衡的结果。

5结束语

计算思维的培养不是哪一门课程的教学能解决的问题。对于计算机专业教育来说,应当关注在各专业课程中的计算思维的培养,强调对各种原理和方法进行提炼,从思维方法的高度培养学生,使学生能够应用计算思维解决问题。大学计算思维的教育应贯穿于整个大学教育,做到学习期间不断线。

参考文献:

[1] Jeannette M. Wing. Computational Thinking[J]. Communications of ACM, 2006,49(3):33-35.

编译原理论文篇5

一、英文稿在宣传、承办世博会中的作用

1.优秀的英文稿能有效地宣传上海世博会

翻译是人类有目的的行为,就翻译的本质而言,起主要作用的是译文在译语文化中所要达到的交际目的。翻译的最终目的就是要使读者或听者接受相关信息,译文的功能就是在译语语境中发挥预期的作用。它旨在向不懂中文,但却关注中国的受众提供第一手真实的信息,以帮助外国受众了解中国相关事务,并对中国形成一个正确的认识。在今日“地球村”翻译的涵盖范围几乎涉及各个领域:政治、经济、社会、文化等,无论涉及什么领域只有优秀的翻译稿才能真正有效地传达相关信息,达到既有效度又有信度的对外传播的目的。当然,对外传播的工作者如能直接操纵相关的异族语言,那是最理想的境界。但是,目前我国的现状往往是先由编辑选定中文稿件,然后交给译者,最后由译者完成整个信息传播的翻译过程。因此,翻译质量就成为有效对外传播的一个重要因素,而上海世博会的优秀英文稿就是中国人民向世界各国人民正确有效宣传世博会的一大重要途径。

2.优秀的英文稿能保证上海世博会的正常进行

迄今为止世博会已有150多年的历史,世博会是人类文明最新发展的成果展示大舞台。世博会作为一个世界性的博览会起到了推进各国间的经济、文化和科学技术交流与发展的极大作用。我国是世界贸易组织的成员,在中国举办如此高级别的世界博览会毫无疑问具有重大历史意义。中国申博成功以来,各项相关工作逐渐展开,而对外正确传播这一重大事件理所当然地成为上海人民的一大重要任务。毋庸置疑,优秀的英文编译稿在承办世博会中能起到良好的指南作用,协调各项工作的作用并有利于各国人民积极参与世博会,从各个方面保证世博会的正常进行。

二、翻译的理论原则

1.我国翻译界的传统译论

提及翻译理论人们极易想到极具影响的近代严复的“信、达、雅”;现代鲁迅的“宁信而不顺”;当代傅雷的“神似”等翻译理论,但这些译论基本上都是针对文学翻译而言的,讨论的都是如何使文学翻译尽可能做到艺术上形式与内容的完美统一,如何使译文充分体现文学原著的语言艺术美感和文学价值。而对外宣传稿作为一种应用翻译是一种以传递信息为主,又注重信息传递效果的实用型翻译,与文学翻译有极大不同之处。应用翻译从某种意义上讲,它的文本功能决定了它的翻译目的不是“求异”,而是尽最大可能地去“求同”,以尽量减少信息交流的障碍,有效实现译文预期达到的功能和目的。从这个意义上来说,对策性和方法论等问题是应用翻译中值得深入细致考虑的理论问题。

2.西方的现代翻译理论

西方翻译理论林林总总,学派分呈,对应用翻译的理论问题不乏精辟独到的见解,特别是西方功能翻译学派的观点。对于什么是功能翻译理论,德国学者偌德曾给过一个明确的定义:“翻译的‘功能主义’就是指专注于文本与翻译的一种或多种功能的研究。”现代功能翻译理论基本以德国功能翻译学派为主流,其先导人物是赖斯。她在认同以原作为中心的等值论的同时,在实践中发现有些等值是不可能实现的,而且有些根本是不该追求的。翻译应有具体的翻译要求,有时因特殊需求,要求译文与原文应该具有不同的功能。在这种情况下,赖斯认为译者应该优先考虑译文的功能特征而不是对等原则。

三、关于上海世博会英文稿中的不足之处

我国传统译论偏重人文艺术而疏忽自然百科,系统单一而非多元的倾向,导致其理论系统的极大局限性,对于应用翻译这一专门领域更是缺乏应有的重视。“案本” “求信”过于注重原文形式,往往导致直译、硬译甚至误译(即译文符合目的语的语法等习惯,具可读性,但读者通过译文获得的信息与原文不符)。笔者曾翻阅过一些有关上海世博会的英文宣传稿,发现目前上海世博会英文编译稿中存在不少常见的错误如标点符号的明显错误;动词形式的使用错误;整个句子的表达错误;时态的错误;词性的错误;介词的使用错误;语体的错误;冠词的错误;动词词组的使用错误;名词单复数的错误;印刷错误等。如笔者最近翻阅了由上海世博会事务协调局;上海世博会(集团)有限公司;上海世博会文化传播有限公司;《上海世博》编辑部为主管主办单位的“上海世博2008年”第1 期,总第26期,国内统一刊号CN31―1947/F的世博会英文宣传册,发现该册从第90页到91页中就存在不少英语语言的编译错误。这一页的第二段第十行中,原句为“Vivid and lively mascot standing for the city and interactions between urbanians and urban planets profoundly express the internal relation between footprints and dreams。”。该句中的vivid前少了定冠词the,动词express少了es。下一段原句为Human beings are cells and souls of a city-People brings a cultural atmosphere to a city…该句中“-”符号应为句号而bring后面不该有“s”,bring这个词往下第八行manifestation后面多了一个逗号而这之后的第4行的In addition后又少了一个逗号。下面一段的第四行原句为The blue color stated Chinese brand-new gesture to embrace the world.其中的stated为错误动词形式,应该为states。下一段的第六行原句为…embodies the anticipation of the well-off both urban cities and countryside.该句正确英语表达该是…embodies the anticipation of the improvement of both urban cities and countryside.下面的第二段原句为In the past, for the purpose of mascot collection, public announcements are made on media to wait for voluntary “contribution” of designs.这里are显然是个错误时态形式,下面第二段原句“After 3-month hard work, everybody look much thinner but are very happy”said by Song Nan when taking about the journey of that time.这里多了by不符合英文表达习惯而且look后要加s, are要改成is,taking 要改成talking,往下第十五行原句为The car where Mr.Luo Zhongxian, the Party Committee Secretary and President of Xihua University is sitting in is also in the traffic.应该改成The car in which Mr. Luo Zhongxian, the Party Committee Secretary and President of Xihua University is sitting is also in the traffic. 这样语体更正规,同样这一段原句为This time President Luo will go to Beijing to in conjunction with leaders from the Ministry of Education accept education and teaching assessments of the Ministry.该句有明显错误,可改成This time President Luo will go to Beijing in conjunction with leaders from the Ministry of Education for education and teaching assessments of the Ministry.下一段原句为Suddenly his mobile phone is ring… 为错误表达。下面第四段第三行原句为…Wu Yongjian is drinking coffee while thinking.应该为Wu Yongjian is thinking while drinking coffee,因为根据上下文主要动作为thinking而不是drinking 。下一段第二行wordings应改为words并且前面要加上the而且要去掉介词 of ,下一段第九行原句为In addition the bill also has a “Da” type ,smiling and non-repetitive mascot with decorative pattern containing any single picture or the combination of several picture.应为In addition, the bill also has a “Da” type ,smiling and non-repetitive mascot with decorative patterns containing any single picture or the combination of several pictures,下面第三段第一行原句为In this way the embryonic of “HAIBAO”is born.其中embryonic 是形容词,应改为embryo。边上一页的第十二段中的第三行原句中的taking about及下一段的professional ethnics很有可能是印刷错误,应分别改成talking about及ethics。另外还存在由于编译不妥及由于不同文化背景形成的理解差异上的问题。

四、完善英文稿编译的若干对策

1.译者的职业素养

在当前的翻译领域里,译者的职业素养最终表现为译者的职业能力。职业能力由中外文功底、专业知识和IT技能组成, 而其中的中外文功底和专业特长构成译者所具备的翻译能力。但这种能力的发挥在信息科技化时代, 还往往有赖于IT 技术。如果缺乏IT 技术,译者就难以达到当今社会信息快速传递的要求。下面笔者就从上述提及的三个方面进行叙述。首先,熟练地掌握外国语和本国语是从事翻译工作的最基本条件。精通外语是正确理解以外语为原作的思想内容的前提而加强汉语素养,其目的主要在于提高语言对比的起点,提高汉语的表达能力,否则译文的质量肯定上不去。其次,专业知识又是一名优秀翻译者不可或缺的,它包括职业知识和技能, 以及与翻译内容相关的专业知识。职业知识和技能包括译者对翻译的理论认识如对翻译原则、标准、方法等的认识和掌握,以及一定的翻译技能和熟巧程度而与翻译内容相关的专业知识的掌握也是极其重要的一个环节,因为在日常的翻译中, 经常有因不谙专业知识而误译的情况。最后,IT技术又是信息时代向译者提出的一个要求。当代,信息量越来越大,传递速度越来越快,与之相适应的翻译量与日俱增,翻译速度成倍增长。译者利用网络与委托人的及时快速沟通无疑会对其编译工作带来极大益处。

审稿校对工作是一份优秀编译稿出炉前的一个重要环节。一份编译稿不能向受众提供第一手真实信息,不能帮助外国读者正确了解相关事务的原因众多,除了上述提及的由于某种原因而导致的误译及过于直译外,审稿校对工作的疏忽亦是其中的一个原因。任何编译文稿,相关人员都应本着认真、仔细的精神和态度审稿校对, 以期将错误率降至零点,只有这样我们才能最终拿出一份优秀的编译稿。

3.加强编译工作

我们知道应用翻译传递信息往往是有选择性的;或综合地、 或概要地或部分地传递。应用翻译无论是在译法上,还是在译品形式上,可变性更大。同时应用翻译所具备的特点也要求译者在翻译中更多考虑如何使译文传递的信息便于读者理解和接受,如何最有效地实现译文预期的功能和目的,原文的形式和内容往往要服从于译文的需求,服从于文本的交际功能。因而译者必须根据相关情况对原文作些调整和修改;或抽象概括原文信息,改换原文形式,或增删补改原文内容进行篇章整合,甚至将翻译变成写作,这些做法在应用翻译中是常有的事,是应用翻译行之有效的惯用方式。正由于应用翻译与文学翻译之间存在如此大的差异,所以在应用翻译中我们要尤其注重编译这一过程,只有确实加强了编译工作,相关的编译稿才能更为有效地达到对外宣传的目的。

4.关注语言文化的一般差异

任何一种语言都生长在一定的文化土壤中,语言也是一种文化现象,而思维方式、心理意识、习俗信仰等都属于语言的文化特征。英文编译稿质量的完善与提高需要综合各方面的因素,我们在编译过程中除了要关注以上提及的几个问题之外还要同时关注以汉语和英语为代表的东西方两大区域所呈现出的不同的语言文化特征这一问题。

参考文献:

[1]方梦之:翻译新论与实践.青岛:青岛出版社,1999年版

[2]罗常培:语言与文化.北京:语文出版社,1989年版

编译原理论文篇6

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

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

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

目前,程序设计的一些后继课程,如数据结构等都进行了同步跟进,出现了诸如用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)逐步构造面向对象的编译程序类库,使得“编写”编译程序逐步走向“组装”编译程序。

编译原理论文篇7

“编译原理”课程是计算机专业必修的一门重要的专业基础课程,也是计算机系统软件中非常重要的一个分支。学习和掌握编译程序的基本构造原理和实现技术,将为计算机专业学生进一步学习、研究和工作奠定坚实的专业理论基础。但该课程内容有一定深度和难度,涉及其他课程知识较多,学生在学习过程中感到内容抽象、算法复杂,因此,“编译原理”被普遍看作是计算机本科教学中既难教又难学的一门课程。这主要是因为:(1)本课建立在多门前修课程基础上,并要为后续课程提供理论和实践基础。这些理论的学习有一定难度,学生要在编译课程中融会贯通比较困难;(2)本课程涉及的算法多而复杂,学生想深刻理解算法的思想很困难;(3)学生普遍认为学习该课程仅是为了构造编译程序,很难认识到其在培养自己掌握科学方法和形成严谨思维方面的潜在价值,因此感觉课程枯燥,望而生畏。

针对以上情况,笔者借鉴国内外“编译原理”课程的教学经验,对如何改进教学方法和提高教学效果做了一些研究和探索,并取得了良好的效果。

1明确教学目标,提高学生学习兴趣

“编译原理”课程专门介绍如何将高级语言翻译为低级语言的编译程序的工作原理和方法。不同于一般的应用程序,编译程序是一个十分庞大和复杂的系统软件,它所包含的算法建立在高级语言或汇编语言基础上,综合运用编译理论及多门前修课程,如“数据结构”、“离散数学”、“计算机组成原理”等相关知识,解决高级语言在机器上运行的实际问题。因此,这门课程也可以看作是“软件工程”学习的一个实例。这门课程的内容丰富,各部分内容间具有严密的逻辑性,不但可以使学生真正了解计算机的工作过程,认识计算机信息处理的实质,还可以综合运用所学的软件设计技术分析解决问题,提高计算机软件素质。

作为系统软件,编译程序在性能上有严格的要求,这使得它的算法都很经典、高效,而这些算法、思想和实现技术也可广泛应用于一般软件的设计实现,对提高学生元级程序的设计能力和开发大型软件的能力是十分有益的。如正规式在XML查询技术中的广泛应用、有穷自动机在字符串查找中的运用、必经节点算法在网络中的运用、由文法来定义网络协议等。教师可以鼓励学生尝试将编译程序中的各种算法和技术应用到各个领域,激发学生的创造性思维,培养学生的创新能力。

2注重理论教学,开拓学生学习视野

“编译原理”的理论性强,内容丰富且抽象,具有严密的逻辑性,应用其他课程知识比较多。要在有限的课时内很好地完成本课程的教学,除了要注重教学的方式方法外,还要优化教学内容,将理论性与实践性相结合、时代性与实用性相结合、科学性与通俗性相结合。

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

“编译原理”是一门综合性很强的课程,它的理论教学首先要考虑、分析各门课程的内在联系,增强课程的总体效能,达到事半功倍的效果。

“编译原理”与前修课程间的联系如图1所示。作为“编译原理”课程的前修课,如程序设计语言、形式语言与自动机、算法设计与分析等,既是编译技术理论的基础,也是编译技术的分析对象和实现手段。教师可以从知识体系的内部结构入手,将先修课程的内容贯穿始终,并不断强化和深入,以加强课程的系统性,培养学生的全局观。同时还要把握编译过程各个功能阶段的内在联系和规律,有目的地设计问题,有意义地提出问题,通过问题把编译原理中的理论难点、抽象概念引导出来,学生通过回答问题,从不同的角度寻求解决问题的原则、途径和方法,加深对编译理论和技术的理解。

2.2实例演示,形象化抽象理论

“编译原理”的概念和定理很多,再加上大量复杂的算法,抽象程度很高,要获得良好的教学效果,必须借助形象化教学手段,使抽象的理论具体化。

一方面,形象化教学可以通过实例类比来实现。例如,把编译原理与某种高级语言(如C语言),甚至可以是自然语言(如英语)联系起来,用课堂上学到的理论知识对该语言的语法和词法结构加以分析。这样不仅可以使学生深入了解高级语言的工作原理,做到知其然更知其所以然,更能使学生切实体会到编译原理的实用价值。如编译原理中词法分析的学习就可以以C语言中的实数为例,画出能够识别实数的状态识别图,并用程序实现。通过这个简单实例,学生很快就能了解词法分析在整个编译过程中的作用。

另一方面,教师可以借助多媒体辅助教学,把原理性的重点知识以动画、图形形式呈现给学生,化静为动,寓教于乐。为此我们编制了一些多媒体课件,用Flash技术生动形象地演示抽象概念和算法,同时向学生推荐网上优秀的“编译原理”课程教学网站、电子书、算法等资源,拓宽学生视野,培养和激发学生的学习兴趣。

2.3与时俱进,优化教学内容

编译技术是计算机语言发展的支柱,也是计算机科学中发展最迅速、最成熟的一个分支。目前国内“编译原理”课程所选用的教材大多偏重于介绍程序设计语言编译程序构造的一般原理和基本实现方法、技术,编译系统大而复杂,编译原理多而深奥。很多学生学习时会受教材的局限和影响,往往花费很大力气去掌握复杂而深奥的理论知识,而不是实际动手去构造具体的小型编译器,使理论与实践完全脱节。因此,教学要坚持理论和实践相结合,课内和课外相结合,融知识传授、能力培养、素质教育于一体。例如,主要算法、例题和习题可以以学生最熟悉的C语言为背景,将编译程序模型的实现过程贯穿于各个章节,让学生阅读理解和扩充编译程序,加深对所学内容的理解。

此外,教师还要坚持教学和科研相结合,将最新教改和科研成果引入教学,将经典编译理论与现代编译技术有机地结合起来,激发学生对编译新技术的学习兴趣。例如,程序设计语言已经从结构设计语言(如C语言)发展到面向对象程序设计语言(C++、C#),讲授一些经典的编译理论应用在新一代高级程序设计语言中的实例,会激发学生更大的学习热情。同时,向学生介绍编译技术在人工智能、并行计算、自然语言处理等领域的具体应用,也会为后续课程做好铺垫,奠定坚实的理论基础。

3加强实践教学,激发学生主体意识

“编译原理”是一门对实践要求较高的课程。编译程序以程序为操作对象,是由多个完成不同功能、执行在不同阶段的子程序组成的复杂系统,各个阶段具有不同的特点。即使学生理解了不同阶段各个子程序的功能和特定方法,但如何衔接各个子程序,组成一个完整的编译器,对学生来讲仍可能是一件困难的事情。

基于此,本课程的实践教学设计要充分考虑编译理论与实际应用的结合,突出阶段性和实用性。如将编译器的实验过程分为4个阶段,每个实验阶段安排在对应阶段的理论课结束时开始,实验以小组为单位进行,每阶段都有文档提交和审查评分,最后将不同阶段的各个子程序衔接起来,完成整个编译器的分析设计,实践课的成绩以40%计入总评成绩。这样,开发过程可以引入软件工程的理论,注入结构化程序设计思想,将整个系统模块化,合理组织不同能力层次的学生分组开发各个功能模块,鼓励所有学生共同参与,相互探讨,协作完成,共同提高。同时,要特别加强实验中的督促环节,各阶段的设计实现要严格控制实现进度和质量,培养学生良好严谨的软件开发风格。

4结束语

本文就如何改进“编译原理”课程的教学方法,提高教学效果做了一些研究和探索,从培养学生兴趣入手,对理论教学和实践教学中存在的问题和相应的对策进行了讨论。实践证明,这些方法能更好地提高学生对“编译原理”课程学习的兴趣,提高教学质量。

参考文献:

[1] 张素琴. 斯坦福大学计算机科学系的编译原理课程分析[J]. 计算机教育,2004(1):79.

[2] 黄贤英,刘贞,刘全利.“编译原理”课程的地位及教改思路[J]. 重庆科技学院学报:社会科学版,2005(3):103-105.

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

[4] 刘磊,金英,王胜军,等. 编译原理多媒体辅助教学软件的设计与实现[J]. 吉林大学学报:信息科学版,2002(6):54-58.

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

[6] 李冬梅,施海虎. 编译原理[M]. 北京:人民邮电出版社,2006.

[7] 刘磊,郭德贵.“编译原理”课程建设研究[J]. 计算机教育,2006(6):8-10.

[8] 王一宾. 基于面向对象的编译原理实验的研究[J]. 安庆师范学院学报:自然科学版,2002(11):84-85.

Researches on the Instruction of Compiling Principles

HUO Huan, PENG Dun-lu, ZHANG Yan

编译原理论文篇8

(一)理论多于实践。部分商务翻译教材用相当的篇幅来介绍国内外的翻译理论及其发展过程,翻译实践显得异常单薄,脱离了商务翻译的实践性特点

(二)“名”不符“实”。有部分教材尽管名字也称“商务英语翻译教程”,但里面所提供的翻译例子却与商务无任何关系,而且这类范例占全书的比例甚高

(三)教材所提供的译文存在错误。部分教材已经很好地突出了“商务”这一范畴,所选择的翻译练习材料也很好,针对性也比较强,但作者所提供的译文却存在各种各样的问题,如理解不正确、表达不到位等。

(四)内容陈旧,缺乏时代感。

在此背景下,本文拟从商务翻译特点的角度,结合教材编写的特点和原则,来讨论商务翻译教材的编写。

二、商务翻译特点与商务翻译教材编写原则

(一)商务翻译特点

商务英语(business english)属于专门用途英语 (english for specific purposes)的一种,指在各种不同的商务场景中所应用到的英语,如对外贸易、外经贸函电、招商引资对外宣传、市场营销、对外劳务契约与合同、国际金融、涉外保险、国际旅游、国际运输、国际金融与会计核算,涉外法律条文,wto文献等。据统计,专门用途英语翻译在所有翻译活动中占据了70%[5]。可见其在翻译活动中举足轻重的地位。而近年来随着对外交流的增加,商务活动的频繁,商务英语翻译承担着越来越重要的任务。

商务翻译(本文讨论的商务翻译指的是商务领域的英汉翻译)指的是商务领域的翻译活动,目的是为商务双方架起有效的沟通桥梁。商务翻译跟普通翻译既有共通的地方,也有其自身的特点,具体来说,主要有以下特点:

1.准确性。商务翻译对准确性的要求很高,准确性是商务翻译的最基本要求,如果翻译出错,轻则影响交流,重则会带来巨大的经济损失。因此在商务翻译中,译语必须准确地传递原语信息。主要包括三个方面:具体事实细节一定要准确传译,比如数字的翻译;相关的术语翻译一定要规范;一般性的陈述用词要恰当。

2.得体性。商务环境是很正式的场合,商务交往因而要非常注意得体性。语言表达得体一方面展现了说话人所代表的公司的形象,另一方面有利于与合作伙伴的交流。商务信函的翻译就是一个例子。商务信函属于公函语体,措辞比较严谨,语气比较委婉,而且非常注重礼节,因而在翻译商务信函时,除了要充分考虑公函文体的语言特征外,更需要尽可能地再现原文的礼貌语气,使沟通得体地进行。此外,要注意文化差异对得体表达的影响。

3.时效性。世界变化日新月异,新的概念新的理念层出不穷,这些直接反映在商务活动上,因此在商务翻译中,要不断充实这些新内容,深刻了解这些新概念和新理念的涵义,然后用适当得体的译语表达出来。

(二)商务翻译教材编写原则

首先我们需要区别“教材”和“教科书”两个概念。《中国大百科教育卷》将教材定义为“根据一定学科任务,编选和组织具有一定范围和深度的知识技能体系,一般以教科书的形式来具体反映;是教师指导学生学习的一切教学材料”。教材具有三个构建要素:目标性,体系性,操作性。而教材的编写原则应该是与这三个构建要素紧密相连的,也就是要遵循以下三个原则:目的性,科学性,渐进性。《现代汉语词典》(1998:639)对教科书的定义为:专门编写的为学生上课和复习用的书。《大美百科全书》(encyclopedia americana,1990)对教科书的解释为“严格而言,教科书是一本为学习为目的、以有组织且通常简化的方式体现知识主体的书”。从以上定义可知,教材的概念大于教科书。翁凤翔教授认为,教材和教科书是两个不同的概念:教材不等于教科书,教材即“教学材料”,教材是承载并传递课程内容的载体和媒介[6]。但在实践中,我们往往将此两概念等同。

教材是整个教育工作的重要组成部分,对于英语学习者来说,教材在课堂内外的大量使用是主要的学习和参考工具[7]。教材和教材建设在大学教育中的作用无需多言。冯端教授曾谈到其对教材建设的看法:教材建设始终是大学教育的一个重要环节,也是培养跨世纪人才的必要前提。撰写好的教材,不仅可以解决许多教学上的难题,提高人才培养质量,也是教师进行科学研究的一个重要课题。因此,高等学校必须把教材建设作为培养跨世纪人才的一个重要突破口[8]。

翻译教材在整个翻译教学中至关重要。作为教学信息的主要载体,它是体现翻译理论、实施教学计划的主要手段,也是教师组织教学的主要依据和学生学习的主要内容[9]。

翻译教材是翻译课程的目标和内容的体现,又是翻译教师和学生开展活动的主要工具。可以说,翻译教材对于翻译教学来说是必不可少的一部分,是影响翻译课程效果的关键因素。翻译是一门实践学科,学生在学习了教材后不仅要对翻译有所认识,更重要的是能将教材中翻译理论、方法运用到将来的翻译实践中。所以,翻译教材除了要“授之以鱼外”,更要体现出“授之以渔”的功能。

根据张美芳老师的研究,从理论流派来看,翻译教材可分为词法、句法流派翻译教材,功能流派翻译教材和当代译论流派翻译教材;从布局谋篇的角度来看,翻译教材的编写可分为两类:一是按学生需要而编的翻译教材,二是按社会需要而编的翻译教材[10]。每类教材的编写各有其重点和特色。

转贴于

综合翻译教材编写的总原则和商务翻译的特点,笔者认为商务翻译教材编写应遵循以下原则:

1.严谨性原则。商务翻译的首要要求就是准确。商务翻译是一种应用型翻译,具有时效性和经济效益性,因此对于信息的准确性和及时性要求极高[11]。因此,在编写商务英语教材时,对于材料的选择和提炼,以及参考译文的核定,都需要非常严谨的态度。

2.循序渐进的原则。在教材编写时,应该遵循人类认知的规律性,从容易的开始,慢慢过度到难度比较高、比较复杂的内容,每部分内容之间有一定的梯度。这样一方面符合人的认知规律,另一方面会增加学生的自信心,使他们逐渐对商务翻译产生更浓厚的兴趣。

3.差别化原则。根据张美芳老师的调查,教师们对翻译教材建设的首要建议是“由权威机构牵头,组织人力编写系列翻译教材,以适应不同的需要”[12]。王宗炎教授认为“翻译教材可以而且应该集体编写,但不要只编一种,更不要指定某种教材为全国共用教材。应该废除此类‘金科玉律’”[13]。笔者认为,在编写商务翻译教材时,在保留一些“共核”内容外,大部分内容可以根据学生的具体情况,学校的教学条件进行调整。同时可以结合学校所在地的具体经济发展状况和翻译案例,并将其编进教材。

4.实践性原则。有些高校在大二开始安排翻译课程,对有关翻译理论已经作了介绍,学生也对翻译理论有了一定的认识,因此不建议在商务翻译课程中花大篇幅来介绍和讨论理论。要将重点放在实践上。

三、商务翻译教材编写的建议

编写教材的关键在于课文选材和练习设计。在保证科学性的前提下,课文内容要有知识性、趣味性和思想性,而练习应具有多样性、针对性和实用性。结合以上讨论,对于商务翻译教材的编写,笔者建议:

(一)商务翻译教师不要局限于某一特定教材,而应该综合各教材之长,有选择的选用其中部分材料;重点保留商务英语的共核部分,以及经典翻译案例。在有条件的高校,鼓励自编教材,而且每年都要更新。但自编教学的参考译文要由翻译教师集体讨论后确定,以确保教材的严谨性。鼓励教师自编教材的原因在于:任课老师对学生了解比较多,自编教材更有针对性,更能满足学生的需要,更有效率地实现教学目标。实践证明,一本定期修订和增补的统编的理论教材加上任课教师适时更新的适应社会需要的练习材料,应该是翻译课教学使用的教材模式[14]。

(二)商务翻译教材的编写要注重实践性,理论介绍不宜过多。实践性是翻译课程的一个突出特点,因此,商务翻译教材的编写要充分考虑这一特点,而不应将过多的篇幅用于翻译史和翻译理论的介绍;翻译技巧的介绍也应该具有针对性和典型性,而不要为了介绍而介绍。

(三)在教学材料的选用上,要注意材料的时效性。如电报电传目前使用不多,建议不纳入教学内容;但在商务当中出现的新词汇、新表达方式以及新的业务形式需要随时掌握并作为新材料编进教材。

编译原理论文篇9

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].计算机

编译原理论文篇10

“编译原理”是计算机专业的一门核心基础课程,所介绍的知识是计算机专业理论知识的重要组成部分,包含了用计算机解决问题的基本思路和方法。

在教学中,理论与实践是相辅相成,互为促进的,因此编译实验内容的合理设置对搞好整个编译教学起着至关重要的作用。我们一直非常重视编译实验的教学,多年来不断研究国内外高校的教学情况,结合学生的实际,对该课程进行了深入改革,取得了一定成效。

1国内外高校编译实验课程的研究

1.1国外高校情况

斯坦福大学(Stanford University)的编译课程使用的主要参考教材是业界经典的“龙书”――《Compilers Principles, Techniques and Tools》。课程实验内容分为4部分,在课程的不同阶段进行布置:①词法分析(使用Flex);②语法分析(使用Bison);③语义分析;④综合前面的部分实现一个完整的Decaf编译器,生成在SPIM模拟器上执行的代码。实验的后两部分较前两部分难度高,因此所给分值不同,分别是50分、60分、125分和125分。整个实验部分占到了编译课程总评的70%。

卡内基梅隆大学(Carnegie Mellon University)在编译技术领域享有很高的国际声誉,该校的编译课程使用的主要参考教材是业界经典的“虎书”――《Modern Compiler Implementation》(ML版本)。实验题目共有5道:①扩展给定的L1语言的编译器,使之能够将源代码转换成真实的X86汇编代码;②实现支持L2语言的完整编译器;③实现支持L3语言的完整编译器;④实现另一个支持L3语言并生成安全代码的完整编译器;⑤两者选其一,实现L3编译器的各种代码优化或者实现L3的垃圾收集器。实验部分量很大,使用的现代编译器技术含量高,分数也占到了编译课程总评的70%。

加州大学伯克利分校(University of California, Berkeley)的编译课程使用的参考教材也是“龙书”。课程实验要求实现一个Python语言编译器,依次分为3个项目:①完成针对Python语言子集的词法和语法分析器;②实现静态分析;③实现机器代码的生成。实验部分占到编译课程总评的55%。

华盛顿大学(Washington University)使用的参考教材是《Engineering a Compiler》(Cooper & Torczon)。课程实验项目是将一个用Java写的简单编译器完善成一个支持MiniJava(Java语言子集)的功能完整的编译器。项目分5个阶段实施,分别是扩展MiniJava编译器,完成词法分析、语法分析、类型检查、中间代码生成和目标代码生成。实践部分占编译课程总评的40%。

总体来看,国外高校的编译课程非常重视实验,实验内容量大且要求高,涉及到了面向对象语言编译器实现、代码优化等高级内容。学生提交的实验作业须遵循严格的学术道德,严禁抄袭。课程往往配备2~3名助教,解答学生疑问,协助教师检查实验作业。

1.2国内高校情况

国防科学技术大学的编译课程使用的教材是陈火旺院士领衔编著、国内高校广泛使用的《程序设计语言编译原理》。课程设置有两个实验:①调试PL编译程序,扩充PL语言成分,并对相应的编译程序进行扩充;②了解编译程序构造工具Lex、Yacc和JavaCC的使用。实验成绩占总评的20%。

清华大学的编译课程教材选用的是自行编写的《编译原理》(吕映芝等著)。实验内容题目由学生根据能力自选,分别是:①对PL/0编译程序进行扩充,用Lex和Yacc实现一个简单解释器;②Deacf编译程序的设计和实现;③Java实现的Mini-Triangle编译程序。三个题目难度从低到高,分数所占总评的比例分别是20%、40%和50%。

武汉大学的编译原理课程是国家精品课程,教材是自行编写的《编译原理》(何炎祥编著)。课程实验是先在课堂上举出完整的小语言实现的例子,然后将该小语言扩充后作为实习内容;或者提供程序源代码而空缺关键模块,让学生完成。

吉林大学的编译原理课程是教育部―微软精品课程,教材是自行编写的《编译程序构造原理和实现技术》(金成植著)。该校专门开设了独立的编译原理实践课程,共包含8个实验:词法分析程序开发、递归下降分析法、LL(1)语法分析、符号表管理、语义分析、中间代码生成、中间代码优化和目标代码生成。

以上高校的编译实验课程教学具一定代表性。根据调查,国内高校编译实验课程的教学大致有以下几种安排:

(1) 安排多次小型实验,分别支持编译程序的各个阶段。此种方式是目前国内大部分高校采取的形式,由于编译过程每个阶段都有特定的方法和技术,故可以针对各个阶段设计不同的实验,根据理论教学的情况灵活安排。实验难度相对较低,能够让学生掌握编译的有关技术,缺点是不能让学生学习到一个完整编译器的开发运行过程。

(2) 针对某一语言设计和实现一个相对完整、独立的编译器,或者研习现有的编译程序,对其进行扩充。这种方式的难度根据语言规模的不同以及学生扩充程度的不同而有差别,弹性较大,有利于加强学生对编译程序的整体认识,且能充分锻炼学生的编程能力。

(3) 借助Lex和Yacc等自动生成工具直接生成编译程序。这种方式需要学生花一定量时间研究工具的基本原理及使用方法,对编译程序前端成熟的理论知识是一个很好的再学习过程,但对编程能力锻炼不多。

(4) 其他涉及编译技术的实验。此类实验强调编译技术在实际软件工程中的应用,如将词法分析器的设计扩展为中文网页分词的应用等,有助于培养学生理论联系实际的能力,灵活性较大。

总体来看,根据学生水平层次和培养目标的不同,国内许多高校实施了不同的实验,比较强调编译器前端的代码翻译技术,重视编译器最基本原理的实践,以培养学生的逻辑思维能力、编程和综合应用能力。

2我校编译原理实验课程的实践

2.1教学简介

我校计算机系自1979年建系时就开设了编译课程,在理论教学的同时给出一个精简的高级语言,要求学生完成词法分析和语法分析。为了适应我国人才培养标准不断提高的要求,结合对国外高校编译实验课教学情况的研究,我们认为应该更加强调编译实验,适当提高难度,结合软件工程中的思想培养学生理论联系实际的能力。因此,从2004年起,我们将原来在一学期同时完成理论和实践教学的“编译原理”课程拆分成在第6学期先讲授理论知识,第7学期专门开设“编译原理实践”课程,要求学生独立设计和实现一个完整的编译器,经过几年的实践探索,收到了良好的效果。

2.1.1课程描述

课程名称为“编译原理实践”,属专业必修课。课程选择了著名计算机科学家N.Wirth教授提供的PL/0语言作为实验语言,该语言是程序设计语言的典型代表,国内较多高校采用其作为编译教学使用语言。教师讲解PL/0编译程序构建后,要求学生实现一个完整的PL/X语言编译程序(教师给出PL/X语言的形式化语法定义),包括词法分析、语法分析、出错处理、代码生成和解释程序,然后用PL/X语言编若干个程序,用自己开发的编译程序进行编译,能指出语法错误不中断,能生成代码程序,能解释执行代码程序,最后输出正确结果。更重要的是,鼓励学生对PL/X语言进行定义扩展,增加更多功能。教师还演示了使用Lex和Yacc生成PL/0语言编译器的过程,鼓励学生在编程实现PL/X编译器的基础上再使用Lex和Yacc构建编译器。

2.1.2组织形式

课程总学时72学时,其中教师讲课20学时,学生上机52学时,教师讲课集中在前10周完成。教师讲授PL/0编译程序的设计开发占16学时,介绍使用Lex和Yacc生成PL/0语言编译器占4学时。

为了充分锻炼学生的综合能力,避免学生投机取巧,产生依赖心理,课程不采用分组的形式,而是要求每个学生都必须独立实现PL/X语言编译程序。

2.1.3评分规则

评分规则规定,文档、程序、测试用例齐全,现场考核通过,成绩为60分。学生对PL/X语言进行扩充的内容建议为:①增加运算符定义,如XOR、%等;②扩充语句定义,如case、for、continue等;③增加数据类型,在现有整型/逻辑型基础上增加实数、记录类型、数组类型等;④增加函数调用功能,进一步扩充带参数、返回值的函数功能;⑤增加类,补充封装、继承、多态等面向对象特性。根据扩充内容的难易进行累计,给予2~40分的加分。此外,良好的用户界面可获得加分;以Lex和Yacc工具生成编译器也可获得加分。

2.2经验总结

2.2.1突破教学难点,理论结合实践

课程改进主要有两点:一是由于N.Wirth教授采用Pascal语言实现PL/0编译程序,而学生不熟悉Pascal语法,因此我们同时提供C语言版本的PL/0编译程序;二是分阶段系统地讲授PL/0语言编译程序各个阶段的设计开发,按顺序给出各个版本的范例程序,学生可以跟着教师的讲授进度进行同步的PL/X编译程序的开发。这种方式降低了开发难度,使学生可以看到自己的开发成果不断完善,增强了信心,提高了继续探索的兴趣。

对课程的难点,教师也注意讲解方法,理论结合实践,使用多种教学手段。比如PL/0编译器生成的目标代码是一种假想栈式计算机的汇编语言,而学生很少直接接触汇编语言,对目标代码指令感到陌生,且运行时的存储组织与分配又是编译原理的一个难点,因此教学就采用了先易后难的办法。先给出不含过程调用的PL/0源程序生成的目标代码,详细介绍目标代码执行时数据栈的变化情况;继而给出含有过程调用的PL/0源程序生成的目标代码,再次分步介绍目标代码执行时数据栈的变化情况,重点讲解静态链、动态链、返回地址3个联系单元的作用;接着使用多媒体教学软件,以动画方式完整演示数据栈的变化情况,给学生整体思路;最后复习理论教学中各种运行时的存储组织与分配情况,让学生有深刻的体会。

再如语义分析和代码生成部分,一直是理论教学的难点,特别是控制流语句的回填技术等,在教师详细讲解了PL/0编译器中if语句和while语句的语义分析和代码生成实现后,学生对此有了实际体会,更进一步对for、case语句的实现产生兴趣,有动手将理论课上的方法用在作品中的意愿。

2.2.2激发学生潜能,延伸第二课堂

课程的实验内容设计成可扩展的,使不同层次学生都可以接受。由于有了分阶段的完整示例,基础薄弱、编程能力较差的学生只需在基本理解的情况下就可以模仿PL/0编译器构造PL/X编译器,消除了畏难心理;对于能力较强的同学,教师罗列出可扩展内容的建议,激发学生积极主动实践的意愿,拓宽学生的创新思维视角。

在教学计划中,学生上机是52学时,但课程要求实现的是一个完整的编译器,具有一定工作量,若要实现扩展,需要更多时间,大部分学生难以在课堂内完成,这就要充分发挥第二课堂的作用。课内教师把握主要矛盾,对于扩展难度较高的部分,则给学生思路上的启迪。借助课程网站的功能,给学生提供编译技术文档、编译源程序等自学资料,鼓励学生通过各种渠道搜寻相关资料,并利用网络相互讨论,助教协助解答问题,实现第二课堂的功效。

2.2.3考核科学严格,树立良好学风

课程要求学生提交完整规范的文档、程序和测试用例。现场考核要求学生演示程序、回答问题、改写程序,实现教师提出的特定功能,这样能够充分检验出学生的真实水平,并锻炼学生的表达能力和快速解决问题的能力。

在课程开始时,教师重点强调禁止抄袭,借助程序对比软件检查雷同性,无论是抄袭者还是被抄袭者,均不能通过考试。在前两届学生中严格执行该规定后,后续学生逐渐形成了良好的学习风气。连续五届学生的实践表明,学生的潜力是无穷的,许多优秀作品充分展示了学生的创新能力。我们选取了一些优秀的作品,将其功能演示的全过程录制成视频,放在课程网站上,为下一届学生提供参考,也激励他们创作出更完善、更富创新的作品。

正是由于我们将教学目标定在国内外先进的水平上,在教学内容、教学方法上不断改进,我校编译课程始终受到学生的普遍认可,在学生评教中处于前列。该课程成为华东师范大学精品课程后,2009年成功成为“上海市精品课程”。当然,和国外著名的高校相比,我们还需要进一步提高科研水平,不断跟进编译技术的发展,在理论和实践方面进一步增加现代编译器技术的教学内容,使学生在编译系统方面获得更大的收获和提高,有效和国际接

轨。

3结束语

编译课程理论难度高,一直是学生反映难学的一门课程,因此近年部分高校降低了编译课程的教学难度,减少了实验内容,甚至有学校提出将其从本科教学计划中删除。通过对国内外高校编译课程教学的研究,我们认为,编译课程在提高学生“计算机思维能力”,培养学生专业素养方面起着非常重要的作用。要真正做好编译教学,教师要从教学内容、教学方法、教学手段等方面综合提高,结合科研,跟进编译技术的发展,才能使学生更好地领会和掌握基本编译原理,为将来从事软件开发工作夯实基础。

参考文献:

[1] 斯坦福大学. 编译课程网站[DB/OL]. [2009-9-16]. stanford.edu/class/cs143/.

[2] 卡内基梅隆大学. 编译课程网站[DB/OL]. [2009-9-16]. cs.cmu.edu/~fp/courses/15411-f08/.

[3] 加州大学伯克利分校. 编译课程网站[DB/OL]. [2009-9-16]. www-inst.eecs.berkeley.edu/~cs164/sp09/.

[4] 华盛顿大学. 编译课程网站[DB/OL]. [2009-9-16]. cs.washington.edu/education/courses/401/08au/.

[5] 国防科学技术大学. 编译原理精品课程网站[DB/OL]. [2009-9-16]. /cp/index.php.

[6] 武汉大学. 编译原理精品课程教学网站[DB/OL]. [2009-9-16]. /jpkc2005/byyl/.

[7] 吉林大学. 编译原理精品课网站[DB/OL]. [2009-9-16]. /education/compiler.

[8] 唐仕喜. 编译技术可扩展式课程设计改革研究[J]. 计算机教育,2009(2):40-42.

[9] 斯传根. 编译设计与开发技术[M]. 北京:清华大学出版社,2003.

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

Research and Practice on the Experiment Course of Compiler Principles

DOU Liang, YANG Zong-yuan, WANG Ting-ting

编译原理论文篇11

1引言

编程语言的“编译原理”是计算机专业一门非常有用的核心课程,又是一门需要较大投入的课程。怎样激发学生的学习热情,努力学好本课程?在正确的教学目标下选择适当的教学内容是非常重要的一环。基于笔者长期承担“编译原理”教学的体会,以及多年从事编程语言理论和实现技术研究的积累,本文阐述笔者对该问题的认识。

国外和国内分别从二十世纪六十和八十年代开始设置“编译原理”课程,几十年来,“编译原理”课程可以讲授的内容越来越多,从文献[1,2]这两本专著的内容看出。和第一版相比,第二版压缩了编译原理传统部分的内容,大量增加了新技术内容,书的厚度从接近800页猛增到超过1000页。第一版中被删除的部分包括:语法分析中的算符优先分析法,语法制导翻译中的递归计算方法、语法制导翻译的实现细节和语法制导定义的分析,最后两章的编译器自展和一些具体编译器的介绍。在静态检查一章介绍的类型系统和类型检查被分散和弱化到中间代码生成一章中。第二版中增加的内容包括:

(1) 堆管理和各种垃圾收集算法。

(2) 独立于机器的代码优化增加了数据流分析的理论基础,强调了在一个数据流分析的一般框架下解决各种具体数据流问题,能使读者对程序分析和代码优化有更深刻的认识。

(3) 依赖于机器的优化,包括现代处理器体系结构、指令调度、基本块调度、全局调度和软件流水等。

(4) 并行性和数据局部性优化,重点介绍在多处理器系统上,使用数组作为数据结构,并且以简单而有序模式访问这些数据的计算密集型程序的优化问题。

(5) 过程间的分析,包括调用图、上下文敏感分析和指针分析等。

国外另一本著名的专著是Appel的《Modern Compiler Implementation in C(3rd. Edition)》(还有Java语言描述和ML语言描述的版本)。全书21章,表明它涉及的内容广泛,比Aho第二版覆盖的范围还要广,包括了面向对象编程语言和函数式编程语言的实现方法。但是全书不到550页。因为Appel强调编译原理的学习离不开具体的实践,他精心设计了一个“学生项目编译器”的框架和模块接口,每章的结尾给出与该章内容相关的编译器模块的设计任务,要求学生逐步实现一个编译器。对相关的理论,该书的介绍都比较粗略;对相关算法,除了直接用代码表达的以外,大多数只通过例子表达思想。

从这两本教材可以看出国际教材的变化趋势是压缩仅和编译器前端有关的部分,增加独立于机器的优化和依赖于机器的优化等内容。

国内的编译原理教材基本上都是根据国外教材编写的,在跟踪过程中,总显得有些滞后。例如,国外2000年以后出版的教材已经不介绍算符优先分析法,而国内2004年和2005年出版的一些较有影响的教材仍然介绍算符优先分析法。在增加新内容方面,国内教材也相对落后,笔者力图克服这一缺点,在新近改版的教材(详见文献[5])中,加入了依赖于机器的优化内容。

真正从事主流编程语言编译器设计的虽然只是极少数一部分人,但是编译技术在计算机体系结构设计、提高软件开发效率与质量的工具开发等方面有着重要的应用,这是学习编译原理的主要理由。在编译原理所涉及的知识越来越多,而“编译原理”课程的课时数不足的情况下,如何选择编译原理的教学内容是一件值得探讨的事情。

2教学目标

笔者认为,虽然编译原理和技术对计算机专业的学生来说是重要的基础知识之一,但是对不同层次的高校,应该编写不同深度的教材,讲授不同的内容,以达到不同的教学目标。

可以将教学目标分成三个层次:普通高校本科的目标、重点高校本科的目标和研究生阶段的目标。下面概述的这些目标中,后者包括了前者,并且边界不是绝对的。

(1) 普通高校本科的目标是:通过编程语言实现技术的学习,提高学习编程语言及在程序开发中应用编程语言的能力,具体解释如下:

提高学习、理解和使用编程语言的能力;

提高程序排错的能力,即快速理解、定位和解决在程序开发与程序运行中碰到的问题的能力;

提高编写高质量代码的能力。

(2) 重点高校本科的目标是:通过对与编程语言相关的理论和技术的学习,提高在软件工程中应用这些理论和技术的能力。和编程语言有关的理论和技术包括:

形式语言和自动机理论、语法制导的翻译技术、类型论和类型系统、数据流分析的理论基础等,可以选择一部分作为教学内容;

LR分析和语法制导翻译等技术,代码生成和代码优化中的一些重要算法。

(3) 研究生阶段的目标是:通过对与编程语言密切相关的、更宽泛的理论和技术的学习,提高在科研工作中应用相关理论和技术的能力。这些理论和技术列举如下:

依赖于机器的各种优化技术;

其它范型的编程语言的理论和实现技术;

程序分析的理论和技术;

并行编译理论和技术。

3教学内容的选择

本节探讨在三种不同教学目标下的教学内容。不管怎样选择教学内容,都要有恰当的课程实践作为课堂教学的非常重要的补充。笔者已另外行文专门介绍在课程实践方面的经验和体会,因此本文不再讨论课程实践。

3.1普通高校本科

根据前面提到的目标,笔者认为,教学内容应强调对编译原理和技术的宏观理解及全局把握,而不要把学生的注意力分散到一些枝节的算法上,如计算开始符号集合和后继符号集合的算法、回填技术等。另一方面,教学内容和习题要包括一些从实际碰到的问题中抽象出来的例题和习题,鼓励学生用所学的知识去分析和解决实际问题。笔者在这方面已经有所尝试(详见文献[6, 7]),教材中主要各章都有配合该章内容的C语言小程序作为例题或习题。

针对编译的各逻辑阶段,笔者建议的教学内容如下。

(1) 词法分析

正规式、不确定的有限自动机、确定的有限自动机及其最小化是主线;同时要有用C语言写的一个简单语言的词法分析器,并介绍词法分析器的生成器。

有限自动机是一种经常用得着的概念和工具,放在编译原理课程中介绍最为合适。词法分析器的生成器是上述主线的自然产物,由于它比较简单,让学生通过它来开始理解程序生成的概念和工具较为合适。

(2) 语法分析

上下文无关文法是必备的基础知识。LL(1)文法和递归下降分析方法比较直观,便于学生接受,应首先介绍,并伴有一个简单语言的递归下降分析程序作为例子。在介绍自下而上分析的一般概念和使用LR分析表进行移进归约分析后,直接介绍分析器的自动生成器,并介绍归约时的语义动作,为下面阶段语义工作的描述奠定基础。

算符优先分析法没有必要讲,因为编译器的语法分析已不再使用这种方法。LR分析方法固然很重要,但由于SLR(1)分析、规范LR(1)分析和向前看LR(1)分析的介绍需要占用较多课时,因此以不介绍这几种LR分析表的生成算法而直接介绍LR分析表的使用为好。

(3) 静态语义检查

概述静态语义检查包括哪些方面,然后重点放在类型检查上。类型系统在编程语言的设计中占据重要位置,可以先介绍一下类型系统在编程语言中的作用,然后用语义动作来表达类型检查算法。

(4) 运行时存储空间的组织和管理

这是最需要搞明白的部分。尤其在用C这样比较低级的语言时,掌握这部分内容对编写程序和程序排错都很有帮助。具体应该介绍局部存储分配策略(即一个活动记录中各类数据的组织),静态分配、栈式分配和堆式分配等三种全局存储分配策略,非局部名字的访问方式和各种参数传递方式的实现。

(5) 中间代码生成

主要介绍各种形式的中间语言,把赋值语句和各种控制流语句翻译成中间代码的语义动作。对于类型和变量声明语句,主要关注怎样按语言的作用域规则组织符号表。至于符号表中符号的插入和查找方法在数据结构课程中已经介绍过,没有必要在这里重复。

(6) 代码生成

选择一种采用简单的寄存器分配策略的代码生成算法加以介绍,让学生对代码生成有所了解即可。

(7) 代码优化

用实例来介绍各类优化,让学生明白编译器能完成哪些优化,而不要给学生介绍各种优化算法。这对编程有用处,例如,在可读性好的源代码和优化的源代码两者之间做选择时,若知道那些优化可以由优化编译完成,则宁可选择可读性好的代码。

(8) 编译系统和运行系统

通常,除了编译器外,还需要一些其它工具的帮助,才能得到可执行的目标程序,这些工具包括预处理器、汇编器和连接器等。这些工具都较简单和明显。了解这些工具有助于掌握从源程序到可执行目标程序的实际处理过程,这些知识对于参与大型软件系统的开发是很有用的。

这部分主要是让学生了解预处理、编译、汇编和连接这个流程,目标文件的格式,连接时的符号解析,静态库和动态库等。

3.2重点高校本科

粗略地说,普通高校本科计算机专业在软件方面主要培养软件编程人员,而重点高校本科培养高一个层次的软件设计和开发人员。因此需要学生掌握或了解和编程语言有关的理论以及和编程语言实现有关的重要算法。

(1) 形式语言和自动机理论

形式语言理论是用数学方法研究自然语言和人工语言(如编程语言)的语法的理论,它只研究语言的组成规则而不研究语言的含义。自动机理论是以研究离散数学系统的结构、功能以及两者之间关系为主要内容的数学理论。形式语言分层的四类文法和图灵机等某些自动机的对应(接受同样语言)是形式语言和自动机之间的重要联系。形式语言和自动机理论在编程语言的描述和编译、自然语言的理解和翻译以及语法制导的模式识别等方面有着广泛应用。若想给学生介绍一点形式语言和自动机理论,编译原理课程是最理想的场所。

(2)LR分析方法

LR分析方法是一种高效的、自下而上的语法分析技术,它能适用于一大类上下文无关文法的分析。LR分析方法被广泛采用,各种分析器的生成器几乎都是生成LR分析器。因此在全面介绍语法分析方法时,必须把LR分析方法当作重点来介绍。LR分析表的生成算法较复杂,因此还需把该算法当难点来讲解。只有能全面把握LR分析方法时,才能说比较好地掌握了语法分析方法。

(3) 语法制导翻译

语法制导的定义和语法制导的翻译方案是描述编程语言翻译的两种常用形式方法。它们描述严格并便于理解,因此大部分有一定深度的教材都用它们来描述静态语义检查和中间代码生成等。它们易于实现,所以编译器的生成器都要求编译器的设计者用这样的方法来表达识别出输入串中的语法构造时要执行的动作。通过对语法制导翻译的实现技术的学习,会对程序生成器有更多的理解,这在软件工程中是很有用处的。

(4) 类型论和类型系统

类型论是为了避免集合论悖论而建立起来的数学理论,主要研究集合的分层、分类方法。类型系统是一种依据程序短语语义值的种类来对程序短语进行分类的语法方法,它用来防止程序出现某些上下文有关的错误。在计算机科学的编程语言理论中,类型论提供了研究、设计和分析类型系统的形式基础。编程语言的设计现在都是以类型系统的设计为中心来展开的;掌握类型系统知识对学习编程语言有重要的指导作用。此外,类型系统在软件工程、软件安全、高性能编译器的实现和程序分析等领域都有深入的应用。

目前,国内编译原理的教材一般最多从类型系统的实现――类型检查算法来粗浅地介绍类型系统的知识,缺乏类型系统在编程语言中作用的全面介绍,缺乏对多态类型这样的非普通类型及其类型检查方法的介绍。

形式语言、语法制导翻译和类型系统知识的学习有助于提高学生的形式描述能力。

(5) 数据流分析的理论基础

国内介绍代码优化的编译原理教材,对各种数据流分析问题,分别给出数据流方程及其迭代求解算法,也谈及它们之间的联系,但是没有把它们作为一个整体来抽象地研究。文献[2]突出数据流分析的理论基础,强调在数据流分析的一个一般框架下解决各种具体数据流问题,使教材能站在更高层面上讨论代码优化,给学生一种洞察数据流分析本质的认识。

通过从半格定义开始的数据流分析一般框架的学习和理解,可以提高学生的数学抽象能力。

(6) 代码生成和代码优化的算法

简单的代码生成算法离实际的代码生成器相差太远。寄存器分配的图着色算法、树重写方式的指令选择方法、为表达式树产生最优代码的算法、动态规划的代码生成算法、使表达式的计算次数最小化的程序变换方法和程序流图中自然循环的识别算法等,不仅能让学生了解代码生成和代码优化的技术,而且能给学生算法设计方面的启迪。

随着嵌入式系统应用越来越广,自主设计嵌入式系统软硬件的机会越来越多,要求软件开发人员具备这部分知识的场合也不断出现。

3.3研究生阶段

在国内,就现阶段来看,虽然直接参与编译器的设计和开发的工程师还是很少,但是编译器的设计影响着计算机科学的一些其它领域,如针对计算机体系结构的优化、新计算机体系结构的设计、软件质量、软件安全、程序翻译和提高软件开发效率的工具等,这些领域的研究和开发工作都需要编译原理的知识。

研究生阶段学习编译原理的有关知识,主要是提高在科研和开发工作中应用相关理论和技术的能力。由于授课对象是本科毕业于不同学校的研究生,他们在编译原理方面的知识背景大不一样,因此可以挑选文献[5]中第3.2节和该节列举的部分理论和技术作为讲课内容。

(1) 依赖于机器的各种优化技术

计算机体系结构的迅速演化引起对新的编译器技术一种不知足的需要,几乎所有的高性能系统都在利用两种基本技术:并行化和内存分层。并行性可以在指令级和处理器级分别发掘;内存分层针对这样的基本局限:构造非常快的存储器或者非常大的存储器是可能的,但是构造不出既快又大的存储器。

所有现代微处理器都开拓指令级的并行。这种并行对程序员是隐蔽的,程序员理解为串行执行的指令序列,会被硬件动态地检查其中的相关性,并尽可能并行发射这些指令。编译器对此的配合作用是重新整理指令,使得指令级的并行更有效。

文献[2]有这些内容的较详细介绍。这部分内容也可以在计算机体系结构的相关课程中介绍。

(2) 其它范型的编程语言的理论和实现技术

对于不同范型的语言,主要是让学生了解其影响语言实现技术的重要语言特征,以及它们对实现技术的具体影响。

就面向对象编程语言来说,其信息封装虽是非常重要的特性;但对编译器来说,实现这些作用域规则是简单而明显的。因此重点是在另一个重要的语言特征――继承性及其实现上,实现中的关键数据结构是虚方法表。

理解函数式编程语言并不困难,重要的是理解其既允许高阶函数又支持函数嵌套声明给实现带来的影响。重要的是明白此时栈式存储分配不再适用,活动记录必须创建在堆上。实现中的一些重要概念是函数变量的闭包、垃圾收集、逃逸变量、惰性计算和换名调用等。

其它还有逻辑编程语言,例如Prolog语言,使用这类语言的人很少,无特别需要则不必介绍。

(3) 程序分析的理论和技术

程序分析指的是以程序为对象的静态(如编译时)预测技术,它们可用来预言程序运行时的动态布局或行为的一种安全(忠实于语义)且有效(所需时空少)的近似(因为一般而言不能期望精确的解答)。除了用于代码优化外,程序分析还用在程序理解、程序测试、程序安全性分析和程序重构等许多方面。

除了代码优化中提到的数据流分析外,常用的程序分析技术还有基于约束的分析、抽象解释、类型和结果系统、符号执行等。

国内已经有一些高校开设了专门的程序分析课程,相应教材(文献[8])也已经问世。

(4) 并行编译理论和技术

并行编译器是指处理并行编程语言或将串行编程语言的程序并行化的编译器。这样的编译器对程序员隐蔽了它发现程序并行性、把计算分布到多个处理器、极小化处理器之间的同步和通信的详情。并行化技术已经用于自动地把串行科学计算程序翻译成多处理器代码。

并行编译中采用的主要技术是依赖性分析和循环并行化等。这些内容已经被写入国内个别编译原理教材(文献[9])中。

参考文献:

[1]Alfred V. Aho, Ravi Sethi, Jeffrey D. Ullman. Compilers: principles, techniques, and tools[M]. New York: Addison- Wesley, 1986.

[2]Alfred V. Aho, Monica S. Lam, Ravi Sethi, Jeffrey D. Ullman. Compilers: principles, techniques, and tools[M]. 2nd edition. New York: Addison-Wesley, 2007.

[3]Andrew W. Appel. Modern compiler implementation in C[M]. Cambridge, England: Cambridge University Press, 1998.

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

[5] 陈意云,张昱. 编译原理[M]. 2版.北京:高等教育出版社,2008.

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

[7] 陈意云,张昱. 编译原理习题精选与解析[M]. 北京:高等教育出版社,2005.

[8] 刘磊,张晶,单郸,等. 程序分析技术[M]. 北京:机械工业出版社,2005.

[9] 陈火旺,刘春林,谭庆平,等. 程序设计语言编译原理[M]. 3版.北京:电子工业出版社,2001.

Discuss on Teaching Content of Compiling Principles

ZHANG Yu, CHEN Yi-yun, Guo Yu, LI Zhao-peng

编译原理论文篇12

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

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

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

编译原理论文篇13

由于这门课程理论性强,内容丰富抽象,具有严密的逻辑性,使用到其它课程的知识较多,因此成为计算机专业诸课程中既难教又难学的一门课程。目前该课程在教学过程中主要存在以下问题:

1)课程内容抽象难理解

编译程序不同于一般的应用程序,是一个十分庞大和复杂的系统软件,它所包含的理论知识较多,抽象度也较高,要求教师在有限的课时内将课程内容讲解清楚,并使学生接受理解是有难度的。

2)基于面向过程语言的描述模型

目前,这门课程中的算法和模型描述是用pascal语言或者c语言等面向过程语言。WWW.133229.cOm虽然个别教材加入了少量关于面向对象语言编译技术的内容,那也是稍加点缀而已,用途较小。然而,面向对象语言已经成了高校计算机教学的主流语言,社会上大量使用的也是面向对象语言,而我们的编译原理教学仍然沿袭旧的面向过程语言,这种现象严重脱离了计算机技术发展和社会实际需要。

3)课程实验设计不合理

目前,大多数高校在“编译原理”课程的实验内容上基本上都是要求学生能上机实现一个小型模型语言的完整编译程序,或者是分四个单独的实验(词法一个实验,语法三个实验),它们的目的是让学生加深理解一些编译理论与算法,这对于一部分学生来说是不能完成的任务,也不能激发他们的兴趣(他们认为学习编译原理就是为了设计编译器),造成很大部分学生在动手之前就早早放弃了努力,也就不能达到预期的实验效果。

4)教学手段陈旧

目前,“编译原理”课程主要以理论教学为主,课时主要用于形式语言理论与各种语法分析算法、语义分析技术的讲授上,缺乏对实际编译器的分析。同时,在讲解的时候一般没有辅之以其它形象生动的教学手段,对学生是采用“灌输式”的教学模式,而没有采用“启发式”、“讨论式”等多种教学模式,因此学生觉得授课内容枯燥乏味,激不起他们学习的兴趣。

5)教学大纲统一

目前,每个高校计算机相关专业包括计算机科学与技术、软件工程、网络工程等,学生也存在不同的层次包括统招的“一本”、“二本”学生,以及“专升本”学生等。不同专业有不同的培养目标,不同的生源造成学生知识背景和自身素质也有差异。在这种情况下,在“编译原理”课程教学过程中实行统一的教学大纲显然不合适。

6)学生学习兴趣不浓

目前,学生普遍认为学习编译原理就是为了设计编译器,而大部分学生今后从事编译器设计工作的可能性较小,因此觉得没必要学。另外,目前面向对象的程序设计语言已经成为了主流,认为课程主要讲授面向过程的程序设计语言的处理已经落伍,因此失去了学习兴趣。

形成以上这些问题的原因既有主观的也有客观的,这些问题在我校的编译原理教学过程中也都不同程度地存在。为此,对“编译原理”课程的教学内容和教学方法进行探讨是十分必要的、有意义的。

2需要解决的问题

1)课程内容的调整

“编译原理”课程内容丰富抽象,理论性和逻辑性很强,所以很多学生在学习时普遍感到枯燥、乏味,难理解,激不起学习兴趣。为此,需要对课程内容合理安排以便收到较好的教学效果。

a)抓住重点,分清主次

由于课程内容涉及较多,学生往往抓不住重点,分不清主次,结果导致劳而无功。为此,需要根据专业的不同,学生层次的不同,在不影响对编译系统理解的情况下,合理安排授课内容,切不可造成“统一重点的教学”、“统一层次的教学”、“统一大纲的教学”现象。

b)范例式编译器的剖析

为了帮助学生对编译思想和方法的理解,应在教学过程中增加一部分内容,即对一个范例式编译器进行剖析。该范例式编译器应采用教学中涉及到的典型编译思想与方法。学生在教师的指导下对实际编译器代码进行阅读,将使学生对抽象的编译理论与算法有更深刻的认识,从而达到较好的教学效果。

c)面向对象式语言的描述模型

当前,面向对象式语言已成为主流,而目前课程中的内容却是围绕面向过程式语言展开的。为此,需要在教学过程中增加一部分内容,即选择某个对象式语言来描述典型的编译算法。但就目前来看,以面向对象语言作为源语言来重新组织编译原理的教学内容并不合适。在教学过程中应向学生指明这一点,使之有个正确的认识。

2)实践环节的设计

“编译原理”也是一门实践性较强的课程,只有通过实践环节才能让学生加深对抽象理论的理解,培养其分析、设计软件的能力。为此,必须重视实践环节的教学,精心设计实验方案,合理组织实践训练(对于不同专业培养目标、不同类别学生素质差异,需设计不同的实验方案)。

a)设计合适的实验内容

目前,大多数高校在“编译原理”课程的实验内容上基本上都是要求学生能上机实现一个小型模型语言的完整编译程序,或者是分四个单独的实验(词法一个实验,语法三个实验)。这样的实验内容存在一个缺陷就是不能充分激发学生的学习兴趣,因为他们认为学习编译就是为设计编译器,而大部分学生以后从事这方面工作的可能性较小。为此,我们需要设计一个能运用编译理论和技术去解决实际问题的实验。例如,可以给定一个受限汉语的子集,引导学生用文法去描述它,然后把它应用到一个简单的自然语言查询的程序设计中去。

b)合理安排实验课时间

实验时间安排要具有灵活性,不要一周或两周一次实验,这样可能和授课的理论内容脱节。可以分别在每个实验的相关内容讲解完后安排这四个实验,并要求学生记录下每次实验的输入和输出形式,实现理论与实践的结合。

c)改进实验课教学方法

为了让实验能达到预期的效果,需要做以下工作:一是老师在实验前要将准备好的实验资料发放给学生,让学生利用业余时间分析、设计实验内容;二是老师指导学生一起讨论实验所涉及的原理、程序模块的功能和部分变量的用途;三是学生在理解的前提下,开始进行实验,老师随时进行监督指导。最后,在实验完成后,老师一定要检查学生的完成情况,并给予记录,学生则要记录下所有的实验结果。

3)教学方法的改进

“编译原理”课程抽象性和理论性较高,学生普遍感到内容难理解,更不能运用编译技术所涉及到的思想和方法去解决其他专业问题,学起来枯燥、无味。为此,需要灵活运用多种教学方法,以激发他们的学习兴趣和积极性,培养其分析、解决实际问题的能力。

a)多媒体辅助教学

“编译原理”课程涉及到形式语言与自动机理论,主要包括一些经典的语法、语义分析算法。这些理论和算法抽象复杂,不易理解。为此,需要借助多种辅助教学手段,如cai课件、cai教学系统和教学网站等。这样可以把抽象的理论形象化,把知识讲解化静为动,寓教于乐,培养和激发学生的学习兴趣。

b)师生互动式教学

教学是由“教”与“学”两方面构成的,师生互动才能“教”、“学”相长,提高教学效果。在课堂上,应采用“启发式”、“讨论式”、“提问式”等多种教学模式,以发散学生的思维,激发他们的思考能力;在课后,应通过教学网站发放调查问卷等形式及时获取学生对教学活动的意见与建议,学生也可以通过bbs系统进行交流,以便及时发现问题进而改进教学方法。还可以指定课后的时间组织小型的师生面对面交流,一方面是答疑,一方面也可以就编译领域的一些新问题、新动向进行研讨,进一步激发学生的学习积极性。

4)教材建设和cai课件制作

目前为止,国内外已有不少关于“编译原理”的经典教材,因而我们暂时不打算重新编写授课教材。但从以上分析可知,目前的课程实验内容设计却各不相同,没有合适的实验教材,因此有必要根据我院特色来组织编写“编译原理”课程实验教材。同时,我们也将依据我院教学实际,重新合理组织教学内容,图文并茂,制作精良的cai课件,以减少板书的时间,提高授课效率。

5)教学网站的建设

开发“编译原理”网络教学平台,构建良好的网络辅助教学环境,实现学习、答疑、作业和考试等各个教学环节的网络化,教师和学生可以很方便的利用该平台完成几乎所有教学活动,本课程教学网站主要将分四大模块:

a)基本信息

包括课程负责人、课程主讲人、教学队伍、自我评价、课程建设规划、课程教学录像等相关信息。

b)课程建设

课程概况:课程简介、课程大纲、教学日历、教材和参考文献。

教学资源:电子教材、电子课件(ppt)、电子课件、参考教案、例题源代码、习题答案、考试样卷及参考答案。

实验教学:实验教学大纲、实验内容、实验指导。

在线考试:为学生提供了模拟笔试、模拟机试和在线考试,实现了自动组卷和评分。

作业练习:提供了各章的练习题、单元测试题。

作业提交:主要提供了作业的与提交等功能。

c)bbs论坛

提供学生、老师相互之间的交流平台,以便及时发现问题进而改进教学方法和内容。

d)问卷调查

在课后,发放调查问卷及时获取学生对教学活动的意见与建议。

6)cai教学系统的研制

cai教学系统是辅助教学的一重要手段,通过它可以帮助学生加深对编译思想和方法的理解与运用,进而培养和激发他们的学习兴趣。我们将考虑按照图1所示的系统结构图来设计“编译原理”课程的cai教学系统。

基本知识播放:提供每章的基本知识点的查询和一些基本知识点的程序实现等。

编译过程演示:这是cai教学系统主要模块,提供了词法、语法、语义分析算法的动态演示,而且还要动态演示中间代码生成、中间代码优化和目标代码生成的执行过程。

自我测试:提供题库,让学生测试自己对所学知识的掌握情况。

系统维护:随着编译技术的发展,知识的不断更新,会出现一些新的概念和算法,因此系统也要随时增加新的知识点。另外,随着系统的运行,可能会发现一些不正确的地方,也需要及时修改。

本文由http://收集整理

在线咨询