下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、编译原理课程的调态与转型摘要:本文讨论了在计算机软件技术快速开展的情况下,高校计算机类专业编译原理课程的改革问题。提出了编译原理课程教学模型从过程式向对象式的转变、编译程序的面向对象构造(包括编译算法的描绘)等问题,以及由此带来的教学内容的调整和课程实验的设计问题。关键词:编译程序;教学改革;对象式程序设计;Java1引言编译原理课程是高校计算机类专业的重要根底和骨干课程。编译原理对计算机专业的学生的重要性与高等数学对理科学生的重要性几乎可以相提并论。同时,由于这门课程涉及其他多门课程的知识,使得它成为大学阶段中最难学的课程之一。从外表上看,编译程序是将高级语言源程序翻译成低级语言程序,但编译
2、程序构造的根本原理和技术也广泛应用于一般软件的设计和实现,其中的设计思想、算法、思维方式和技术都可能会对学生今后的职业开展产生比拟大的影响。当今,程序设计已经根本上从传统的过程式转向对象式,并且正在从对象式转向组件型。这其实是程序设计范型的变迁,是在计算机技术背景下认识世界的观点的变化:过程式将完成事务看成是一系列的步骤,而对象式却将世界看成是由一系列对象组成的,这些对象之间交互合作完成特定的事务。从过程式到对象式,有着质的变化,而非一般的修改和完善,由此带来了语言(算法描绘工具)的变化。编程语言影响思维,面向对象的思维方法又促进了编程语言的开展。目前,程序设计的一些后继课程,如数据构造等都进
3、展了同步跟进,出现了诸如用+或Java描绘的数据构造教材。但编译原理课程却没有及时跟进,上述改变根本上没有反映到编译原理课程中。这门课程近20年来根本上没有大的变化,教学内容仍然是基于过程式语言展开的,编译算法和模型描绘是用PASAL语言或者语言。虽然个别教材参加了少量关于对象式语言编译技术的内容,那也是稍加点缀而已,作用不大。这就造成了一种奇怪的现象:对象式语言已经成了高校计算机教学的主流语言,社会上大量使用的也是对象式语言,而我们的编译原理教学仍然沿袭旧的一套。这种“状态严重地脱离了计算机技术的开展和社会的实际需要,因此需要进展“调态,其根本做法是“转型,即将本课程的讨论对象从过程式语言转
4、到对象式语言。国外近年关于编译原理方面的新教材已经有了重要改变,不再连篇累牍地讨论那些已经过时的内容,增加了许多新的内容。其中一个重大改变是出现了用对象式语言描绘编译算法和教学模型的编译原理教材,如:用Java语言描绘的编译原理教材,且其教学模型为iniJava。这种改变也涉及到课程上机理论。众所周知,编译原理课程的学术性和理论性都很强:学术性是这门课程的生命所在,理论性是这门课程的活力所在。因此本课程的上机理论也要作同步调整。2课程内容围绕对象式语言展开研究程序设计语言的语法描绘需要有文法理论的支持,老教材中文法、词法分析和语法分析部分内容根本上不需要作什么变动。词法分析主要依赖有穷状态自动
5、机理论,语法分析主要讲述LL方法和LR方法,其他方法略做介绍即可,无需展开讨论。LL方法和LR方法含盖了许多分析技术,理论性和应用性都很强,完全可以代表主流技术。重要的就是研究对象和教学模型的改变。首先,研究对象将从过程式程序设计语言转到对象式程序设计语言(当然还可以兼顾过程式),例如Java、+等,围绕实现这类语言的编译实现技术展开讨论。对象式程序设计语言的要素是封装、继承、多态性,在编译实现时都必须仔细考虑。其次,涉及到对象式程序设计语言编译程序教学的模型选择问题。目前传统的教材选择的教学模型有PL/0、Tini等。理论证明,围绕某个模型展开编译设计技术的讨论,效果是比拟好的。课程研究对象
6、和教学模型的改变涉及到调整的章节主要有语法分析、语义分析、代码生成、符号表管理、存贮分配等方面。一旦我们讨论的模型发生变化,这些章节的内容就要作很大调整。如对象式语言的作用域规那么、语言动态特性、模块化封装(类)、类的继承、多态性的实现等,都需要详细的技术来实现,这些都要反映在教材和教学中。就课程中关于代码生成内容来看,目前Java编译程序生成Java虚拟机(JV)代码,#生成SIL虚拟机代码。这两个虚拟机作为教学模型来说可能比拟复杂了一些,在教学中可以选定一个简单的子集;或者在PL/0虚拟机上适当增加一些指令代码,以便于代码生成、存贮分配等部分的讲解。理论证明,作为教学模型,在教材上提供一个
7、小型语言的编译程序供学生分析和研究,非常有利于加深对根本原理的理解和掌握。这个小型编译程序可以比拟小但应该可以说明一些根本问题,例如传统的编译原理课程中选择PL/0编译程序作为教学模型,就收到了比拟好的教学效果。在对象式程序设计语言编译原理课程中选择bjet-pl/0或者iniJava作为教学模型是比拟恰当的。前者是在传统的PL/0语言上增加类,补充封装、继承、多态性之语言成分得到的;后者是对Java语言进展适当简化得到的,其主要语法描绘如图1所示。图1iniJava语法编译原理课程可以围绕此模型展开讨论。国外已经有这类教材出现,并且不少大学已经开场使用。3用对象式语言描绘编译算法和教学模型本
8、课程中各类编译算法都应该伴随着教学模型的变化,改用对象式语言来描绘,如用Java语言描绘或者用+语言描绘。其中一个重大的变化是教学模型如iniJava或bjet-pl/0要用对象式语言实现,也就是提出了教学模型的面向对象构造问题,这就比拟好地将讨论对象和描绘讨论对象的语言统一起来了。国外有的教材就选择了用Java描绘iniJava编译程序。编译程序是一个重要的中大型软件,传统的编译程序大都是用PASAL、等语言描绘的(参见图2)。像编译程序这样的中大型程序如何用类这个工具来进展分解,其实是对学生的对象式程序设计才能的一个重要检验。学惯用对象式语言来描绘编译程序,学生可能会受到一次严格的对象式语
9、言程序设计训练,编译程序如何用类这个工具进展分解,这些类(对象)如何合作完成编译任务,都需要较好的对象式程序设计基矗图3是一个程序设计语言文法的面向对象表示。传统的编译程序构造主要存在如下一些问题:(1)传统编译程序试图通过将编译程序根据功能模块分解,而使整个编译程序的复杂性降低。这种方法虽然在一定程度上简化了编译过程。但为了处理大型、复杂且多变的编译程序,仅仅将它按照功能分解成词法分析、语法分析、语义处理和代码生成几个阶段是远远不够的。(2)传统的编译程序构造中,编译的每个阶段仍然是大型、复杂的,且每个阶段内部仍然存在复杂的联络,这对编译程序的可维护性没有实际上的改变,反而造成维护困难。(3
10、)虽然传统的编译程序构造有着丰富的理论根底,也有一些工具诸如Lex、Ya等,但对一个详细的编译程序的构造仍然要从最根本的描绘开场。传统的编译程序构造的功能分解方法缺乏支持复用的良好机制。总之,过程式程序设计范式存在的问题在编译程序设计中广泛存在。而用对象式程序设计语言来描绘编译程序,那么对象式程序设计范式带来的好处根本上都可以得到。详细主要表如今:(1)编译程序效率高。由于面向对象的编译程序构造采用的是语法树构造法,可以得到上下文相关信息,并根据上下文进展语法树的优化,所以生成的代码效率高。(2)复用方便。由于语法类和详细的语法构造一一对应,所以在复用语法构造时,可以直接得到能被复用的语法类,
11、不需要经过查找过程。(3)修改方便。由于面向对象方法中的封装和多态等技术的实现,语义处理方法中所用到的数据都是部分数据,因此要做语义修改时,只要继承相应的语法类,并且重载相应的语义处理方法即可,需修改的内容较之传统方法要少。(4)有利于构造编译程序类库,使得编译程序的构造可以大量复用已有的类,这是更高层次上的复用。4课程实验的设计计算机学科是一门技术学科,它虽然有一定的科学的成分,但工程技术的成分更多一些,因此需要加强动手才能的培养。编译原理课程除了注重它的原理性,还必须注重其理论性。学习这门课程时,学生对编译的理解往往只停留在书本的概念上,而不知道怎样把编译理论应用到实际的编译程序设计的理论
12、中。另外,有些学校只将教学内容锁定在文法、词法分析(有穷状态自动机)、语法分析(LL、LR文法)上,以应付学生考研的需要。这些做法使得学生很难掌握这门课程的精华。图2传统的编译程序功能分解图3程序设计语言文法的面向对象表示编译系统可能是所有软件系统中最复杂的系统之一,通过本课程理论环节的教学,还可以帮助学生掌握一些大、中型软件设计的技术和技巧,进步学生面向对象软件开发的综合才能。传统的编译原理课程往往要求学生自己实现一个词法分析程序;实现一个基于递归子程序递归下降分析程序或基于预测分析表的语法分析程序;为某虚拟机(例如PL/0虚拟机)生成代码;对教学模型(例如PL/0)进展扩大,写出完好的编译
13、程序等。且在此过程中学生可以借助词法分析自动生成程序Lex和语法分析自动生成程序Ya进展有关实验。我们要求学生通过对教学模型的分析,可以在机器上动手实现一个小的编译系统,以加深对编译整个过程的一致性、连接性、整体性的理解。一旦我们的讨论对象改变为对象式语言,那么其编译程序语法和词法分析的自动生成不能再采用Lex、Ya这类工具了,需要改用Java(Javapilerpiler)或Sable等,它们都能生成Java语言代码;或者使用Jikespg(Jikespasergerneratr),它生成+代码。我们初步制定了本课程的理论环节,它主要分四个层次:(1)借助Java或Sable等工具让学生自动
14、生成小语言的词法分析和语法分析程序。这个实验的目的是教会学生关于词法分析和语法分析的自动生成,同时弄清这些工具生成出来的代码的程序构造,特别是面向对象的类构造。(2)为上面生成的语法树添加语义动作,完成生成代码的工作。这个实验的目的是让学生理解如何在抽象语法树上添加语义动作,理解为虚拟机生成代码的知识。(3)扩展教学模型,如iniJava,为其增加一些语言成分,如有关语句等,然后为其构造完好的编译程序。这一实验让学生把握编译的总体,弄清各部分之间的关系。(4)逐步构造面向对象的编译程序类库,使得“编写编译程序逐步走向“组装编译程序。5完毕语对计算机人才的层次构造、知识、才能与素质等方面的要求在很大程度上取决于计算机市常我们需要与时俱进,适时考虑相应教学体系和内容的改变。依赖过程范性的编译原理课程势必要被依赖对象范性的编译原理课程所取代,这是软件技术开展和社会实际应用的需要。但建立本课程新的课程信念、课程价值、课程技术等尚需时日,需要不断探究和创新。编译原理课程的改革不仅需要老师付出大量辛勤劳动,及时跟进技术的开展,还需要好的教材、好
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 餐饮值班管理课程培训
- 餐饮业主培训课件
- 2026校招:北京银行题库及答案
- 2026校招:IT技术支持试题及答案
- 学生代表2026春季开学典礼发言:褪去假期松弛切换学霸模式不负时光
- 2026新学期升旗仪式讲话稿:沐春风启新做“追锋”传人
- 餐厅备餐技巧培训
- 2025年10月全国自考(教育统计与测量)真题试卷(题后含答案解析)
- 特车运输大队《道路安全管理办法、疲劳驾驶》考试题及答案
- 六年级下册语文试题-小升初基础知识与能力测试卷(含答案)
- 2026届湖南省长郡中学生物高三上期末学业质量监测模拟试题含解析
- 2025eber原位杂交检测技术专家共识解读 (1)课件
- 老年友善医院创建-社区卫生服务中心员工手册
- 古罗马公共建筑与政治象征
- 加油站反恐应急预案(3篇)
- 宫腔镜手术围手术期护理
- 2024年中考历史真题解析(安徽试卷)
- 2025美国急性冠脉综合征(ACS)患者管理指南解读课件
- 2024年华北水利水电工程集团有限公司招聘笔试参考题库含答案解析
- 《普通心理学》期末考试试题与答案
- 含能材料及应用课件
评论
0/150
提交评论