基于插件的编译原理课程实验设计.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于插件的编译原理课程实验设计   摘要:根据编译技术的最新进展及目前广泛使用的各种编译器框架,提出基于插件的编译原理课程实验设计的思想与方法,解除后端实践依赖于前端分析结果的限制,使学生能够利用现有的编译器框架直接进行后端语义分析、代码优化和代码生成等方面的实践;同时,文章介绍了基于插件的编译原理课程实验设计的必要性、可能性,并以Phoenix编译器框架为例说明了该方案的可行性。   关键词:编译原理;课程实验;插件;Phoenix      编译程序各个逻辑功能之间具有较强的依赖性,如后端的语义分析和中间代码生成、代码优化、目标代码生成等都依赖于前端的正确分析与处理。如果没有前端的输出,就无法进行后续的加工和处理。考虑到编译原理程序本身组织结构的特点、教学学时限制和学生实践动手能力等因素,目前课程实践环节普遍向编译器前端靠拢[1-2]。即使设置了与后端相关的实验,学生也往往无法完成。因此目前比较缺乏针对后端处理的、较为独立的小规模课程实验供学生练习,这势必影响学生对编译器整体性的掌握及对编译器各部分有机关联和接口的学习理解。   随着计算机体系结构的不断发展,编译技术也在不断进步和变化。为了快速对各种研究思想进行验证,并缩短编译相关研究成果与实际实现之间的转换时间,各种供研究人员使用的编译器框架平台应运而生。例如,微软公司推出的Phoenix编译器框架[3]、开源的Open64和GCC等。这些已有的编译器框架能够简化编译程序的设计与实现;同时,为了支持编译器的定制及相关理论的快速验证,有些编译器框架(如Phoenix和GCC4.5)允许以插件的形式对部分处理阶段进行修改或者加强。基于插件的设计方法对于研究人员而言其价值是毋容置疑的,同时也为编译原理课程实践提供了便利。我们可以利用这些编译框架提供的前端分析与识别功能,以及后端的部分处理能   力,设计针对语义分析与中间代码生成、代码优化和目标代码生成相关的实验环节,其好处在于:   1) 可以缩短实验完成所需要的时间,降低实验的难度,从而为教学目标的完成奠定良好基础;   2) 能够培养学生的科研能力和创新意识,为使他们顺利走上科研道路打下坚实的基础;   3)基于插件的设计思想和技术也是目前许多大型软件的普遍设计与实现方法,如Firefox、Eclipse和IDA Pro等。学生通过基于插件的课程实验能够加强学生对大型复杂软件架构、设计思想和实现方法等各个方面的认识,提升软件工程管理和软件设计水平。   目前清华大学“编译原理专题训练”课程已经将开放源码软件GCC和Open64作为实验框架引入实践教学[4],GCC 4.5及以上版本已经实现了对插件设计的支持。笔者仅以微软的Phoenix为例详细说明基于插件的实验设计的可行性。   1Phoenix编译框架   Phoenix是由微软公司新推出的用于构造编译程序,各种程序分析、优化和测试工具的一个基础框架。Phoenix编译器框架主要功能包括:   1)Phoenix是一个编译器。该编译器有着与其他编译器相似的功能,能够将源代码编译为二进制代码。   2) 是一个编译器开发工具。由于Phoenix采用了统一的中间形式,编译器开发者只需将新语言的源程序转化为这种中间形式,然后就可利用Phoenix后端工具完成中间语言的转化、优化以及二进制代码的生成。   3)Phoenix作为一个框架,同时还是可插接的(Plug-in),Phoenix包含一些API,使用这些API能编写利用Phoenix特性的工具。   Phoenix体系结构具有高度的可伸缩性,使得开发者或研究人员能够在该体系结构上开发各种各样的编译器以及分析优化工具。在Phoenix中,遍(Pass)和阶段(Phase)是两个极重要的概念,也是支持插件式设计的主要结构。Phoenix支持多遍处理,因此后端由多个Pass构成,而且允许使用者插入自己的Pass,用于特定处理。一个函数的分析过程可以划分为若干阶段,每个阶段的处理对应一个Phase。使用者可以插入、删除一个Phase或重新排列原有的Phase,Pass和Phase的关系如图1所示。   2基于插件的课程实验设计   插件是指能够被Phoenix核心编译模块(C2.exe)调用的外部模块。假设设计了一个名为MyPlugin.dll的插件,当使用命令行选项-d2plugin:MyPlugin.dll启动C2时,C2就会在编译的过程装载并执行MyPlugin.dll中的代码。   如图2所示,源代码程序经过前端C1.exe的分析和处理之后,然后交给C2中的各个Pass和Phase进行处理。当C2运行时,Myplugin能够访问C2内部的所有数据结构,因此,通过MyPlugin能够

文档评论(0)

heroliuguan + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8073070133000003

1亿VIP精品文档

相关文档