编译原理论文范文

时间:2023-03-19 14:26:41

编译原理论文

编译原理论文范文第1篇

论文摘要:本文主要针对“编译原理”教学中出现的系统复杂、理论深奥、教学效果不理想等一系列问题,应用建构主义学习理论.提出了一个有效的解决方案一建立以学生为主、师生互动的教学模式。

“编译原理”是计算机及相关专业的一门重要专业课程,在计算机科学中有很重要的地位和作用,已被国内外高校列为计算机专业的主要课程。它主要介绍了高级程序设计语言编译程序构造的一般原理、基本设计方法、主要实现技术和一些自动构造工具。通过该课程的学习,对提高学生计算机软件素质,使学生真正认识计算机信息处理实质并综合运用所学的软件设计技术来分析问题等具有很大作用。

由于涉及形式语言、有穷自动机等抽象内容,在“以教师为中心,教师讲、学生听”的传统教学模式下,学生在学习中普遍感觉内容太过抽象、缺乏学习积极性。因此,如何打破传统教学模式、让这门课的教学效果得到较大改观,就成为一个亚待解决的问题。近二十年以来,国内外的许多教育工作者、教育学家、教育技术专家多年来从理论与实践两个方面作了大量的研究与探索,建构主义理论正是这种努力所取得的主要理论研究成果。

1、建构主义学习理论及教学模式

近二十年以来,随着多媒体计算机和Internet网络教育应用的飞速发展,建构主义学习理论正愈来愈显示出其强大的生命力,并在世界范围内日益扩大其影响。建构主义提倡在教师指导下的、以学习者为中心的学习,也就是说,既强调学习者的认知主体作用,又不忽视教师的指导作用。

建构主义学习理论认为“情境”、“协作”、“会话”和“意义建构”是学习环境中的四大要素或四大属性。学习环境中的情境必须有利于学生对所学内容的意义建构;协作发生在学习过程的始终,对学习资料的搜集与分析、假设的提出与验证、学习成果的评价直至意义的最终建构均有重要作用;会话是协作过程中不可缺少的环节,学习小组成员之间必须通过会话商讨如何完成规定的学习任务的计划;意义建构是整个学习过程的最终目标。所要建构的意义是指:事物的性质、规律以及事物之间的内在联系。在学习过程中帮助学生建构意义就是要帮助学生对当前学习内容所反映的事物的性质、规律以及该事物与其它事物之间的内在联系达到较深刻的理解,这种理解在大脑中的长期存储形式就是关于当前所学内容的认知结构。

与建构主义学习理论以及建构主义学习环境相适应的教学模式为:”以学生为中心,在整个教学过程中由教师起组织者、指导者、帮助者和促进者的作用,利用情境、协作、会话等学习环境要素充分发挥学生的主动性、积极性和首创精神,最终达到使学生有效地实现对当前所学知识的意义建构的目的。”在这种模式中,学生是知识意义的主动建构者;教师是教学过程的组织者、指导者、意义建构的帮助者、促进者;教材所提供的知识不再是教师传授的内容,而是学生主动建构意义的对象;媒体也不再是帮助教师传授知识的手段、方法,而是用来创设情境、进行协作学习和会话交流,即作为学生主动学习、协作式探索的认知工具。显然,在这种场合,教师、学生、教材和媒体等四要素与传统教学相比,各自有完全不同的作用,彼此之间有完全不同的关系。但是这些作用与关系也是非常清楚、非常明确的,因而成为教学活动进程的另外一种稳定结构形式,即建构主义学习环境下的教学模式。

2.建立以学生为主、师生互动的教学模式

基于以上理论,在整个编译原理”的教学过程中,应该创造一种良好的氛围,建立以学生为主、师生互动的教学模式。

2.1教师的准备

教师的角色是学生建构知识的忠实支持者。教师的作用从传统的传递知识的权威转变为学生学习的辅导者,成为学生学习的高级伙伴或合作者。教师应该给学生提供复杂的真实问题,教师必须创设一种良好的学习环境、必须提供学生元认知工具和心理测量工具,培养学生评判性的认知加工策略,以及自己建构知识和理解的心理模式。因此,教师在课前应通读教材多遍,并做完习题,然后参考同类教材,把内容烂熟于心。同时,教师应准备教学课件、教学网站等辅助教学资源,真正起到组织引导的作用。

2.2注重启发式教学

建构主义学习理论认为,学习者与周围环境的交互作用,对于学习内容的理解(即对知识意义的建构)起着关键性的作用。教师应组织和引导学生进行讨论和交流,共同建立起学习群体并成为其中的一员,共同对课程所涉及的内容进行讨论。

因此,对于学生自学较容易的章节,采用指导学生备课,然后课堂上由学生讲课、教师总结的方式进行,对于学生的提问,也不是简单的给出答案,而是在课堂上展开师生间的讨论,让所有的学生看到问题从提出、分析到解决的全过程,充分发挥学生的学习主动性,培养学生的创新能力。以下就求Follow集的方法加以简要说明。

