- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编译原理课程的调态与转型
摘要:本文探讨了在计算机软件技术快速发展的情况下, 高校计算机类专业编译原理课程的改革问题。提出了编译 原理课程教学模型从过程式向对象式的转变、编译程序的 面向对象构造(包括编译算法的描述)等问题,以及由此带来 的教学内容的调整和课程实验的设计问题。
关键词:编译程序;教学改革;对象式程序设计;Java 1引言
编译原理课程是高校计算机类专业的重要基础和骨干 课程。编译原理对计算机专业的学生的重要性与高等数学 对理科学生的重要性几乎可以相提并论。同时,由于这门课 程涉及其他多门课程的知识,使得它成为大学阶段中最难学 的课程之一。
从表面上看,编译程序是将高级语言源程序翻译成低级 语言程序,但编译程序构造的基本原理和技术也广泛应用于 一般软件的设计和实现,其中的设计思想、算法、思维方式 和技术都可能会对学生今后的职业发展产生比较大的影响
当今,程序设计已经基本上从传统的过程式转向对象 式,并且正在从对象式转向组件型。这其实是程序设计范型 的变迁,是在计算机技术背景下认识世界的观点的变化:过 程式将完成事务看成是一系列的步骤,而对象式却将世界看 成是由一系列对象组成的,这些对象之间交互合作完成特定 的事务。从过程式到对象式,有着质的变化,而非一般的修 改和完善,由此带来了语言(算法描述工具)的变化。编程语 言影响思维,面向对象的思维方法又促进了编程语言的发展。
目前,程序设计的一些后继课程,如数据结构等都进行 了同步跟进,出现了诸如用C++或Java描述的数据结构教材。 但编译原理课程却没有及时跟进,上述改变基本上没有反映 到编译原理课程中。这门课程近20年来基本上没有大的变 化,教学内容仍然是基于过程式语言展开的,编译算法和模 型描述是用PASCAL语言或者C语言。虽然个别教材加入了 少量关于对象式语言编译技术的内容,那也是稍加点缀而己, 作用不大。这就造成了一种奇怪的现象:对象式语言已经成 了高校计算机教学的主流语言,社会上大量使用的也是对象 式语言,而我们的编译原理教学仍然沿袭旧的一套。这种 “状态”严重地脱离了计算机技术的发展和社会的实际需 要,因此需要进行“调态”,其根本做法是“转型”,即将本 课程的讨论对象从过程式语言转到对象式语言。
国外近年关于编译原理方面的新教材己经有了重要改 变,不再连篇累牍地讨论那些己经过时的内容,增加了许多 新的内容。其中一个重大改变是出现了用对象式语言描述 编译算法和教学模型的编译原理教材,如:用Jav a语言描述 的编译原理教材,且其教学模型为Minijava。
这种改变也涉及到课程上机实践。众所周知,编译原理 课程的学术性和实践性都很强:学术性是这门课程的生命所 在,实践性是这门课程的活力所在。因而本课程的上机实践 也要作同步调整。
2课程内容围绕对象式语言展开
研究程序设计语言的语法描述需要有文法理论的支持,
老教材中文法、词法分析和语法分析部分内容基本上不需 要作什么变动。词法分析主要依赖有穷状态自动机理论,语 法分析主要讲述LL方法和LR方法,其他方法略做介绍即可, 无需展开讨论。LL方法和LR方法含盖了许多分析技术,理 论性和应用性都很强,完全可以代表主流技术。
重要的就是研宄对象和教学模型的改变。首先,研究对 象将从过程式程序设计语言转到对象式程序设计语言(当然 还可以兼顾过程式),例如Java、C++等,围绕实现这类语言 的编译实现技术展开讨论。对象式程序设计语言的要素是 封装、继承、多态性,在编译实现时都必须仔细考虑。其次, 涉及到对象式程序设计语言编译程序教学的模型选择问题。 目前传统的教材选择的教学模型有PL/O、TiniC等。实践 证明,围绕某个模型展开编译设计技术的讨论,效果是比较 好的。课程研宄对象和教学模型的改变涉及到调整的章节 主要有语法分析、语义分析、代码生成、符号表管理、存 贮分配等方面。
一旦我们讨论的模型发生变化,这些章节的内容就要作 很大调整。如对象式语言的作用域规则、语言动态特性、 模块化封装(类)、类的继承、多态性的实现等,都需要具体 的技术来实现,这些都要反映在教材和教学中。
就课程中关于代码生成内容来看,目前Java编译程序 生成Java虚拟机(JVM)代码,C#生成MSIL虚拟机代码。这 两个虚拟机作为教学模型来说可能比较复杂了一些,在教学 中可以选定一个简单的子集;或者在PL/O虚拟机上适当增 加一些指令代码,以便于代码生成、存贮分配等部分的讲解。
实践证明,作为教学模型,在教材上提供一个小型语言 的编译程序供学生分析和研究,非常有利于加深对基本原理 的理解和掌握。这个小型编译程序可以比较小但应该能够 说明一些基本问题,例如传统的编译原理课程中选择PL/O 编译程序作为教学模型,就收到了比较好的教学效果。在对
文档评论(0)