- 1、本文档共35页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第3章. 基于框架的编译课程实验
3.1 BIT-MiniCC
3.1.1. 相关背景
编译原理课程是计算机学科的一门核心专业必修课程,课程通过介绍编译系
统构造的理论基础、构造方法和实现技术,不仅让学生掌握编译器的工作过程, 而且让学生掌握语法分析、语义分析、中间代码生成、代码优化和目标代码生成
的基本原理和方法,并具备设计一个基本编译系统的能力。该课程是理论与实践 结合的典型课程,通过理论学习指导实践,通过实践进一步加深对理论知识的理
解,也是在本科阶段培养学生动手能力的非常重要的环节。
然而,在日常的教学过程中,如何快速有效地掌握编译原理的基本理论和方
法成为了学生们的一大困难,很多学生都反映编译原理课程晦涩难懂,学习了很
多的理论却无法融会贯通,导致对编译原理的理解不够深入,无法将其理论和方
法转化为一个可以运行的编译器。经过多年的实践和总结,发现由于以下多种原
因,学生往往无法按照预定的步骤完成相应的课程实验:
? 从理论到实践的距离:学生虽然在课堂教学过程中掌握了基本理论和方法,
但是要从头设计一个编译器时,却不知从何处下手。主要原因在于,工业级
的编译器是一个大规模的复杂软件系统,不太可能成为大部分学生编译器的
一个工具,学生缺少轻量级、模块化的编译器实现作为参考;
? 从前端到后端的距离:编译器典型框架结构中包括了词法分析、语法分析、
语义分析和中间代码生成、代码优化、目标代码生成等多个阶段。阶段之间
按照顺序衔接工作,前端分析模块的实现质量将直接影响后端的设计和实现。
目前的现状是大部分学生的前端实现无法满足后端综合的要求,导致后端直
接无法实施。
? 从理想到现实的距离:编译器的开设一般在计算机专业三年级,这个阶段学
生面临多个核心专业课的学习,又要考虑参加竞赛、实验室项目,以及面临
出国和就业的压力,因此没有足够的时间实现如此大型的软件项目,时间不
足是导致学生无法完成整个工作流程的一个重要影响因素。
为了解决上述问题,北京理工大学编译原理课程组教师根据实际教学工作的 需要,设计并实现了一个小型的C 语言编译器框架。该框架将编译器的工作流程
划分为多个阶段,并为每个阶段设计并实现了一个内嵌的参考实现。该参考实现
是黑盒的,并不对学生开放,但是学生可以运行每个模块,并查看到相应的输入
和输出。学生可以使用自己的模块实现替换框架内嵌的模块,也可以部分使用内
嵌模块,部分使用自己设计的模块。框架不仅为学生提供了一个参考实现,也很
好的解决了上述三个“距离”问题。
BIT-MiniCC 设计了规范的中间文件,全部使用XML 文件表示,另外框架本身
使用 Java 语言实现,因此具有较好的跨平台特性,但是框架并没有限定学生实
现自己的模块所使用的语言,学生可以使用 Java、C 或者 Python 实现自己的模
块并进行替换操作,运行框架并查看结果,极大地提高了框架的灵活性和兼容性。
BIT-MiniCC 集成了 MIPS 等处理器的模拟器,基于框架生成的汇编代码,可
以直接在模拟其中汇编并运行,通过模拟器,学生能够更直观的观测到程序运行
的过程,以及处理器内部的变化过程。经过验证后的程序,能够与其他课程进行 很好的衔接,例如:将生成的二进制程序下载到自己设计的基于 FPGA 的 CPU 上 运行。
综上所述,该框架的主要特点在于:
(1)该框架将 C 语言的编译过程划分为多个阶段,相互衔接的模块通过 XML
文件进行数据交换。这样设计的目的是使学生能够更好的了解每个阶段的工作原
理,输入数据和输出数据。通过观察模块之间的交互和衔接,能够更直观的了解
编译器的工作过程。
(2)该框架包含了编译器各个阶段的内部实现,学生可以直接运行该框架,
查看多个阶段之间的输入和输出。内部集成的各个模块的源代码是不可见的,仅
供学生自己实现各个模块时参考。
(3)在使用框架的过程中,学生可以自由选择使用内部集成的模块或者自
己设计的模块。其原因及好处在于,编译器各个阶段是互相依赖的,如果前面部
分实现不好,后续工作较难进行,但是基于该框架,进行后端的实验时,可以直
接选择使用内部集成的前段模块,从而节省了时间。
(4)该框架集成了 MIPS 的汇编器和模拟器 MARS,生成代码后可以直接调 用该模块对生成的代码进行验证。如果验证成功,则可以与体系结构和组成相关 课程实验进行衔接,将生成的代码在自己设计的目标系统上运行。
(5)学生可以定义新的指令,并将高级语言程序翻译为新指令。
3.1.2. 框架结构
尽管编译程序的处理过程十分复杂,不同的编译程序实现方法也各不相同,
但任何编译程序的基本功能都是类似的,其基本逻辑功能以及必要的模块大致相
同,即都要经过预处理、词法分析、语法分析、语义分析和中间代码生成、代码
优化、
文档评论(0)