在预测分析中,Follow集的定义如下:设G=(V,.,VN,S,P)是上下文无关文法,AEVN,S是开始符号;Follow(A)二{aIS=''''=>wA(3且aEVT'''',aE、F1TST.(}),}.L。V,.`,(3aV''''},若有S=`=>N,A(3,且p=’二>。,则#EFollow(A)。另外,若A-"aB是一个产生式,则把FOIrLOW(A),加至FOLLOW(B)中。怎样系统、快速而准确地求出Follow集?学生在讨论中发现,求Follow集必须从文法开始符号S推导,因此,可以直接观察每条产生式的右部,找出要求Follow集的非终结符(设为A),进一步观察A后面的字符串,若可推出终结符,则此终结符在Follow(A)中,若为。,则产生式左端非终结符的Follow集在Follow(A)中。由此概括出了求Follow集的行之有效的方法。

2.3运用实例教学模式

实例式教学也被称为抛锚式教学、基于问题的教学或情境性教学。是建构主义的教学模式之一。学习者要想完成对所学知识的意义建构,即达到对该知识所反映事物的性质、规律以及该事物与其它事物之间联系的深刻理解,最好的办法是让学习者到现实世界的真实环境中去感受、去体验(即通过获取直接经验来学习),而不是仅仅聆听别人(例如教师)关于这种经验的介绍和讲解。

对于较复杂、枯燥的理论,在教学中大量运用实例,通过讲解一学生练习一学生讲解一学生再练习一教师小结的教学模式,让学生能够从外部信息源提供的特殊的例子出发,进行归纳推理,得到一般的规则或一般性的知识。这样,学生听懂了,理解了,增强了自信心,巩固了理论知识。

2.4合理组织实验和课程实习

课程实验应以编译理论中的一些经典算法的实现为主,一方面可以培养学生的实践能力和动手能力,另一方面可以通过对算法的实现达到更准确、更牢固的理解和掌握这些算法,从而提高学生的实际应用能力。

课程实习应充分考虑编译理论与实际应用相结合,突出开创性和实用性。教师应提供程序源代码而空缺关键模块,让学生来完成。这种组建式的实习方法,使得实习题所涉及的问题难度没有降低,但由于学生只需完成关键的组件模块,学生能够集中精力解决关键问题,实现难度有一定程度的降低。鼓励学生间相互探讨,各抒己见,激发学生的创作研究热情并共同提高。

3.教学效果分析

通过以下两组数据的比较,可以看出应用了新的教学模式后.学生学习情况的变化.说明教学效果得到了较大改观。

4.结束语

建构主义的教学设计强调要发挥学习者在学习过程中的主动性和建构性,重视情景’。、’。协作“在教学中的重要作用,提出一系列以学。为中心的教学策略,这些思想和学习策略,为构建建构主义教学设计模式奠定了很好的基础,建构主义教学设计强调学生是认知过程的主体,是意义的主动建构者,因而有利于学生的主动探索、主动发现、有利于创造型人材的培养。

编译原理论文范文第2篇

关键词:编译原理;教学实践;学习兴趣;应用领域

文章编号:1672-5913(2013)18-0062-04

中图分类号:G642

0 引言

编译原理课程内容丰富,而且涉及形式文法和语言、有穷自动机等抽象内容,学生理解和掌握有一定难度。加上编译程序是系统软件,让不少学生又增添了一层畏惧,甚至有的学生戏称该课程是软件系列课程中最难学的“天书”。部分学校单纯从“直接有用性”角度考虑,将该课程由必修改为选修,甚至取消该课程,这些做法从另一个角度助推了学生的畏难情绪,也打击了教师的教学研究积极性。

为打破这种尴尬局面,解除学生的学习心理障碍,我们引导学生探索编译的原理、方法和技术在各应用领域中的使用,并以“应用领域编译器”的构建作为课程实践内容。这些做法,既改变了编译的“抽象”印象,激发学生学习兴趣,又让学生在具体应用问题的求解中,从系统的层面重新认识此前程序设计、数据结构与算法等课程介绍的程序、算法,在实践中体会各种概念、原理和技术的实质,有助于学生深刻体验计算机问题求解的内涵,建立计算机系统观。

1 基于领域应用的研究性教学实践

编译原理作为本科生课程,其主要目标是希望学生掌握编译原理中的基本概念、理论和方法,在系统级上再认识程序和算法,提升学生的计算机问题求解的水平,增强其系统能力,体验实现自动计算的乐趣。

如何帮助学生克服对编译原理课程的恐惧,激发学生的学习兴趣,达到课程的教学目的,是任课教师需要解决的重要问题。

研究表明:正情绪(如兴趣)有利于智力操作,负情绪(如痛苦)不利于智力操作。为提高学生学习编译原理的“正情绪”,我们在实践中逐步摸索出了基于领域应用的编译原理课程研究型教学方法,大大减轻了学生对编译课程的畏惧感,提高了学习兴趣,改善了教学效果。

1.1 以领域应用为导向,激发学习兴趣

编译程序是系统软件。在有限的学科知识背景下,一些学生认为自己将来不会从事系统软件开发,编译原理课程的学习没有实际意义,因而没有学习兴趣。另一部分学生则认为涉及系统软件的知识是复杂的、晦涩难懂的,由于惧怕,在心理上给自己增加了学习障碍。

建构主义学习理论提倡以学习者为中心的有意义的学习,认为教师是意义建构的帮助者和促进者,而不是知识的传输者与灌输者。事实也证明“兴趣是最好的老师”,一旦学生的学习兴趣被激发,学生对问题的钻研深度和取得的成果往往会超过老师。因此,在编译原理的教学过程中,我们以激发学生的学习兴趣为切入点,尝试探究式的教学方法。

实际上,编译原理课程讲述的是通用的问题求解方法,是针对各个具体应用领域中问题共性的求解方法,是从“类”的角度出发的计算方法,一旦掌握,可以应用于各领域具体问题的“实例”问题求解,效率更高,方法更通用。

现实中,很多应用领域都在使用编译的原理、技术和方法。例如,从程序设计语言实现的角度得到的词法分析、语法分析、语义分析的方法,还有中问代码生成、目标代码生成的思想,在自然语言处理领域有很好的应用实例;程序变换的思想在软件自动生成方面得到体现;网络环境下的搜索引擎也用到编译的原理和技术。学生受限于已掌握的知识,缺少实际应用的经验,误以为编译原理课程介绍的内容就只是用于作为系统程序的编译程序的构建,畏惧心理加上缺乏兴趣,使得这门课程的学习难度无形中加大。

在课程的开始阶段,我们让学生选择一个自己感兴趣的应用领域。随着课程的进行,引导学生分析应用领域中的问题,寻找其与编译问题的相似性,发现二者的联系,思考编译中的原理、方法和技术如何与这些应用领域中问题求解方法相结合。当面对自己感兴趣的应用领域时,学生的学习动力就不可估量了。我们再引导学生将这些应用领域问题的求解转换成“类”的问题描述,思考这些“类问题”如何用课堂所学的编译方法予以求解。

举例来说,在最近一轮的编译原理课程教学中,学生们就从多个非程序设计语言翻译的角度探索了编译技术的应用,涉及网络传输协议解析、文档编辑器、测试自动化、文档排版、作业自动批改、汉语自然语言处理、恶意脚本查杀、逻辑门电路绘制、汉语英语翻译、自动阅卷系统、火车票购票、中文识别、邮件地址识别、模式识别等诸多非编译问题。

在探索了编译理论和技术在不同领域的可能应用后,我们又指导学生将心得撰写成研究型小论文。虽然大多数论文还略显幼稚,但论文的撰写过程确实是对研究型学习的再一次总结和升华。

当学生们看到编译的知识在如此众多的非编译领域同样有着大量的用途时,他们不再觉得编译原理课程的内容与自己未来的学习和工作无关,反而希望能更好地学习和理解编译原理课程介绍的原理、方法和技术,以便为将来的发展打好基础。

在兴趣的驱使下,编译原理课程的学习不再枯燥晦涩,即使面对形式化描述的抽象内容,学生也不再畏惧;同时,编译原理课程的教学目的也得以实现。

1.2 构建应用领域编译器,提高实习参与度

传统的编译原理课程实习中,学生在掌握基本原理的基础上,完成一个受限程序设计语言的词法分析程序、语法分析程序和语义分析与中间代码生成程序。虽然学生可以自行选择语言完成实现,但编译程序的“系统程序”的地位,使学生整体学习兴趣受到影响,而对课程实践的兴趣不足,又直接影响了对理论知识的理解和深入。

建构主义的学习观认为:学习不是由教师把知识简单地传递给学生,而是由学生自己建构知识的过程;学生不是简单被动地接收信息,而是主动地建构知识的意义,这种建构是无法由他人来代替的。单纯的课堂听课,没有真正完成知识的掌握和转化。课堂听懂了但课后不会做题或实习就是一个很好的证明。课堂听课过程中,学生是运用自己已有的知识,来衡量教师当前讲述内容的合理性,教师当前所讲述内容并未转化为学生已有知识体系中的一部分。所谓“课堂听瞳了”,只是学生使用已有知识判断出教师所讲内容“合理”而已。只有当教师所讲内容真正转化成学生知识体系中的一部分时,做题或实习才不会困难。所以,习题和实习是理论课程学习的重要实践环节,在编译原理这门课程中更是如此。

我们除了在课堂教学中引导学生探究编译原理和技术在非编译领域的应用,习作研究型小论文外,还在课程实习环节采用构建“应用领域编译器”作为实习题目,以提高学生的实习兴趣和参与度。

编译原理课程的教学目的是培养学生在系统级别上重新认识程序和算法。我们采用循序渐进的引导,培养学生从“类”的层面逐步完成应用领域“实例”问题的认识、分析、设计和系统实现。

1)以能力确定选题。

并非所有的学生都适合选择程序设计语言以外的应用领域问题作为实习题目。我们让学生根据自己的能力选择合适的选题。

普通层次的学生,要求其掌握最基本的方法和技术,而不被应用问题本身的复杂性牵扯太多精力。我们按照传统编译原理课程实习的做法,推荐一个受限的程序设计语言(包含语言的若干基本成分,如表达式、赋值语句、If语句、while语句等),学生可选实际程序设计语言(如C语言)的子集,也可由学生自行设计一个小语言,要求实现该受限语言编译程序的词法分析程序、语法分析程序、语义分析和中间代码生成程序,并且每个程序的输入、输出均以文件形式存放,前一阶段的输出可以作为后一阶段的输入。虽然并不是一个完整的编译器,但是编译程序工作过程的主要环节都得到模拟,而且各部分的共同作用也有助于理解编译程序的整体架构,同样可以达到掌握主要编译技术的目的。

对于学习能力较强的学生,我们建议其选择一个自己感兴趣的应用领域问题,采用编译程序模型化计算的思想,实现一个应用领域编译器。至于具体的实现过程,则随着课程的进度,逐步引导学生从“问题类求解”的层面定义问题,并完成分析、设计和系统实现。

2)渐进式构建引导。

随着课堂内容的进行,我们采用渐进式构建的方法,引导学生逐步实现应用领域编译器,其实施过程如图1所示。

(1)定义领域对象。确定应用领域后,引导学生分析领域问题处理对象的构成特点,并据此构造领域问题处理对象的生成文法。

(2)确定领域的“词”。引导学生分析和认识应用领域中的“词”和“词法分析”的工作内容。在应用领域中,“词”是构成问题对象的最小处理单位。明白了“词”的含义,“词法分析”就是识别出这些最基本的单位,其构建完全和程序设计语言词法分析程序的设计与实现一样。

(3)确定领域“语法成分”。引导学生分析和识别应用领域的“语法成分”和“语法分析”工作内容。应用领域中的“语法成分”是被处理对象的不同层次的构成单位,“语法分析”就是分析领域被处理对象的构成,可以选用编译原理课程中的一种语法分析方法予以实现。

(4)确定领域“语义”和“中间代码”。这里的“语义”和“中间代码”依赖于领域问题的具体应用,需要引导学生分析不同领域中问题求解的目的,从而得出应用领域的主要操作——“语义分析”的内容。

(5)确定领域“目标代码”。其内容也依赖于领域中的具体应用。

当实习全部完成后,学生体验到了从词法分析、语法分析、语义分析和中问代码生成、目标代码生成的所有环节,这实质上完成了一个应用领域编译器,实践过程覆盖了课程教学目标要求学生掌握的全部内容。

虽然每个应用领域系统不必完全按照上述方法实现,但是按照上述方法完成系统后,我们引导学生分析该方法的好处:这样实现的系统可以略作修改甚至不作修改就能处理该领域的同类型问题,可以大大提高软件的可移植性,减少软件开发的工作量。主要原因就是按照编译的方法,是从“问题类”的角度看问题,从系统的角度分析、设计和实现问题的求解,因此最终实现的系统可以适用于满足“类”特征的所有“实例”问题。

在建构主义学习理论指导下,我们以激发学生的学习兴趣为切人点,使课程学习与具体应用领域相结合,让学生体会到编译原理和技术的实用性,大大提高其学习参与度;同时注重引导学生对问题求解基本思想、方法的探讨,从确定领域问题,到词法分析、语法分析、语义分析、目标代码生成的每一步求解思路分析,到应用具体编译技术实现求解算法,让学生明白怎样从“实例”问题的计算求解过渡到问题“类”计算,锻炼了学生抽象问题描述和解决问题的能力:而整个系统的实现涉及不同层次的抽象和问题处理,达到了培养学生系统能力的目的。一些学生在课程学习结束后,体会到了学以致用的乐趣,还主动与教师谈论研究型论文和应用领域编译器的改进设想。

通过这样的实践,学生对文法、语言的实际意义有了更广泛的认识,而不再局限在程序设计语言这个范围内,真正体会到形式文法和语言只是具体问题的抽象反映,从而更深入地理解了计算机学科问题求解的抽象描述和处理这一实质。

2 结语

编译程序的“系统程序”地位造成的陌生感、编译原理课程自身内容的复杂性,给学生学习该课程带来了一定的障碍。我们在编译原理课程的教学实践中,针对该课程学习的最大问题——陌生与抽象,以非编译的应用领域问题求解为切入点,以学生对应用领域问题的学习兴趣提高学生的学习和实践参与度,通过引导学生在“类”的层面尝试领域“实例”问题的求解,使学生体验了计算机求解的问题抽象描述与处理方法,达到了课程的教学目的。

参考文献:

[1]蒋宗礼,编译课程教材建设[J],计算机教育,2007(6):74-76

[2]蒋宗礼,“编译原理”教学设计[J],计算机教育,2008(2):26-30

[3]徐旭东,蒋宗礼,论编译原理在程序设计类课程建设中的重要作用[J],计算机教育,2011(9):27-28,32

[4]蒋宗礼,“编译原理”课程与专业能力培养[J],计算机教育,2009(11):4-6,10

编译原理论文范文第3篇

教材现状和问题

我上大学时,“编译原理”课程用的是由陈火旺、钱家骅、孙永强三位老师合写的“编译原理”一书,这本书可称之为编译原理教材的经典。该书系统地介绍了编译基本理论和方法,内容充实,覆盖面广。既注重了最经典、最广泛的基本编译技术,又力求反映20世纪70年代以来一些最重要的新成果。至今,该书仍是我进行教育和科研的主要参考书之一。我记得当时上课的王家启老师(上海计算技术研究所)给当学生的我们出了一个上机题目:输入一个正规式,输出该正规式对应的确定有限自动机,当然该题是书中习题之一。在解题过程中,我曾经有过这样的想法,是否可以用LR分析法来解决这个问题。正是由于这个20年前的想法,加上自己不断的努力,在对编译理论理解和实践不断加深的同时,于2001年提出了一个新的自动构造词法分析器的方法,于《计算机工程》杂志2001年第7期。

在随后的“编译原理”课程的教学中,本人也不断发现好书或书中写得比较好的段落。例如由高仲仪、蒋立源二位老师合写的《编译技术》一书。在该书中,通过一个“大象吃花生”的英文句子的语法分析,引入上下无关文法的基本概念和定义,这样的书写使人特别容易理解。又如由何炎祥老师主编的《编译原理》一书。在该书中有关LR分析法基本原理的描述写得相当好,他将活前缀在LR分析法中的作用写得清清楚楚。另外,尽管有些书不是介绍编译技术的,但是这些书对于“编译原理”课程的教学也是相当有益。例如由蒋国南老师翻译的《PASCAL程序设计》一书,书中二个程序例给了我特别深刻的印象。一个是去除源程序注释的程序例,而另一个是使用自动机的程序例。在以往的《编译原理》教科书中,只介绍如何构造自动机,基本上不介绍使用自动机的控制程序。其结果是:学生只知道自动机的构造方法,但不知道自动机如何使用。同样,在以往的词法分析教学中,只注重扫描器(单词识别程序)的教学,手工构造有状态转换图,自动构造有DFA;而对于词法分析的输入和预处理,最多一笔带过。实际上,输入和预处理程序是编译程序和用户程序的接口。编译程序首先是从文件读入源程序,经预处理后,才由扫描器进行单词识别。适当加强这部分内容的教学,有助于学生对编译程序前端的理解。

当然,由国内出版社出版的书也有不尽人意的地方。例如现在写书都要求有创新或标异。明明没有创新或标异,为了达到该指标,将一些与“编译原理”课程无关或关系不大的内容写入书内,这些内容根本不会用于教学,比较典型的是“并行编译”这部分教材内容。个别作者将国外教材删去某些章节,加上习题和习题解答后,就作为一本教材交付某出版社出版。正因为本人曾买到过这种类型的书,从此改变了本人看到有关编译的书就买的习惯。目前在市场上销售的有关编译的书,基本上都以LEX和YACC系统作为“编译原理”课程实习手段。当然LEX和YACC系统有多种版本,可用于不同的操作系统。但LEX和YACC系统毕竟是外国人编制的,是否适合于国内教学仍是个问号。由于本人与他校教师基本无教学交流,也不清楚实际使用效果如何,有关编译的书大都由多人合写,写编译理论部分的作者和写实验部分的作者往往不是同一人。从书的整体来看,有明显的脱节现象。LEX系统实际是一个状态转换矩阵产生器,而YACC系统实际上是一个LALR(1)分析表产生器。我想,LEX和YACC系统并没有复杂到常人不可实现的程度,为什么作者本人不能动手编写一个类似系统用于学生实验。

当然也不是说国外教材什么都好,包括国外优秀教材在内,也有不足之处。举一个简单例子:计算机的内存越来越大,由于引入控件,用户程序越来越短,是否还有必要将“在词法分析预处理时,通常将输入缓冲区分成二个半区互补轮流工作”这一内容写入教材,我想至少要说明一下。

提高教师自身学术水平

“编译原理”这门课程涉及的知识面较广,一头是程序设计语言,包括文件系统;而另一头是汇编语言或机器语言,包括计算机的系统结构。编译系统以形式语言和自动机为基础理论,构造算法复杂,系统十分庞大。所以,将“程序设计语言”、“数据结构”、“离散数学”和“汇编语言”等课程作为“编译原理”课程的前驱课程已成为共识。作为一个“编译原理”课程授课教师,除“编译原理”课程本身外,还要全面掌握上述这些课程的知识。尤其是对于“程序设计语言”和“汇编语言”这两门课程,要有一定的教学经历,这样才能把握好“编译原理”这门课程的教学。

现在有越来越多的教师加入了写书行列,著书立说已不是少数人的专利。但是,如何写书,如何写好书,这是每个作者必须面对的问题。尤其是作为一本教材的作者,必须具有一定的学术水平。在自己所涉及的学科领域中要花大功夫,要有自己的见解,要有自己的论文。在一定知识积累的基础上,才能编写好教材。

以科研为基础

“编译原理”课程是一门实践性很强的课程。尽管这门学科比较成熟,但仍然存在许多课题,有待我们去探索。比较典型的问题就是上面提及的LEX和YACC类似系统的实现。

本人先后实现了LL(1)分析表自动产生器、LR(0)分析表自动产生器和SLR(1)分析表自动产生器,相当于实现了YACC类似系统。由于有这样的编程经历,使得我在上语法分析课时,有一种如鱼得水的感觉。

作者曾试图实现LEX系统,但未获成功。正规式相当于算术表达式,作者从LR分析法的教学中得到启示,将LR分析法应用于词法分析器的自动构造,成功地实现了词法分析器的自动产生器,所生成的词法分析器是使用LR分析表来工作的。为了区别LEX系统,该系统简称为LR_LEX系统。

在此基础上,本人进一步实现了汇编程序自动产生器,于《计算机工程》杂志2005年第12期。

该二项新的编译技术和方法已写进《编译原理实用教程》一书,该书已由清华大学出版社出版发行。

重组教材内容

可能有些《编译原理》教材作者,他写书的目的并不是完全面向学生的,可能考虑把它作为这门学科的大全来编写。例如由美国著名计算机科学家Alfred V.Aho、Ravi Sethit和Jeffrey D.Ullman合著的《Compilers: Principle,Techniques,and Tools》一书,该书已由李建中和姜守旭老师翻译成中文,中文译名为《编译原理》。将这样的书作为教材,本人认为是不合适的,将它作为教师的教学参考用书,那是最好不过了。

由于面向的学生不同,培养目标不同,如何编写合适的“编译原理”课程教材,在很大程度上取决于作者本人所处的教学环境。但是,有一点是共通的,通过“编译原理”课程教学,使学生掌握编译基本理论和方法,能够建立一个较为完整的编译系统模型。不能由于作者个人因素或者知识难易程度来左右教材的书写。从国内出版的一部分《编译原理》课程教材和实际教学内容安排来看,本人认为存在如下问题:

(1)词法分析部分偏少;

(2)语法分析部分过多;

(3)语义分析部分过于简单;

(4)目标代码生成部分几乎是空白;

(5)讲授了一些不是很有必要讲授的内容(如DFA最小化、中间代码优化等)。

这是造成学生学习“编译原理”课程感到困惑的主要原因。难怪有些教师宁可使用老教材或者国外教材,而不愿使用新教材。

词法分析相当重要。正是从词法分析开始,将学生领进编译系统的大门。并且,作为编译系统的基础理论(自动机),也是在词法分析阶段讲授的。在授课中,应强调单词二元式的作用,单词种别用于语法分析,单词值用于语义分析。关于“DFA最小化”这一部分教学内容,本人认为应删除,教育重点应为:DFA的构造和使用。理由为:编译系统太复杂,首先要解决吃饭问题,然后再解决吃得好问题。

语法分析部分的教材篇幅应大幅减少。算符优先分析法较简单,宜于手工构造,特别适合于算术表达式的语法分析,在有些程序设计语言书中,也能看到它的介绍。由于算符优先分析法适用范围较小,实用意义不大,在教材中完全可将其删除。关于LR分析法,本人认为只要介绍LR(0)和SLR(1)分析法即可。理由为:SLR(1)分析法很实用,分析表又易于构造,它可解决大部分语言的识别问题。编译系统中的事情太多,先解决主要矛盾。

语义分析部分应加强,这是学生理解整个编译系统的关键,尤其要着重介绍符号表和常数表在编译程序中的作用。有了护照,可以周游世界;有了符号表和常数表,可以在编译系统中畅行无阻,符号表和常数表就是编译系统的护照。在内存分配时,符号表是变量地址分配的依据。由于符号表的引入,使得代码生成和变量实际存放地址无关;甚至可在程序运行过程中,对变量地址进行动态分配。

在目标代码生成部分,可先假设一个汇编语言虚拟机模型,然后介绍从四元式到汇编语言的翻译。应强调的是:由于符号表和常数表的结构不同,导致变量和常数寻址方式的不同。从汇编语言到机器码的翻译, 可将其留作课程实习,详见下一节。

创建实验环境

向学生提供一个虚拟裸机,虚拟裸机是用高级语言来实现的,虚拟裸机只接受二进制形式的机器指令。提供虚拟裸机的好处在于:可将与编译无关的一些硬件特性屏蔽掉,可根据要求来改变虚拟硬件配置。

要求学生根据虚拟裸机的机器指令设计汇编语言,然后构造汇编程序。用户用汇编语言编写程序,由汇编程序将它翻译成机器指令程序,该机器指令程序可以在虚拟裸机上运行,这样就形成了一个微型编译系统。这个微型编译系统包括了编译过程的四个主要阶段,它们是词法分析、语法分析、语义分析和目标代码生成。在汇编程序构造中,要求学生运用在“编译原理”课程中所学到的理论和方法。首先根据机器指令中所含的地址数量,将机器指令划分为0地址指令(RET)、A型1地址指令(READ)、B型1地址指令(CALL)和2地址(ADD)指令三大类。然后用上下文无关文法予以描述,并生成SLR(1)分析表。由于分析表的规模不大,可由学生手工构造。在有条件的情况下,可向学生提供SLR(1)分析表产生器,用于验证分析表的正确性。根据机器指令的二进制位特征,设计和构造语义分析器。语义分析子程序主要是由二进制位运算构成。当然这个汇编程序是相当初步的,它不允许用户用符号名来表示变量地址或标号。

有关这一部分内容,在《编译原理实用教程》一书中有详细介绍。

编译原理论文范文第4篇

为了能够更加详细的讲解计算机改革的基本思路,就计算机专业的主要课程的编译原理所获得实验教学改革以及相应的实验教学内容设计进行了详细的介绍。本案例中高职院校以往的编译原理实验项目的设计更加倾向于验证类型的基础性实验,虽然在一定程度上增加了实验教学的分量,但是学生的专业水平和综合素质并没有得到有效的提高。因此,通过对实验教学的理论知识进行改革使其能够与实验教学改革更加的协调,从而获得更加科学合理的实验教学体系,让学生能够在编译原理的专业课程的实验教学当中获得知识的同时也提高个人的综合水平。

1内容改革与实验改革同等重要

在计算机专业中,专业理论的改革创新与实验教学的改革创新是同等重要的,实验的改革离不开相关理论知识的更新,理论知识的更新离不开改革对其的支持,实验教学理论知识的更新与实验教学的改革是相辅相成的。以往的编译原理理论知识对于学生而言只是需要记住,并不能够对其今后的实际操作水平有所提高,因此对编译原理的理论知识进行更新,将其转变成计算机的语言知识以及对其相应的处理操作,根据新的编译课程理论知识,对实验教学进行改革,让学生能够将学习到的新的编译原理理论知识在实际动手操作的时候进行运用,使得大部分学生对编译原理课程的兴趣都被重新激发了出来,学生在得到了理论知识学习的同时还锻炼了实际动手操作能力,有效的提高了学生的综合素质。

2对基础性的实验和综合性的实验

编译原理的专业实验教学项目一般由两部分组成,一部分是能够直接对编译技术进行运用的基础性实验部分,另一部分是能够将编译相关知识理论与其他课程的相关知识理论技术联合起来的综合性的实验项目。基础性的实验项目主要就是为了能够加深学生对于基础性知识和操作的印象,让学生能够熟练的运用相关的实验工具。而经过合理的分解和综合之后,编译原理中基础性的实验项目可以在一定的组合下形成一个综合性的实验项目雏形。综合性的实验项目更注重的是对学生发现问题和解决问题的能力进行培养,在对各种基础性实验项目进行组合的过程中,增加需要发现问题和解决问题的部分,就能够有效的将基础性实验项目和综合性实验项目结合起来,让学生的基础素质和综合素质都得到有效的锻炼和提高。

编译原理论文范文第5篇

关键词:编译原理;实践;开源软件;GCC

中图分类号:G642 文献标识码:B

实践能力是计算机专业学生走向未来科研和工作岗位最为重要的专业技能之一。清华大学历来重视实践教学,在学校“985工程”二期本科人才培养项目的统一规划框架下,我校从2003级本科生开始,为计算机科学与技术系本科生开设了一系列实践类限选课,“编译原理专题训练”便是其中重要的一门。课程的目的是加强学生对系统软件的理解和把握,帮助学生通过实践的方式巩固理论知识,提高学生的软件开发能力。

1课程特色

清华大学“编译原理”课程面向计算机专业所有学生,培养学生学习掌握本专业必备的编程语言设计实现原理与技术,强调常见语言特征的实现原理与技术,而不讲授实际深层次语言特征的实现,也不涉及培养可胜任工业界实际编译系统开发人员的需求。

“编译原理专题训练”是“编译原理”的后续课程和有效补充,是一门限选课程,一方面体现某些高级编译技术的特点(如强调优化技术等),另一方面可以为有兴趣从事工业界实际编译系统开发工作(包括嵌入式系统开发)的学生提供必要的知识和技能储备(开源编译系统,相关工具链,参与实际的研究课题)。

因此,“编译原理专题训练”讲解部分基于工业界广泛采用的开源软件GCC,具体内容可浏览,以编程语言编译系统框架为主线安排实验。实验平台则率先采用开源软件GCC和Open64,具体内容可浏览,通过实验掌握词法分析、语法分析、中间表示、优化和目标代码生成以及交叉编译方面的基本技术和相关工具。

GCC是应用最广泛的开源编译系统。该系统是整个开源社区的基石,具有多语言、多目标支持能力,是所有Linux系统和部分Unix系统的默认编译工具,在4.0以上版本中采用GENERIC、GIMPLE和RTL等三层中间表示,GCC后端采用表驱动方式,可以人工方式构造特定语言目标机的描述文件(转换表格)实现重定向,支持市场上绝大多数处理器。

Open64是另一个开源编译系统,前身是SGI 公司用于64 位MIPS的Pro64编译器,其后采用了开放授权方式,称为Open Research Compiler,简称ORC,目前定名为Open64,其前端和GCC 4兼容,支持多种高级语言,后端支持Intel X86、Intel IA64、AMD64、MIPS(含国产龙芯)、ARM、PowerPC等多种体系结构。该系统最初定位是高性能计算,采用了五层中间表示,便于各种优化算法的实现,因此可以生成质量非常高的代码,在性能方面具有非常强的竞争力,得到研究领域和工业界的普遍认可,目前在嵌入领域也有大量应用。我们的科研团队是Open64的主要开发者之一,贡献了GCC扩展支持、PowerPC后端和C++异常处理相关的重要代码。Open64设计结构良好,分析优化全面,是编译器高级研究项目的理想平台。

采用开放的GCC和Open64软件作为实验平台,引导学生积极参与大型开源软件开发和维护活动,基于具有工业水准的真实软件进行实践活动,除编译实践之外,对于学生了解行业发展以及软件工程素养的培养也具有很大价值。

2课程的重要性

编译系统是信息行业不可或缺的重要工具软件,同时也是计算机科学、技术和工程完美结合的一个典范。前端词法、语法分析优雅的数学基础和相关自动工具,编译优化精巧的算法和准确高效的语义等价变换,以及中间表示独立于语言和体系机构的通用设计,处处闪烁着智慧的光芒。因此,GCC和Open64这样的开源编译系统,既是编译理论和技术的鲜活实例,也是软件工程的成功范例。

从目前发展形势来看,面向高性能计算的优化和针对嵌入系统的工作是编译发展的两个重要方向。

前者是计算机诞生以来一直持续发展的主题,对于每一个国家来说,高性能计算都是具有战略意义的课题,高性能计算的优化在未来十几年甚至几十年仍将持续发展。随着多核、众核技术的发展,与之相关的编程语言、编程模型和优化技术将是极为重要的研究内容。从编译器的角度来讲,这将涉及前端的语言和编程模型、后端的系统结构支持以及与之相关的优化和调试支持。

后者是面向嵌入领域的编译后端的设计与优化,是一个新兴领域。以手机为代表的嵌入式系统的高速发展带动了嵌入式领域的研发和设计,其中最重要的内容是针对特定应用需求,对软件、硬件甚至指令系统进行优化。为了符合通话需求,可能会对芯片的指令作调整,调整之后则需要相应的编译工具支持,将高级语言程序翻译为芯片能够识别的指令序列。这种需求对编译器后端设计提出了新的要求,包括具备可重定向能力的编译系统,以及针对嵌入系统、以代码体积和软件功耗为目标的编译优化技术等。

3教学目标

针对上述现状以及我们对行业情况的初步分析,本课程的主要教学目标如下:

第一是巩固编译原理的知识。学生们在编译原理课程中学习了很多基本知识和原理,到底这些知识如何体现在实实在在的系统中?这是本课程的第一个目标。

第二是了解真实的编译流程。课程讲解从高级语言源程序到可执行代码的翻译过程,以及可执行代码加载到内存的过程,同时也向学生介绍相关开源工具,并指导学生利用这些工具分析和了解这一过程。

第三是以GCC为例,剖析编译器的整体框架、编译流程和主要活动。有针对性地讲解GCC中最关键的中间表示和翻译步骤,帮助学生了解GCC从高级语言到汇编语言的翻译方法,有针对性地改善编码风格。

第四是开展编程实践。真正深入到GCC和Open64编译器内部,对其进行修改和扩充,经过这样的锻炼,学生将提高开发和维护大型、特大型软件的能力。

第五是通过开源软件,参与了解世界上影响广泛的开源项目及其背后的自由软件开发方法。该开发方法支撑着世界软件产业的半壁江山。从桌面系统、服务器系统到嵌入式系统等不同领域,都包含或使用自由软件产品,Linux Kernel、GCC、Emacs和Apache Web Server等高质量、高市场占有率但非营利的软件对整个世界产生很大的影响。通过了解和参与这些软件来了解开源现象,探讨这一现象的存在原因、发展趋势和应用前景,激发学生的思考。

4课程内容

课程安排遵循科研工作的一般活动规律。首先安排学生搜集查阅相关的文献资料,了解相关国际会议的新进展;随后教师讲解和小型实验熟悉工作的工具和对象,如GCC、Open64和Binary Utility二进制工具等;接着引导学生提出问题和项目初步意向,规划相应方案和计划进度并进行评估,以确定课程大作业;然后是提出问题和方案后的实际研究和开发,根据完成结果的评测来改进方案、继续优化。有些实验可以按照计划完成,有些做到一定程度之后会发现更多、更难的问题,这时需要引导学生正确对待并做深入分析,给出合适的评价;最后是总结和报告。

4.1课堂讲解

课程中针对GCC的讲解内容包括:

第一讲通用编译系统介绍。以GCC为例了解其工作步骤,通过解剖“helloworld.c”程序从源代码到可执行文件的过程,了解编译各个阶段的功能和输入输出,熟悉Binary Utilities工具的使用。

第二讲Linker and Loader。介绍Link和定位的概念,了解可执行文件的加载以及相关工具的使用。

第三讲GCC框架。深入探索GCC,了解其发展历程、GPL和自由软件的发展、GCC的组织结构(其前后端松散的结构,前端支持多种语言,后端支持多种体系结构)等。

第四讲GCC Tree。Tree和前端是紧密联结在一起的,它支持包括C、C++、Java、Ada在内的多种语言。

第五讲GCC中间RTL。讲解RTL基本知识、GCC中间优化的组织方式和特点。

第六讲GCC后端。了解基于模式匹配的后端构造方法。

4.2实践安排

课程初期,基于自愿组合的原则,学生分为2~4人的小组,两次书面作业和一次课程实践大作业均以小组为单位完成。

书面作业一:与编译相关的学术会议调研。利用互联网资源,以小组为单位搜集POPL/PLDI/CC/CGO/LCTES等与编译相关的最近3年的国际会议资料,每个小组针对某一次会议写出包括研究方向特点、人员和内容分布、发展趋势评价的调研资料,深入阅读该会议中的某一篇论文,撰写对该论文的阅读评价,3 000~5 000字,会议名称、年份、选读论文不允许完全重复。

书面作业二:GCC重要文档整理翻译。包括The use of the GNU compilers和The internals of the GNU compilers。每个小组负责其中一部分,不允许重复。

课程实践大作业:采用开放题目,即教师和助教不设定参考答案,全部交由学生自行探索研究。其来源有三:(1)学生自己设计,或者其他课程中的和编译相关的任务;(2)参加自由软件开发,完成某编译系统的一个新功能或者特性;(3)教师结合科研和课程情况,专门设计任务。

大致进度安排为:由同学在第1周开始自行提出选题,并经过和教师讨论确定。第7周为开题报告,每个小组提交一份报告并进行口头汇报,每两周汇报和讨论进展情况,最后三周进行项目汇报。

要求分组独立完成实验题目并给出测试方案,提交源代码和实验报告,并能够演示编程结果,做10~15分钟的简要报告。所完成代码和文档均采用GPL。

4.3课时安排

本课程的课内学时为2学时,课外学时至少为2学时。本课程是一门实践性很强的实验课程,学生以小组为单位,要搜集整理大量文献资料,阅读大量代码并进行代码编写和修改,因此课程的理论讲解内容和实践工作要适当穿行,通常安排单周讲解,双周安排实验和答疑,以便让学生完成实验工作,并在第14~16周之间进行实验检查。

4.4实例介绍

课程实践大作业选题的关键是和课程内容相关,能够给学生以锻炼,工作量适中,并具有较好的可操作性。

如在2008年,本课程的一个题目为“利用高性能Open64编译器为X86处理器编译Linux Kernel”,任务是利用当时Open64的最新代码,编译当时最新稳定的Linux版本,内核编译配置为X86默认配置。如大家所知,为方便代码书写并提高效率,Linux Kernel中大量使用内嵌汇编等GCC扩展特性,内核中诸如原子操作等关键代码片段都采用内嵌汇编来书写,但是这些扩展特性远远超出标准C规范,因此造成几乎只能使用GCC来编译Linux Kernel的局面。

这个题目看似简单,实际难度很大。涉及到内嵌汇编这一C语言扩展支持和内核关键代码,加之实验之前Open64对于内嵌汇编只有一些初步支持,如果完成Kernel编译所需要的内嵌汇编特性,需要Open64从前端内嵌汇编解析开始直到后端寄存器等比较深入的工作。

共有两个小组选择了这一题目作为大作业项目。经过努力,两个小组共找到内嵌汇编过程中的5个编译错误,提炼出5个测试用例,修正其中部分错误并向Open64社区报告,并通过Kernel内核代码语义等价修改的方式解决其他问题,成功编译X86默认配置下所有源代码文件,之后还发现一个内嵌汇编相关的连接错误,圆满完成任务。

5考核方式

课程采用公开的方式进行考核。为此,我们专门建立了课程网站,网址为/blog/?q=course,所有课程相关的资料都通过该网站公布,目前已经汇集了从课程准备开始到现在的所有资料,包括2006年开课以来所有学生的作业和源代码,面向全球公开。

本课程也很重视学生讲解和自我展示能力的培养,专门提供机会让学生主讲,每人每次5~8分钟,计入个人课堂成绩,分别进行两次小作业汇报及最终的大作业答辩和演示。

课程的成绩分布为:个人课堂成绩占40%,要求同学参加课堂讨论,提出自己的观点、实验题目等;两次书面作业占20%,小组成绩,考察书面材料的完整性和准确性;大作业占40%,小组成绩。

6总结

本文简要介绍了清华大学计算机系“编译原理专题训

练”课程的基本情况,本课程着眼于程序语言编译原理、技术和实践的结合,注重学生动手能力的培养,同时通过学生提出自选实验题目来培养他们的创新精神。此外,本课程也关注操作系统、系统结构和程序设计语言等多学科、多课程内容的交叉,帮助学生更为系统、完整地掌握计算机知识。

致谢:本课程得到清华大学“985工程”本科人才培养项目支持,本课程教材编写得到国家“十一五”规划教材支持。感谢助教张宇宙、张杨、虞振样、林明、李鑫、朱允敏、张铎、曹震、王博等人的辛勤工作。

参考文献:

[1] 顾秉林. 论中国研究型大学的科研――关于清华大学科研工作新发展的思路[J]. 清华大学教育研究,2008,29(3):1-7.

[2] 李向荣,李蔚,段远源. 研究型大学人才培养体系建设的新探索――清华大学“985工程”二期本科人才培养项目规划及建设成效[J]. 清华大学教育研究,2008,29(3):40-43.

编译原理论文范文第6篇

[关键词]计算机教育;研究型教学;编译原理

[中图分类号]G40―057

[文献标识码]A

[论文编号]1009―8097(2009)13―0062―02

引言

传统教学是以教师为核心,以知识点为核心,是由教师确定学生应该学什么,学生怎么学,而研究型教学是以学生为核心,以好奇心作为学习的趋动力,但是如何在教学过程中把学生的激情找回来,这是教学改革中一个一直在探索的问题。本文通过对编译原理课程教学实践,对应用研究型教学进行了一些尝试。

一 研究型教学定义

研究型教学是教师通过指导学生从自然、社会和生活中选择和确定与学科相关的专题进行研究,使学生在独立的主动探索、主动思考、主动实践的研究过程中,吸收知识、应用知识、解决问题、获取新颖的经验和表现具有个性特征的行为,从而提高学生的各方面素质,培养学生创造能力和创新精神的一种实践活动。研究型教学以培养学生创新能力为核心,以培养学生的创新精神和创新能力为目的,立足所学,从实际背景和问题出发,创设问题情境,在教师的引导下,确定课题,通过观察、实验、分析、归纳、猜想、论证、社会实践等方式进行学习。在专业必修课程中结合研究型教学模式能够将比较成熟的专业知识与领域研究热点将结合,使得每届教学内容都有新的变化。

二 编译原理课程特点

编译原理课程是计算机科学与技术专业学生的重要基础课程。通过学习该课程,要求学生掌握计算机语言编译程序的基本原理、方法和工具,以及编译程序的管道/过滤器型软件体系结构,更深入地理解由ACM/IEEE-CS制订的“CC2005”中提出的12个核心概念,特别是其中的“概念和形式模型”。此外,通过学习编译原理还可使学生更好的理解计算机程序设计语言的内部机制,从而更好地理解和运用程序设计语言。因此,在编译原理课程中采用研究型教学,不仅使学生掌握编译技术的知识,还还可使学生更好的理解计算机程序设计语言的内部机制,从而更好地理解和运用程序设计语言。

三 研究型教学在编译原理的应用

学生从被动接受知识到主动获取知识是研究型教学的最大特点,因此,在编译原理课程的教学过程中充分调动学生积极性是被反复强调的。为了更好的让学生理解编译技术,在课程开始时教师可以通过举例说明编译技术在计算机领域中的广泛应用,吸引学生学习课程的兴趣,比如:OQ软件是针对特定字符串进行识别并用图片替换来实现QQ表情,这是编译技术中词法分析的应用;数据库SQL语句执行之前都须对语句进行语法检查,这是正规式和正规文法的应用等。教师还应强调“语言是在软件设计中求解实际问题的一种重要途径”,告知学生在课程设计中可以选择实现当前流行的HTML、JDBC、RTF、PostScript、SQL、报表白定义等语言或子语言的编译器,激发学生的学习兴趣。

在设计教学计划时,为了突出能力培养,将课堂讨论题、课后研究题、课题提问成绩均计入学生最后的成绩。

教学计划将课程课题讨论题设计为36次,即每次课有一题,每题0.5分。根据教学大纲,课题讨论题可以在讲解新的知识点之前设计,比如:LR(1)分析方法会产生大量类似状态,如何将类似的状态合并而不会产生新的问题,从而引出LALR(1)方法;介绍完DFA、正规式和正规文法的定义之后,让学生思考三者之间是否可以转换、如何转换。

对于编译原理课程来说,研究型教学中的问题解决模式是根据学生自身知识水平和学习能力,由教师根据课程内容设置问题,学生收集科学事实,解决问题,得出科学结论并应用新知识这一个过程,教学计划中课后研究题就是采用这种教学模式。

课后研究题占课程成绩的7%一般以2~3人为一组,在整个课程中每组同学至少完成一次课后研究题,每次上课布置课后研究题要求一组同学在阅读教材的基础上对相关知识有所延伸阅读并进行相应实践,在下次课上课时给出10分钟进行演讲,题目的设置体现研究分析性与动手能力结合的趣味性问题,比如:解释型语言和编译型语言运行效率比较、设计URL地址的词法分析器。通过这些方式有效的激发学生学习的兴趣和积极性。

四 课程设计方案设计

编译原理课程是计算机软件学科理论与实践相结合的典范,在理论课中所介绍的基本概念、原理、方法和算法,要通过实验加以理解和吸收,才能能够达到真正的理解和掌握。为此设计一组与理论内容相配套的课程设计是非常重要的。本文利用Lex和Yacc工具,提出了验证、应用、创新的三步掌握编译技术的课程设计方案。

正如前文所述,本课程设计并不要求实现某种指定语言的编译器,学生以小组的形式,可以选定一种目前计算机领域中流行的编程语言或子语言实现,这样的好处是,一方面可以使学生提高学习兴趣,实现某种语言的部分功能;另一方面可以提高学生的自学和创新能力。本课程设计如下:

1 验证型实验,按照编写好的实验操作学习使用Lex和Yacc,如利用Lex计算文本文件的字符数、单词数;利用Yacc生成中缀表示的计算机器。

2 应用型实验,构造选定语言的LALR文法,使用Lex和Yacc实现选定语言的词法分析器和语法分析器。

3 创新型实验,用课程中讲授的分析方法,如递归下降分析法完成对特定语言的语法分析,并生成相应的语法树;将语法分析得到的中间代码换成自定义的四元式中间代码,并将其翻译成汇编代码。

在整个课程设计方案中,有层次的、阶段性实验课题让学生由浅入深系统学习编译技术知识,并能够应用学到的编译原理方法实现选定语言的编译器,使学生通过课程设计的学习后,即掌握编译理论和方法方面的基本知识,也具有设计、实现、分析和维护编泽程序等方面的初步能力。

五 总结

编译原理论文范文第7篇

关键词:编译原理;软件工程;工程化;知识先期注入;工程化编译理论;阶梯状迭代教学法

中图分类号:G642 文献标识码:B

作为信息产业的核心和国民经济信息化的基础,软件产业日益受到国家的高度重视。权威数据显示,我国软件产业每年人才需求量近一百万,然而令人尴尬的是,许多软件企业却招聘不到真正合适的软件人才。信息社会不断增长的软件人才需求与优质软件专业教育供给不足的矛盾已成为计算机高等教育发展面临的一个重要问题。

2001年12月,经国家教育部和国家计委联合发文批准,全国首批35所示范软件学院正式成立,目的是批量培养具有国际竞争能力的高层次、应用型、复合型软件工程人才。自示范软件学院成立以来,我国软件工程教育事业得到了很大发展,学科建设逐步走向成熟,初步实现了与国际学科发展的接轨,软件工程教育实现了历史性跨越。

然而,软件工程是一个迅速发展的交叉性学科,相关的新概念、新技术、新方法不断涌现,这就要求教育机构要不断调整策略,以应对专业的快速变化。尤为突出的是,无论是全国首批35所示范软件学院还是非示范软件学院,大部分都根植于计算机学院,因此很多软件工程专业学科课程体系与计算机科学与技术专业基本相似,而计算机科学与技术专业的教学内容是远远不能适应软件工程学科的发展要求的。

从根本上解决上述问题的关键是,结合中国软件产业和软件学院已有的硬、软件基础设施及办学的具体情况,研究和定制适合本学院特色的软件工程学科的课程设置、教学内容、教学方法,形成一个良好的软件工程学科课程体系,使软件工程教学更具先进性、目的性和系统性,其中对计算机科学核心课程的工程化改造势在必行。

本文将研究计算机学科的“编译原理”课程在软件工程专业如何进行工程化改造,怎样创建适合软件工程专业知识体系要求的“编译原理”实践教学,从而在科学的软件工程学科课程体系的保证下,形成一个融基础理论、实验教学、工程实践为一体的整体化培养机制,以适应软件工程学科教学要求,使软件工程学科教学质量得到不断发展,使软件工程专业教育得到健康稳步发展,培养社会需要的软件人才。

1 “编译原理”的工程化实践教学体系

1.1教育教学理念

工程化实践教学就是树立工程化能力培养与基础理论教学、专业能力培养并重的教学理念,把工程化教学作为人才培养的核心任务之一,通过全面改革软件工程专业的人才培养模式、调整课程体系、充实教学内容、改进教学方法,在教学过程中全面体现能力和职业素质培养的思路,并将软件工程知识内容由浅入深、阶梯状、循序渐进地贯穿在工程化实践教学的各个开发项目中。

基于上述软件工程专业的知识体系、本科课程设置的指导原则以及工程化实践教学教育教学理念,下面将给出“编译原理”课程的工程化实践教学体系。

1.2 “编译原理”的工程化实践教学体系

如图1所示,“编译原理”课程的工程化实践教学体系由六个部分组成:编译原理课程工程化实践教学环境、编译原理理论教学、软件工程能力培养、阶梯状迭代工程实践项目、配套教材和评价体系。构建理念为以计算机科学为基础,以软件工程为核心,以目标应用为导向。

1.2.1 “编译原理”课程工程化实践教学环境

“编译原理”课程工程化实践教学环境由实验室、项目团队、教师讲座以及团队汇报组成。

(1) 实验室。以工程化培养理念指导教学实验室建设,为“编译原理”课程工程化实践教学提供强有力的基础设施支持。提供全天开放机房,机房实行开放型管理。项目开发时间规定为开时间和闭时间,闭时间为固定时间,要求授课教师到机房现场指导,开时间内,学生可以自由选择时间,以小组为单位进行自行讨论、设计,要求实验室人员在现场,以便解决设备问题。机房的使用和维护要有严格的管理制度,保证项目的顺利完成。

(2) 项目团队。将4~5个学生分为一个项目小组,一名组长作为负责人;每名学生分配一台微型计算机,在开发小组中以分工协作的方式完成指定的软件开发任务,完成项目设计报告,并提交完整的软件开发文档和源代码。学生在团队环境下使用最新的软件开发工具,获得较真实的软件开发经验,提高学生在项目规划、队伍组织、工作分配、成员交流等多方面的能力,培养学生团队合作及工程项目研发能力。

(3) 教师讲座。指导教师在整个的项目开发中纵览全局,项目的开始、结束及中间的每个模块都要进行全面的讲解、引导和组织。教师要系统讲解软件工程知识点和软件技术,统一讲解项目开发过程中学生普遍存在的问题,不断地发现问题,解决问题。

(4) 团队汇报。理论教学中教师唱主角,而工程化实践教学应让学生唱主角,让开发小组自己拟定演讲方案、内容,由教师审核修改后进行汇报演讲。这样可以有效地提高学生总结概括、研究立项、口头表达、演讲和交流沟通的能力,培养学生独立思考、分析问题的能力和创新能力。

1.2.2 “编译原理”理论教学

由知识的先期注入和工程化理论教学组成。

(1) 知识的先期注入。“编译原理”课程的理论性较强,整个课程内容由几个功能模块组成,学生对课程的完全理解应在最后一个模块,即课程结束时。鉴于教学内容的特殊性,应在一门程序设计语言之后安排“CO释程序的面向对象设计与实现”项目,作为前导实践环节,配套教材为《C++实战:解释程序的面向对象程序与设计》。这可以使学生在学习理论之前对程序设计语言的解释执行有较深的理解,由传统的“填鸭式”被动学习转变为学生自主式学习。学生对“编译原理”课程的学习由问“这是什么”变成“这是我需要的什么”,从根本上解决了“编译原理”课程的教学困难。实践表明,这种方法在锻炼学生实践能力的同时先期注入了理论教学需要的解释程序的知识和概念,有很好的教学效果。

(2) 工程化理论教学。编译程序是庞大而复杂的,这使得如何介绍编译原理本身就是一个难题。中外编译原理教材很多,如果从工程化的角度去诠释编译程序的实现过程及其原理,即对一个完整的源程序到目标程序的转换过程进行详细讲解,不失为一个新的途径。我们的配套教材《编译程序的实现原理》的编写形式如下:先给出编译器的输入――一个C语言小程序;再给出编译器的输出――目标机上的目标语言,完成这样的转换需要进行的工作包括词法分析、语法分析等几个功能模块;再针对每个功能模块给出本模块的输入和输出,如词法分析为一个C语言小程序,模块的输出形式为TOKEN链表,完成这样的转换需要进行的工作由理论和实现两部分组成。这种讲述方法实现了五化:

工程化:以对一个完整的源程序到目标程序的转换作为教学载体介绍编译程序的实现及其原理,以反映编译的工程性。

模块化:将一个完整的源程序到目标程序的转换作为总目标,将不同的子转换作为各个子模块的目标,以反映编译的模块性。

链接化:将一个完整的源程序到目标程序的转换所需的知识处理成总目标与子模块、子模块内所需知识点之间的链接,以反映编译的整体性。

需求化:将编译原理内容的平铺直叙转换为实现一个完整的源程序到目标程序的转换的所需知识,解决了编译内容的庞杂、不分主次、叙述冗长的问题。

形式化:将形式语言的内容介绍放置在为完成目标所需知识的位置,突出形式语言的地位、内容及其应用。

1.2.3软件工程能力培养

在工程化实践教学体系中,软件工程能力的培养是至关重要的。

软件工程能力包括软件需求、软件设计、软件构造、软件工程基础结构、软件配置管理、软件维护等知识单元。有些知识单元在早期学习,以促进学习条件的成熟;而有些知识单元的学习需要一定的成熟条件,应该放在后期讲授,如阶梯状迭代工程实践项目是整个教学过程中理论联系实际,培养学生动手能力、观察能力、分析和解决问题能力、团队合作以及创新精神的重要环节。把软件工程知识单元分期、分阶段引入阶梯状不同开发项目的全过程,形成了特色鲜明的工程化实践教育体系,使学生的软件工程能力在实际项目开发中得到锻炼和提升。“编译原理”课程工程化实践项目内容安排如表1所示。

“实践性、个性化、逐步工程化”是工程化人才培养的重要环节,也是学生成为合格软件工程化人才的实践过程。以上教学组织方法既保证了教学的系统性、知识性,又保证了教学案例的先进性和实践性。

1.2.4阶梯状迭代工程实践项目

编译器代码的长度可从10 000行到1 000 000行不等,编写甚至读懂这样一个程序都非易事,更何况是开发,因此编译器的实现比以前任何课程中学生承担的设计要大得多、难得多。纵观国内外大学研究现状,一般都是先设计一个语言,面向过程式或面向对象式,然后对设计的语言进行面向过程或面向对象程序设计方法的开发,早期采用面向过程语言编译器的面向过程开发,如吉林大学计算机科学与技术学院的编译原理实践课程“编译程序的设计与实现”,近期采用面向过程语言编译器的面向对象开发,或是面向对象语言编译器的面向对象开发,如“Modern Compiler Implementation in Java”。无论哪一种,学生都是一次性为具有上百条产生式语法的语言开发编译器,难度极大,这使实践课程的收效甚小。采用阶梯状迭代教学法创建的编译原理课程工程化实践项目从根本上解决了这个问题,配套教材为《编译程序的面向对象程序与实现》。

如图1和图2所示,编译原理课程工程化实践项目内容包括“C0解译程序的面向对象设计与实现”,“C1编译程序的面向对象设计与实现”,“C2编译程序的面向对象设计与实现”,“C3编译程序的面向对象设计与实现”。整体项目的源语言定义为C语言的子集,采用阶梯状迭代教学法后,将源语言定义为C0、C1、C2、C3,Cn是Cn-1的扩展。

编译原理课程工程化实践项目的优点有:

(1) 起点低:降低了开发难度。学生根据自己的实际水平选择源语言级别,有不同收效。从根本上解决了软件开发水平低的学生对编译程序开发望而生畏甚至放弃的问题。

(2) 阶梯上升:项目内容的选择不是零散的、随机的、重叠的,而是相互关联的。纵向为编译理论,是主要内容;横向为软件工程,是辅助内容。主要内容将难点分散,处理成阶梯状;辅助内容也将难点分散,同样处理成阶梯状。

(3) 迭展:每一个项目需求是前一个项目的扩展,因此,每一次的软件开发可以看作是前一次开发的迭代,使学生面对大型软件开发项目中最难处理的用户需求不断变更的问题,最大程度地使用重用技术。所有项目的开发承上启下、循序渐进、阶梯状迭展,为研究和学习软件生产线新技术埋下伏笔。

(4) 知识渗透:将软件工程核心内容及工程化软件开发思想由浅入深逐步渗透到各个项目中,每个项目具有不同级别的培养目标,学生从不同项目循序渐进地掌握工程化软件开发理念,降低了工程化软件开发的难度。

阶梯状迭代工程实践项目发挥了学生的主体意识,给学生足够的空间,激发了学生的活力与创新思维,并培养了学生的“三个能力”(自我管理能力、组织策划能力、社会实践能力)和“五种意识”(责任意识、服务意识、创新意识、团队意识、竞争意识)。

1.2.5配套教材

编译原理课程工程化实践教学配套教材共有3部,前导教材《C++实战:解释程序的面向对象程序与设计》与“编译原理”理论教学知识的先期注入配套;《编译程序的实现原理》与“编译原理”工程化理论教学配套;《编译程序的面向对象程序与实现》与阶梯状迭代工程实践项目配套,3部教材前后关联且各呈完整体系。本套教材为清华大学出版社“编译原理及其实践课程的工程化教学课群研究”立项项目,已出版1部,另2部明年中旬出版。

1.2.6评价体系

编译原理课程的工程化实践教学评价体系包括对学生工程素质和对教学体系的评价。

学生工程素质的评价采用过程化考核管理标准,即把工程化能力和职业素质引入学生工程素质的评价体系,加大工程化实践环节的比重,形成专业理论知识和实践能力并重的考核体制,将期末一张试卷定成绩的考评机制改为由工程化实践项目、随堂测验、论文、面试、考试、团队等多种形式相结合的评价机制,防止实验抄袭现象。编译原理课程考核采取理论知识和工程化实践项目完成情况的综合考核方式,工程化实践项目根据项目设计报告、软件开发文档、源代码和运行系统的质量进行考核,学生成绩以登记评定方式给出。

教学体系的评价采用回馈化考核管理标准,即把企业回馈和毕业生回馈引入教学体系的评价。对企业和毕业生进行跟踪调查,通过收集企业和学生的反馈指导教学和实践项目的设置和修订,形成良性循环,为进一步提高教学质量打下坚实基础。

2结论

软件工程是集计算机科学与技术、数学、经管等多学科的交叉性学科。作为一名软件工程教育者,我们必须建立一套具有自身特色的工程化人才培养体系,培育具有国际竞争力的一流软件产业高级/高端人才,结合软件工程人才的学科交叉性、偏重实用、职业定位等特点,系统深入地研究软件产业对技术型、管理型的人才需求,注重学生综合能力和专业素质的培养,才能在计算机系统、软件工具、软件工程和管理上循序渐进地提高学生的能力。

参考文献:

[1] Aho, Alfred V., Ravi Sethi, Jeffrey Ullman. Compilers: Principles, Techniques and Tools[M]. Reading, MA: Addison-Wesley, 1986.

[2] Appel, Andrew W. Modern Compiler Implementation in Java[M]. Cambridge, UK: Cambridge University Press,1997.

编译原理论文范文第8篇

2007年,在教育部本科教学质量工程特色专业建设点项目申报中,复旦大学软件工程专业的系统软件方向、企业信息化方向和数字媒体方向被批准为特色专业建设点项目;2008年,学院国际化创新型软件人才培养模式实验区被批准为教育部人才培养模式创新实验区。近年来,学院培养的学生受到社会和业界的充分肯定。

回顾这几年的教学探索,在计算学科人才培养中,我们认为除了要注重社会需求外,更应注重学生创新能力和国际视野的培养。通过开展完善的国际化联合培养和交流,我们建立了良好的国际化教育环境;通过进一步提高软件创新行动项目和创业实践项目的支助力度,我们为学生提供了面向产业实践和个性化发展的条件,为培养综合素质高、创新能力强、具有国际竞争力的高层次研发人才与产业工程师奠定了基础。

1国际化创新型软件人才培养定位与方案

我国提出在2020年建成创新型国家,最近又推出了国家十大产业振兴规划,其中就包括了电子信息产业。而我国的软件人才培养在创新性和工程化方面存在许多不足,难以满足电子信息产业走向世界的需求。无论是传统计算领域的研究还是系统开发,无论是理论研究还是应用研究,都离不开实际应用背景。人才应该集业务、技术、管理三位一体,既具有扎实的基础理论知识,又熟悉产业前沿,能运用国际主流的系统工程技术解决产业中的问题,在国际化团队中具备自我发展能力、团队合作精神和系统调控能力,具备适应市场需求和技术变化的能力。因此,我们在人才培养中必须注重培养学生的创新能力,强化学生的国际视野及对产业前沿问题的敏感性,注重与企业有机结合并平滑过渡,将实践教学环节和工程教育理念融入课程教学中,融基础理论、实验教学、工程实践为一体。

根据复旦大学“宽口径、厚基础、重能力、求创新”的人才培养理念,参照国际知名高校的教学培养方案,同时结合国内企业的实际需求和行业技术发展趋势,我们精心设计了教学培养方案。除综合教育课程、技术类基础课程外,软件工程专业课程分为三个部分:专业基础课、专业方向课、专业选修课。学生首先修完专业基础课程,保证对计算机科学和软件开发的各方面内容有全面了解,具备一定的科研能力;其次修读专业方向课程,保证在特定专业方向上获得严格训练;最后至少选修其他专业方向课程组中的两门课程,并学习专业选修课程,保证必要的知识广度,还要提高职业道德意识、团队精神、交流能力、外语能力。

在课程设计方面,我们一方面设置培养学生工程能力和职业素质为主的课程;另一方面把培养实践能力和创新能力贯穿于教学全过程,建立一套“全过程、递进式”的实践教学体系。通过有针对性的、高强度的项目实践,在低年级强化基本技能和动手能力,在高年级通过综合性设计性实验、课程设计等环节,培养学生分析、设计、实现的综合能力。

我们同时建立健全了创新鼓励机制,鼓励学生参与创新性实践活动,养成创新意识,体验创新过程。我们邀请企业资深研究人员、国外高校著名学者来校兼职、授课,为学生的创新实践活动提供专业指导。将工程能力引入人才素质评价体系,通过收集企业和学生的反馈指导教学和课程设置,形成良好的自我约束、自我发展机制。

国际化创新型软件人才培养定位与方案的基本架构如图1所示。

2创新型软件人才培养的教学内容与方法

与国外的工科学生相比,我国学生明显缺少项目或团队合作的实际经验训练。因此,我们要加强国际化创新型工程人才的培养,更要注意不能停留在教学生用现在的技术解决问题,而要让学生学会用未来的技术解决未来的问题。

在教学内容安排上,我们全面吸收发达国家经典的计算机教学内容,强调学生除了掌握各门课程的基本原理,还要对行业的最新发展及领域内面临的问题有所了解。坚持提高解决问题能力为主的教学原则,把握行业发展最新趋势,教学内容既要与企业当前的需求紧密结合,又不能单纯跟着企业走。高校教育不仅要紧扣行业发展的最新趋势,更应引领社会需求。

为了使学生学会用未来的技术解决未来的问题,我们要求教师不仅要了解目前行业内的最新发展及领域内面临的问题,更要具有前瞻意识,及时把本学科最新的研究成果和未来可能成为行业发展热点的内容安排在课程中。如从2004年开始,我们就把多核技术和虚拟化技术放到相关课程的教学内容里,在计算机体系结构课程中扩展了多核体系结构的内容和多核缓存(Cache)研究的最新进展。而操作系统课程则介绍了多核领域虚拟化的研究原理和现状。编译原理课程则扩展了多核程序设计语言和优化等方面的内容。这些最新内容开阔了学生的视野,到2007年毕业时,这些技术在一些外资企业成为热门,因此我们的学生成为社会迫切需要的人才,非常受欢迎。

好的教学内容必须有与之配套的教学方法。以课堂为主的填鸭式教学方法虽然可以使学生掌握各门课程的基本知识,但是缺乏和学生的互动,存在较大不足。复旦大学软件工程专业在以下几个方面进行了调整和改进,取得了很好的效果。

首先,在讲授基本原理时,教师侧重阐述课程的要点和难点,而对于各种具体的细节,则让学生通过相应的教学实验环节(包括实验和实践项目)体会,解决可能出现的问题。一方面,我们通过教师的讲解与学生的自学来强化学生对概念的准确理解和对理论的全面掌握;另一方面,我们通过课后的实习项目来全面锻炼和提高学生的能力。教师在讲授知识的同时,逐步培养学生的自主学习能力和开发设计能力。

其次,教师注重启发式教学和学生创新能力培养。很多专业课程,如计算机系统基础、计算机体系结构和编译原理等,都增加了研讨性内容,教师定期布置超出课堂知识范围的开放式问题。这些问题并没有标准答案,学生要在自己查阅资料的基础上进行深入思考,因此锻炼了思考能力和创新能力,也开阔了眼界。研讨式学习、案例分析、群组学习启发了学生的思维,锻炼了学生在团队中开展创新性工作的能力。

第三,将实践教学环节和工程教育理念融入整个教学过程,尤其注重对学生项目构思、设计、实现和运作能力的培养。企业项目及企业联合实验室为学生的项目实践学习提供平台,通过解决项目中的实际问题,学生的工程技术创新能力得到了很大提高。我们同时建立了跨度一年的学院科研实验室和知名企业实习制度,为学生的发展创造了良好空间。课程成绩评定改变了期末一张试卷定成绩的考评机制,改为实验、实践项目、随堂测验、论文、面试、笔试、课堂讨论等多种形式相结合的评价机制,期终成绩仅占总成绩的30%~50%。通过不断学习,学生各方面的能力都得到均衡发展,适应现代软件产业的需求。

第四,注重国际化办学,推广双语课程。早在软件工程专业建设之初的2002年9月,学院就与爱尔兰都柏林大学(University College Dublin)签订了合作办学协议,开展计算机软件学士学位联合培养项目;与新加坡管理大学签订了交换生计划,每年两校互派学生到对方学校学习半年;与日本名古屋工业大学建立了推荐学生攻读研究生的国家资助项目。通过与爱尔兰都柏林大学的合作办学以及与其他知名大学的交流,我们吸收、借鉴了国外人才培养的先进理念,提高了教师的业务素质和能力。双语课程打造了一批有代表性和学院特色的课程,使学生能直接接触国外最先进的理念和技术,提高了自学能力、创新能力和综合素质。

3高水平的研究是创新型人才培养的基础

高水平的师资是人才培养必不可少的保障,软件学院应该鼓励具有应用背景的研发。这种研发不是低水平的开发,而是应该具有自主知识产权,在理论或技术上有所创新的研发项目。研究既要保证实用性,也要保证具有产业化时代的核心竞争力;既要能出高质量的论文,也要能得到实际应用。

开展高水平的科学研究,不仅可以培养出优秀的学生,也能吸引一流教师加入学院师资队伍中,更好地培养人才。我院现有宽带网络与互动多媒体实验室、电子商务研究中心、交互式图形学实验室、密码与信息安全研究室等四个研究机构,复旦大学并行处理研究所的研究主体也在软件学院。

在流媒体宽带应用领域的前沿技术研究和高科技产品的研发中,学院成功研发了高性能、高质量、与国际标准完全兼容的流媒体服务器(Clear Server),我们自主研发的IPTV系统成为上海市互动电视闸北区示范项目,其技术产品已经推广到国外,并获得上海市科技进步二等奖。而作为这些项目研发的负责人,我院教师及时把研究成果融入教学,简化项目开发要求,编制出适于学生课程实习的项目,有效提高了学生的实际研究能力,为学生提供及时接触最新成果的机会。

基于全光视频的图形绘制技术、基于GPU的Dome显示设备的实时绘制系统以及基于投影仪的大尺寸、高清晰显示墙系统的研制培养和锻炼了教师和学生。我院毛燕东在本科三年级就参加了学院实验室的科研工作,他和贾奇在导师的指导下参加第九届“挑战杯”全国大学生课外学术科技作品竞赛,一举夺得全国一等奖。2006年,毛燕东直升本院硕士研究生后,成为国家863计划“可伸缩高分辨率投影显示技术”项目的主要研究者,并参加了微软亚洲研究院系统研究组的多核操作系统的研究工作,在操作系统领域最好的会议之一OSDI上与他人合作。在即将毕业时,他先后收到了麻省理工学院(MIT)、斯坦福大学(Stanford)、卡耐基-梅隆大学(CMU)等三所全球计算机领域顶级高校的攻读博士录取通知书。

学院在虚拟化技术、并行与优化编译技术、动态优化编译技术、跨平台优化编译技术的研究中也取得了优异成绩,培养了一批优秀学生。陈海波从本科开始就参加实验室项目的研究,硕博连读阶段,他又在导师指导下取得了长足进步。他在国际并行处理大会上发表的论文获得大会唯一最佳论文奖,这是该会议举办36年来中国大陆作者第一次获此荣誉;而他在国际软件工程大会(ICSE2007)上发表的论文则是中国大陆地区近30年来在该会议上发表的第

4篇论文。

以研发基于智能Web服务和流程整合的应变电子商务集成平台、面向消费者的电子商务性能指标体系、基于RFID的仓库立体自动控制系统为契机,我们选拔了一批优秀的本科生,极大提高了学生的实际项目开发能力。本科生参与开发的软件构件组装工具、配置管理工具和面向特征的软件体系结构建模工具成为相应科研项目的主要成果,通过专家组验收,进入企业试用阶段。以本科生为核心技术骨干的多模型驱动的面向服务协同开发平台,基于数据挖掘和语义本体的商品编码知识库等项目,在教育部组织的鉴定中被认为在技术上达到了国内外领先水平。学院在密码学和网络安全协议、可信计算研究中也取得新突破,2004年和2007年,我们在欧洲密码学会议上发表了2篇有关零知识领域的研究论文,是大中华地区第1个在密码学顶级会议的科研单位。

高水平的研究有效带动了骨干教师队伍建设、优秀学生培养及软件工程专业课程体系建设,培养了一支具有创新意识和实际研发能力的学生队伍。

4人才培养质量和社会评价

由于教学计划和培养方案定位准确,在教学中又突出了能力培养,达到了专业培养目标,学院培养的

学生无论在国内各高校攻读研究生,申请到世界顶级高校留学,或进入IT、咨询、金融、通信等行业的国内外知名企业从事软硬件研发、咨询、管理等工作,都得到一致好评。我校人才的主要特点有:

(1) 具有较强的创新能力,走上工作岗位后能马上熟悉自己的工作。由于具备了创新素养,毕业生站在了更高的起点上,很多学生在实习过程中即成为企业项目骨干,相当一部分学生在实习期满前就获得了企业的聘用合同。成为企业正式员工后,他们很快就升为资深员工、项目组长甚至项目经理。在国际团队中表现突出,既体现了较高的工程素质和动手能力,又展现了管理能力及应用创新能力,部分学生甚至在外企实习期间就创新地解决软件工程中的高端问题,并取得了国外专利,充分展现了国际化人才的素质。

(2) 科学研究和开发实践能力强。学院支持并鼓励本科生加入科学研究和开发实践,在各个实验室的科研活动中,高年级本科生参加多项应用工具开发,发挥了很好的作用。

(3) 学生在校期间成绩斐然。迄今为止,我院已在第九届“挑战杯”全国大学生课外学术科技作品竞赛中获得一等奖1项,在“花旗杯”科技应用大赛中获全国二等奖2项,在上海市大学生暑期社会实践活动中获上海市和复旦大学优秀项目各1项,在“科技创业杯”软件构件制作大赛中也获得多个奖项。在2005年度“上海市高校学生嵌入式系统创新设计竞赛”中获得一等奖1项,在全国计算机仿真大奖赛中获得三等奖1项。

5结语

编译原理论文范文第9篇

0.引言

编译原理与设计课程是计算机科学与技术专业的核心课程,具有较强的抽象性、理论性和逻辑性,学生学习和理解该课程相对困难。同时,该课程与其他课程,如离散数学、数据结构、算法分析、操作系统、体系结构等课程具有交叉性,因此学生不仅要有扎实的专业基础,还要有很好的创新意识。部分学者在编译原理的教学教改方面已经开展了卓有成效的工作。张晶等人研究了编译原理实践课程“多层次-多目标-多效果”的教学方法;钱忠胜等人提出从典型案例设计、实验实践教学模式、与其他课程知识相融合、与各类应用相结合、复合型考核方式等方面人手展开教学改革研究;徐晶探索了研究型教学在编译原理课程教学实践中的应用,并提出了“验证、应用、创新”三步掌握编译技术的课程设计方案;柴艳妹等人从激发学生兴趣、培养学生专业素质和提高学生动手能力三个方面入手,提出了一系列教学改革的具体步骤和方法;王挺等人提出编译原理课程能够培养学生的计算思维,提升学生的系统能力,使学生在系统的级别上重新认识算法和程序。

笔者面向编译原理与设计课程,以互动式、启发式、案例式教学和实践平台为依托,研究基于创新的“互动式+启发式+案例式”教学方法,基于激励机制的“分层+分系列+分专题”的创新实践活动,构建面向编译原理与设计课程的学生创新性思维阶梯式教学模式,培养从事计算机研究和应用的创新型人才。同时,研究通过此培养模式的实施,培养学生发现问题、分析问题和解决问题的能力,从而使学生的研究能力、实践能力与创新能力得到锻炼和提高的方法。

1.学生创新性思维阶梯式培养模式

科学合理地配置学生的知识结构是构建学生培养模式的第一步。学生创新性思维培养模式是一个反复循环、不断提升的动态发展过程。构建面向编译原理与设计课程的学生创新性思维阶梯式培养模式需根据社会发展对人才的客观需求,结合学校的培养目标和培养方案,选择合适的培养途径加以实施,并针对人才培养模式实施后社会对培养结果的评价做适时地调整。

1.1知识结构的构建

面向编译原理与设计课程的学生创新性思维阶梯式培养的课程主要包括3个方面:数理基础(离散数学、数值分析)、算法基础(数据结构、算法分析)和核心课程(操作系统、体系结构、编译原理与设计),如图1所示。

在课程设置及教学内容安排上要坚持以下两点:一是厚基础、强能力、重创新,努力做到把编译原理与设计课程与前沿知识以及多学科间知识交叉与渗透融入到教学内容中来;二是坚持知识、能力、素质的辩证统一,培养学生的创新性思维。阶梯式培养课程的分类见表1。

1.2学生创新性思维的阶梯式培养模式

学生创新性思维培养模式以课程内容学习、分析评价、创新实践方式3种形式进行阶梯式培养,每个阶段进行学生的反馈,发现学生的创新性思维,激励学生进行创新性活动。教学环节采用互动式、启发式、案例式的教学方式,并通过课堂讨论、学生演讲、课外作业、各类实验、学生科技活动、科研课题等丰富的教学活动提高学生的创新能力。学生创新性思维的阶梯式培养模式,如图2所示。

1.3学生创新性思维阶梯式培养层次

面向编译原理与设计课程的学生创新性思维阶梯式培养包括3个层次,自底向上依次是基础形成层、思维构建层和创新体现层,如图3所示。

基础形成层主要进行数理基础课程的学习,培养方式采用课堂讲解、学生讨论课外作业、课程实验、学生科技活动等形式。

思维构建层主要培养学生的计算机思维和编程素质,启发学生的创新性思维。在这一层次中主要进行数据结构、算法分析课程的学习,培养方式采用课堂讲解、学生讨论课外作业、课程实验、学生科技活动、科研课题。

创新体现层重点培养和强化学生的创新性思维,进行编译原理与设计创新思维的培养,其方式更多元化,包括课堂讲解、学生讨论、课外作业、学生演讲、课程实验、学生科技活动、科研课题等。

2.基于创新的“互动式+启发式+案例式”教学方法

2.1多元化教学形式

编译原理与设计课程采用多元化的教学形式:PPT讲解、课堂讨论、学生演讲、学术报告、课程内容的视频分析、学生的科技活动、各类实验、科研课题等,激发学生的学习兴趣,提高学生的知识水平,增强学生的创新思维和能力。多元化的教学形式如图4所示。

多元化教学形式体现在:丰富的课堂教学手段、教学与研究相结合、学生参与教师的课题研究并参加课外科技活动。

2.2“互动式+启发式+案例式”教学方法

编译原理与设计课程采用师生互动式、启发式课堂教学,将创新性思维训练融于“互动式+启发式+案例”教学方式中,激发学生的创新潜能,为进一步科学研究打下坚实的理论基础和实践能力,激发学生的学习兴趣,使学生形成一种以创新精神吸收知识、应用知识的习惯。在课外作业、各类实验、科技活动和科研课题方面,研讨课内开展“启发式、互动式、案例式”的教学实践,鼓励学生开展创新性思维活动。

3.3培养学生问题意识,提高学生创新能力

培养学生的问题意识和学生创新能力的最主要体现就是问题解决能力。培养学生问题解决能力的主要途径就是各类实验、科技活动和科研课题。因此,教师应不断鼓励学生深入专业领域和社会生活中发现问题、分析问题和解决问题,鼓励学生共同参与课题研究,并从不同角度激发学生,有效培养学生思维的创新性。

3.基于激励机制的“分层+分系列+分专题”的创新实践活动

设计“分层、分系列、分专题”的、具有一定创造性的实践活动是培养学生创新性思维的特色之一。教师应依据课程的内容,采用由浅入深、循序渐进的方式设计实践活动,建立创新活动与研究方向的有机结合,增强教学与研究相辅相成的关联,有效组织和管理学生的学习活动,评价学生的创新活动。

创新实践活动培养学生科学研究的思维方法、科学研究能力和创新精神,分为课程实验、科技活动、课题研究3个层次。在课程实验中分为基础实验、综合性设计实验、应用提高实验3个系列,并在每个系列实验中设定多个专题,解决特定的问题。采用答疑式指导、项目式指导和课题式指导“三级指导”方式。

1)科学设置课程实验。

实验课对检验和巩固学生在课堂中学到的理论知识、启发学生的创新思维、提高实践能力具有重大意义,因此必须有针对性地加强课程实验,并根据培养目标和课程实验建立3层课程设计模式:基础实验、综合性设计实验、应用提高实验。

2)组织科技活动。

有计划地组织学生进行学术科技活动,鼓励学生利用课余时间开展科学研究并参加校内外不同层次的竞赛。科技活动主要包括ACM程序设计竞赛、机器人大赛、各类程序设计大赛等。

3)课题研究。

分专题进行有针对性的课题研究,包括文献查阅、科研选题、实验设计、实验操作、数据整理、结果分析、撰写论文、报告与答辩环节,训练学生的科学研究思想和方法,实施实践活动的个性化教育。

4.结语

编译原理论文范文第10篇

【关键词】 编译原理;编译器;实验教学;可拆卸

【中图分类号】G40-057【文献标识码】A 【论文编号】1009―8097(2009)06―0111―03

编译系统作为计算机系统最基本的组成部分,已发展成为一门具有完整的理论、方法和技术的计算机学科[1][2]。国内外高校都将“编译原理”列为计算机专业的主要课程,它对提高学生软件设计素养,认识计算机信息处理本质起着重要作用。“编译原理”是门实践性很强的课程,实验是课程教学过程中很重要的一个环节。目前国内的大多数高校在“编译原理”课程的实践环节都是不分授课对象要求学生能上机实现一个小型模型语言的完整编译程序。在只是空洞地学习了一些编译理论与算法并且没有很好掌握的情况下,这对于大部分学生来说都是不可能完成的任务。造成很大部分学生在动手之前就早早放弃了努力,也就不可能达到预定的实验效果。为了解决这个问题,在教学实践中,设计了一个简单的具有高级语言主要特点的模型语言(本文称S语言),设计了该语言的目标代码格式,实现了从源语言到目标代码转化的小型编译器(本文称SMini)的各个模块,给出了模块之间接口的定义。模块是可拆卸的,在实验教学时可根据实际情况要求学生实现S语言编译系统的部分模块,并且实现的模块可以方便地嵌入到SMini中进行测试。本文详细介绍了SMini编译器的系统结构、核心模块的设计方法与实现技术。

一 模型语言

本文设计的模型语言(S语言)的文法用类产生式系统描述如下:

(1) [][]

(2) Const {,};

(3) =

(4) {}

(5) a|b|c| … |z

(6) 0|1|2| … |9

(7) {|}

(8) Var {,};

(9) ||||||ε

(10) =;

(11) [+|-]{}

(12) {}

(13) ||‘(’‘)’

(14) +|-

(15) * |/

(16) if then | if then else

(17)

(18) ==|<=|<|>|>=|<>

(19) while do

(20) begin {;} end

注:产生式中括起的部分表示一个非终结符号,[、]括起的部分表示可选项,{、}括起的部分表示可重复,符号 | 表示“或”。

上述模型语言具有高级程序设计语言的主要特点,也是SMini编译器处理的源语言。

二 系统设计与实现

1 系统结构

整个系统由3个模块构成,包括源程序编辑模块、编译模块和信息输出模块。各个模块又包含若干子模块。系统结构如图1所示。

源程序编辑模块主要实现源程序的 编辑的工作,在主屏幕窗口中可以输入、修改源程序,通过菜单栏可以新建 、打开、保存S语言源代码文件。编译模块完成实际的编译功能,分为4个子步骤:词法分析、语法分析、语义分析、目标代码生成。信息输出模块有两个子模块:错误信息输出和中间结果输出。错误信息输出子模块实时输出编译时刻的错误信息。中间结果输出子模块通过一个窗口来察看编译信息文件,包括词法分析结果,语法分析结果(语法树), 语义分析结果(符号表)和三地址代码。为了屏蔽机器代码的复杂性,SMini采用三地址代码作为目标代码。

2 核心模块设计

(1) 词法分析模块

词法分析模块的主要功能是识别S语言源程序中的记号(Token)。Token的识别由函数getToken来完成。函数getToken每次被调用时从输入缓冲区中读入输入字符序列并识别一个Token。该函数采用基于DFA状态转换图的算法,起始状态为START,结束状态为DONE。每次调用,该函数从起始状态START开始,不断调用getNextChar函数,根据其返回值进行相应的状态转移,一直到当前状态为DONE为止。函数中使用另一个变量save用来指定是否将读入的字符存入全局变量tokenString中。一般来说,构成一个Token的所有有效字符都将被存入tokenString,而空白,注释和将被退回的字符不被存入tokenString。此外,如果编译选项TraceScan被设为真,该函数还将调用函数printToken打印当前Token的有关信息到编译信息文件中,包括行号和Token的类型。

(2) 语法分析模块

语法分析模块的功能是以词法分析程序生成的Token序列作为输入,在分析过程中验证这个Token序列是否符合S语言的文法。若是,则以语法树作为输出;若不是则指明错误,并指出错误的性质和位置。关键问题是建立语法树,这里采用了自顶向下的递归分析法来实现,即为每一条产生式写一个match函数,从顶部(树根)到底部(树叶)来建立语法树。match函数的基本逻辑是根据S语言文法比较实际的Token与预计的Token是否一致,如果一致则取下一个Token,如果不一致则给出错误类型并调用syntaxError函数输出错误。实际的语法树是以为文本形式输出的。语法树中的父子关系由文本行开头的数字序列和嵌套关系来体现。如一个简单语句“while a>0 do a=a-1;”的语法树如图2所示。

图2 语法树的文本输出形式

(3) 语义分析模块

语义分析部分的主要功能是遍历语法分析时建立的语法树,建立符号表并进行简单的类型检查,即判断源程序中语句部分中的变量是否已定义和是否赋值给常量。S语言没有作用域信息,并且所有的变量都是整型,符号表数据结构BucketList设计如下:

typedef struct LineListRec

{ int lineno;

struct LineListRec * next;

} * LineList;

其中:lineno为常量或变量所在的行的行号,next指向下一同类型标识符。

(4) 目标代码生成模块

目标代码生成部分的主要功能是生成与源程序等价的三地址代码。主要函数是CGen::cGen( TreeNode * tree,int snextl)。由于建立语法树时语句和表达式都是FirstK类型的结点,所以它仅检测此类型的节点,并根据不同的分类作相应处理,然后递归调用 自身完成对整个语法树的遍历。例:语句“while a>0 do a=a-1;”对应的三地址代码如图3所示。

本文为全文原貌 未安装PDF浏览器用户请先下载安装 原版全文

图3 三地址代码序列

3 系统实现与界面设计

SMini在Visual C++集成环境[3]下开发。首先用MFC AppWizard创建工程文件,建立后会自动生成文件:应用程序:CsminiApp类,框架:CmainFrame类,文档:CsminiDoc类,视窗:CsminiView类,对话框有关的CaboutDlg类,还包括了一些在主框架中的初始化工具条的工作,在此基础上实现具体的功能与界面。软件界面采用单文档构架,拆分窗口视图,界面主要分为五个部分:菜单栏、工具栏、编辑区、信息输出区和状态栏。操作方法与目前流行的编译器相似,可通过窗口实现源程序的编辑、修改、编译与信息察看。系统主界面如图4所示。

图4 系统界面

三 结束语

“编译原理”课程是计算机科学与技术专业的主干必修课,也是软件工程专业的重要专业基础课。实验教学是“编译原理”课程教学的重要环节也是薄弱环节,通过开发辅助实验教学系统提高课程实验教学的效果具有现实意义。设计开发了一个简单模型语言的可拆卸编译器,可辅助课程实践环节的教学,解决了以往由于设计一个完整的编译器难度与工作量太大,造成实验效果不好的弊端。该系统还可提高教师验收学生实验成果的效率,在实际的教学过程中已取得了较好的效果。

参考文献

[1] Alfred V Aho, Ravi Sethi, Jeffrey D Ullman. Compilers:Principles,Techniques,and Tools[M].北京:人民邮电出版社,2002:1-24.

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

[3] 朱磊,周彬.Windows下的C/C++高级编程[M].北京:人民邮电出版社,2002:1-120.

Dismountable Mini Compiler Design for Experiment Teaching

CHEN Zhi-qun WANG Xiao-hua

(Institute of Computer Application Technology, Hangzhou Dianzi University, Hangzhou, Zhejiang, 310018, China)

Abstract: Compiler principle is one of the important specialized courses in the computer science, requiring highly both in theory and practice, and it occupy the essential position in the computer's teaching system. SMini- a dismountable mini compiler for experiment teaching of compiler principle is implemented. This paper introduces the system architecture, design method and implementation technology of SMini.

Keywords: Compiler Principle; Compiler; Experiment Teaching; Dismountability

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