欢迎来到天天文库
浏览记录
ID:53576964
大小:2.17 MB
页数:35页
时间:2020-04-20
《编译原理实践-c3.pdf》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第3章.基于框架的编译课程实验3.1BIT-MiniCC3.1.1.相关背景编译原理课程是计算机学科的一门核心专业必修课程,课程通过介绍编译系统构造的理论基础、构造方法和实现技术,不仅让学生掌握编译器的工作过程,而且让学生掌握语法分析、语义分析、中间代码生成、代码优化和目标代码生成的基本原理和方法,并具备设计一个基本编译系统的能力。该课程是理论与实践结合的典型课程,通过理论学习指导实践,通过实践进一步加深对理论知识的理解,也是在本科阶段培养学生动手能力的非常重要的环节。然而,在日常的教学过程中,如何快速有效地掌握编译原理的基
2、本理论和方法成为了学生们的一大困难,很多学生都反映编译原理课程晦涩难懂,学习了很多的理论却无法融会贯通,导致对编译原理的理解不够深入,无法将其理论和方法转化为一个可以运行的编译器。经过多年的实践和总结,发现由于以下多种原因,学生往往无法按照预定的步骤完成相应的课程实验:从理论到实践的距离:学生虽然在课堂教学过程中掌握了基本理论和方法,但是要从头设计一个编译器时,却不知从何处下手。主要原因在于,工业级的编译器是一个大规模的复杂软件系统,不太可能成为大部分学生编译器的一个工具,学生缺少轻量级、模块化的编译器实现作为参考;从前
3、端到后端的距离:编译器典型框架结构中包括了词法分析、语法分析、语义分析和中间代码生成、代码优化、目标代码生成等多个阶段。阶段之间按照顺序衔接工作,前端分析模块的实现质量将直接影响后端的设计和实现。目前的现状是大部分学生的前端实现无法满足后端综合的要求,导致后端直接无法实施。从理想到现实的距离:编译器的开设一般在计算机专业三年级,这个阶段学生面临多个核心专业课的学习,又要考虑参加竞赛、实验室项目,以及面临出国和就业的压力,因此没有足够的时间实现如此大型的软件项目,时间不足是导致学生无法完成整个工作流程的一个重要影响因素。为了
4、解决上述问题,北京理工大学编译原理课程组教师根据实际教学工作的需要,设计并实现了一个小型的C语言编译器框架。该框架将编译器的工作流程划分为多个阶段,并为每个阶段设计并实现了一个内嵌的参考实现。该参考实现是黑盒的,并不对学生开放,但是学生可以运行每个模块,并查看到相应的输入和输出。学生可以使用自己的模块实现替换框架内嵌的模块,也可以部分使用内嵌模块,部分使用自己设计的模块。框架不仅为学生提供了一个参考实现,也很好的解决了上述三个“距离”问题。BIT-MiniCC设计了规范的中间文件,全部使用XML文件表示,另外框架本身使用Ja
5、va语言实现,因此具有较好的跨平台特性,但是框架并没有限定学生实现自己的模块所使用的语言,学生可以使用Java、C或者Python实现自己的模块并进行替换操作,运行框架并查看结果,极大地提高了框架的灵活性和兼容性。BIT-MiniCC集成了MIPS等处理器的模拟器,基于框架生成的汇编代码,可以直接在模拟其中汇编并运行,通过模拟器,学生能够更直观的观测到程序运行的过程,以及处理器内部的变化过程。经过验证后的程序,能够与其他课程进行很好的衔接,例如:将生成的二进制程序下载到自己设计的基于FPGA的CPU上运行。综上所述,该框架的
6、主要特点在于:(1)该框架将C语言的编译过程划分为多个阶段,相互衔接的模块通过XML文件进行数据交换。这样设计的目的是使学生能够更好的了解每个阶段的工作原理,输入数据和输出数据。通过观察模块之间的交互和衔接,能够更直观的了解编译器的工作过程。(2)该框架包含了编译器各个阶段的内部实现,学生可以直接运行该框架,查看多个阶段之间的输入和输出。内部集成的各个模块的源代码是不可见的,仅供学生自己实现各个模块时参考。(3)在使用框架的过程中,学生可以自由选择使用内部集成的模块或者自己设计的模块。其原因及好处在于,编译器各个阶段是互相依
7、赖的,如果前面部分实现不好,后续工作较难进行,但是基于该框架,进行后端的实验时,可以直接选择使用内部集成的前段模块,从而节省了时间。(4)该框架集成了MIPS的汇编器和模拟器MARS,生成代码后可以直接调用该模块对生成的代码进行验证。如果验证成功,则可以与体系结构和组成相关课程实验进行衔接,将生成的代码在自己设计的目标系统上运行。(5)学生可以定义新的指令,并将高级语言程序翻译为新指令。3.1.2.框架结构尽管编译程序的处理过程十分复杂,不同的编译程序实现方法也各不相同,但任何编译程序的基本功能都是类似的,其基本逻辑功能以及
8、必要的模块大致相同,即都要经过预处理、词法分析、语法分析、语义分析和中间代码生成、代码优化、目标代码生成这些步骤,并在这些步骤中贯穿着表格管理和出错处理的功能。图1-1给出了一般编译程序的典型逻辑结构。源程序预处理词法分析表格管理出错处理语法分析语义分析及中间代码生代码优目标代码生目标程序
此文档下载收益归作者所有