c语言编译器设计与实现学士学位论文.doc
《c语言编译器设计与实现学士学位论文.doc》由会员分享,可在线阅读,更多相关《c语言编译器设计与实现学士学位论文.doc(51页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 北京邮电大学毕业论文设计北京邮电大学毕业设计(论文)任务书第1页毕业设计(论文)题目:C语言编译器设计与实现毕业设计(论文)要求及原始数据(资料):1C语言简介和国内外编译器技术研究现状;2深入了解编译器前端,包括词法分析,语法分析, 语义分析;3熟练掌握C语言语法及语法特点;4深入分析编译器编写语言(C+);5设计并实现编译过程中各个子过程,词法分析,语法分析,语义分析;6训练检索文献资料和利用文献资料的能力;7训练撰写技术文档与学位论文的能力。 第2页毕业设计(论文)主要内容:1C语言简介和国内外编译器技术研究现状;2深入了解编译器前端,包括词法分析,语法分析, 语义分析;3熟练掌握C语
2、言语法及语法特点;4深入分析编译器编写语言(C+);5设计并实现编译过程中各个子过程,词法分析,语法分析,语义分析;6训练检索文献资料和利用文献资料的能力;7训练撰写技术文档与学位论文的能力。 学生应交出的设计文件(论文):1内容完整、层次清晰、叙述流畅、排版规范的毕业设计论文;2包括毕业设计论文、源程序等内容在内的毕业设计电子文档及其它相关材料。 第3页主要参考文献(资料):1 KennethAReek.C和指针.人民邮电出版社, 20082 Brian W.Kernighan,Dennis M.Richie. The C Program Language., 20043 Richard S
3、tevens. UNIX环境高级编程. 人民邮电出版社,20064 布莱恩特,奥哈拉伦. 深入理解计算机系统.机械工业出版社,20115 Stanley B. Lippman等. C+ Primer. 人民邮电出版社, 20086 Alfred V.Aho等. 编译原理技术和工具.机械工业出版社,20037 Andrew W.Appel等. 现代编译原理-C语义描述.人民邮电出版社.20068 Steven S.Muchnick. 高级编译器设计与实现.机械工业出版社.20059 严蔚敏,吴伟民.数据结构.201210 高一凡.面向对象的C+数据结构.清华大学出版社.201111 Thomas
4、 H.Cormen, Introduction to Algorithmsm.201212 Portland.Lex & yacc Tutorial.201313 ChrisFrase,DavidHansonARetargetable. C Compiler: Design and Implementation.2005专业班级软件1008班学生郝靖宇要求设计(论文)工作起止日期2014年3月17日2014年6月27日指导教师签字日期2014年3月17日教研室主任审查签字日期系主任批准签字日期C语言编译器设计与实现摘要随着计算机的广泛应用,计算机程序设计语言也从初期的机器语言发展为汇编语言,以
5、及现在的各种高级程序设计语言。而编译技术是计算机语言发展的支柱,也是计算机科学中发展最迅速、最成熟的一个分支,他集中体现了计算机发展的成果与精华。其核心思想就是把同样的逻辑结构和思想从一种语言表示的程序转换为另外一种语言表示的程序。从高级语言,甚至运行与虚拟平台的高级语言,到机器语言,最终到硬件执行的物理信号,这一层层的转化,都涉及编译技术的应用。本系统采用C+为编程语言。论文主要介绍了本课题的开发背景,所要完成的功能和开发的过程。重点的说明了系统设计的重点、设计思想、难点技术和解决方案。 关键词:编译技术,编程程序,高级语言C language compiler design and Imp
6、lementationAbstractWith the wide application of the computer, computer programming languages are developed from the early machine language into assembly language , and now a variety of high-level programming language. The compiler technology is the backbone of computer language development, but also
7、 the fastest growing in computer science , a branch of the most mature , he epitomizes the essence of the computer and the fruits of development .The core idea is the same logical structure of the program and ideas expressed in the conversion from one language to another language program represented
8、 . From the high-level language , and even running with high-level language virtual platform to machine language , and ultimately to the hardware implementation of the physical signal , the layers of transformation involves application of compiler technology .System uses C+ as the programming langua
9、ge. Paper introduces the development background of the topic, the development and function to complete the process. Note the focus of systems design, design ideas, technologies and solutions difficult. Key Words: Compiler technology,Programming procedures,High-level programming languageii目录摘要iAbstra
10、ctii第一章 绪论11.1 开发背景11.2 开发目标和意义11.2 当前编译器国内外的发展情况2第二章 理论基础42.1 编译系统概述42.1.1 什么是编译器42.1.2 编译器的产生42.2 编译器的结构42.3 编译器的组织62.3.1 编译的分遍62.3.2 分遍的设计62.4 编译器中的主要数据结构72.5 编译程序的开发72.5.1 历史与发展72.5.2 开发注意事项72.5.3 编译技术和软件工具7第三章 C编译器可行性分析及总体设计93.1 可行性分析93.1.1 经济可行性93.1.2 技术可行性93.1.3 运行可行性93.1.4 时间可行性103.1.5 法律可行性
11、103.2 C语言的基本描述103.3 C编译器的功能103.4 C编译器的程序结构113.4.1 C编译器的设计模式113.4.2 C编译器的文件组成123.5 C编译器中的主要数据结构12第四章 C编译器的实现144.1 词法分析阶段144.1.1 概述144.1.2 C词法分析程序的实现144.1.3 关键字与标识符的识别164.1.4 词法识别具体实现164.2 语法分析阶段184.2.1 概述184.2.2 C语言抽象出来的文法规则194.2.3 C语法分析程序的实现224.3 语义分析阶段274.3.1 概述274.3.2 C语言的语义274.3.3 C的符号表274.3.4 C语
12、义分析程序的实现284.4 中间代码生成阶段334.4.1 概述334.5 C编译器的使用方法及测试334.5.1 使用方法334.5.2 测试源文件344.5.3 测试词法分析344.5.4 测试语义分析及中间代码生成354.5.5 测试分析表文件的构造36参考文献38致谢39第一章 绪论1.1 开发背景随着计算机科学技术的飞速发展,计算机技术被应用在了越来越广泛的领域,实现各种各样功能的计算机程序被大量地开发出来,应用在我们的生活、学习和工作当中。相应地,也产生了许多用以编写这些计算机程序的高级程序设计语言。程序编制者通过特定语言的编译器将自己编写的源程序翻译为特定机器上的目标程序,从而能
13、够最终达到程序执行的目的。从20世纪60年代以来,编译器设计就一直是计算机研究发展和开发领域中的一个活跃主题。虽然编译器设计已有很长的历史,并且也是一门相对成熟的计算机技术,但编译器毕竟是一种实现由高级语言源程序至机器或汇编指令的高效映射工具,随着计算机软、硬件水平的飞速发展,使得计算机应用日新月异,程序语言的设计在不断地变化,目标机体系结构也在不断地改进,软件越来越复杂,其规模也越来越大。尽管编译器设计问题在高级层次上没有变化(或变化很小),但当我们深入其内部研究时就会发现,编译器的内部构造其实也一直在变化。此外,由于我们能够提供给编译器本身使用的计算资源也在不断增加。因此,现代编译器可以采
14、用比以前更耗费时间和空间的算法。当然,编译技术研究人员也在继续努力开发新的、更好的技术来解决传统编译器的一些设计性问题1。另一方面,很多编译“前端”技术,如文法、正则表达式、语法分析器以及语法制导翻译器等,仍然被广泛使用。1.2 开发目标和意义编译器是一种相当复杂的系统程序,其代码的长度可从几千行到几百万行不等,所以编写甚至读懂这样的一个程序都不是一件容易的事。绝大多数的计算机专业人员从来没有编写过一个完整的编译器,但是,几乎所有形式的计算均要用到编译器,而且任何一个与计算机打交道的专业人员都应该掌握编译器的基本结构和操作。除此之外,计算机应用程序中经常遇到的一个任务就是有关命令解释程序和界面
15、程序的开发,这比编译器的开发规模要小,但使用的却是很类似的技术。因此,掌握编译器的开发技术具有非常重大的实际意义。编译器的设计的原理和技术还可以用于编译器设计之外的众多领域。因此,这些原理和技术通常会在一个计算机科学家的职业生涯中多次被用到。研究编译器的编写讲设计程序设计语言、计算机体系结构、形式语言理论、算法和软件工程。编译器的设计从本质上来说是一种工程活动,它所使用的方法必须很好地解决现实中出现的各种翻译问题(即用真实的语言编制且在真实的机器上能够执行的真实的程序)。大多数情况下,开发编译器的人必须接受他们面对的语言和机器,很少能够去影响或改善这两者的设计。在开发过程中做什么样的分析和转换
16、,以及什么时候去做,这些都是工程上的选择,但正是这些选择决定了一个编译器的性能高低。本实验就建立在一个自主开发的名为C的微型编译器基础之上,该编译器虽然功能弱于像Turbo C或Borland Pascal这样的经典编译器,但也已经完全具备了一个编译器应有的所有特征。虽然本实验只是一个规模很小的微型编译器的开发,但所谓“麻雀虽小,五脏俱全”,作为一次较为完整的编译开发实践,它已经足够让我透彻地了解一个编译器开发过程了,同时能更深刻地理解和运用编译开发过程中的众多技术和方法,并能在此基础上针对编译器的优化展开深入的讨论,这些对于自己以后的研究和发展方向将起到非常大的推动作用。C编译器以C+语言作
17、为开发语言,以Microsoft Visual Studio2012作为开发工具,C编译器的各个阶段以类的形式表示,最后以项目文件为单位来编译生成C编译器的可执行文件。本实验以Microsoft Visual Studio2012作为开发工具,用标准C+进行开发,因此可以很好的的移植到其他平台(比如:linux,用g+编译生成可执行文件)。1.2 当前编译器国内外的发展情况在编译器技术的发展过程中,如何提高编译的效率一直是核心研究目标之一,编译效率主要是根据该编译器所生成的目标代码在执行过程中的时间指标和空间指标来衡量的,所以编译优化也必定围绕时间和空间这两个方面来实施。在编译过程中针对代码优
18、化的技术有很多,它们通常是通过搜集源代码或中间代码的特定信息,然后利用这些信息对代码中的数据结构或算法操作实施等价的改进变换,从而力求在时间效率和空间效率上达到一个最佳平衡点。编译器的开发者们总是希望能够将各种代码优化技术充分地运用在自己的编译器设计中,但往往事与愿违,毕竟优化操作本身也是需要付出开销的。在C编译器的开发过程中,虽然没有运用到太复杂的代码优化技术,但通过本实验的研究,在现有开发的C编译器基础之上,能够在后续相关项目的开发中有效地提高程序代码的编译质量,对于自己以后的研究和发展方向将起到非常大的推动作用。这正是本实验的研究意义所在。本实验是以C微型编译器的项目开发为基础,该项目的
19、开发目标是自定义一种C高级语言,然后编码实现出C语言的编译器(称为C编译器),完成将C语言源程序翻译为基于MM机(Mini Machine)的目标代码的任务,这是本实验的实际应用背景。编译器的开发具有极高的实用价值和意义,高级语言编译器的性能决定了基于该语言平台所开发出的软件的质量。所以国内外很多大学的科研和技术人员也在积极地开展这方面的技术探索和项目实践。他们大多是以特定的软件项目为背景来进行一些与编译器开发相关或类似的研究分析,他们的研究目标大多是基于某种实验型高级语言的编译器开发和优化改进,然后把有价值的研究成果移植或运用到产品级的编译器开发中(比如.NET平台编译器)。最近十年以来,国
20、外关于编译器设计的发展动态主要体现在:首先,编译器采用了大量的更加复杂的算法,主要用于推断或简化程序中的信息,这又与更为复杂的程序设计语言的发展结合在一起,其中典型的有用于函数语言编译的Hindley-Milner类型检查的统一算法2。其次,编译器已越来越成为基于窗口的可视化交互开发环境(Interactive Development Environment,IDE)的一部分,该环境还包括了智能编辑器、连接程序、调试程序以及项目管理程序等,已经成为了事实上的编译器行业标准。另一方面,尽管国内外的专家学者们近年来在编译原理领域进行了大量的研究,但是基本的编译器设计原理在近20年中都没有多大的改变
21、,它现在正迅速地成为计算机科学课程中的中心环节之一。在九十年代,作为GNU项目或其它开放源代码项目的一部分,许多免费的编译器或编译器构造工具被开发出来。这些工具可用来编译数种程序设计语言的源程序(典型的就是GCC)。它们中的一些项目被认为是高质量的,而且对现代编译理论感兴趣的人都可以较容易地得到它们的免费源代码。典型的是在1999年,SGI公布了他们的一个工业化的并行优化编译器Pro64的源代码,随后被全世界多个编译器研究小组用做研究平台,并命名为Open64。Open64的设计结构好,分析优化全面,是编译器高级研究的理想平台。反观国内,现阶段对于编译技术的相关研究,基本上都是着眼于特定编译器
22、的特定部分来展开的,而本实验将研究和分析的重点主要集中于一个完整的微型编译器的构造的讨论。44北京邮电大学毕业设计第二章 理论基础2.1 编译系统概述2.1.1 什么是编译器编译器,是将便于人类编写、阅读、维护的计算机高级语言程序翻译为机器能够识别、运行的计算机低级语言程序的一种系统软件。编译器将源程序(Source Program)作为输入,翻译产生使用目标语言的等价目标程序(Target Program)。其中,源程序一般为高级语言(High-level language),如Pascal,C+等,而目标语言则是汇编语言或目标机器的机器语言3。编译器的这一作用如图2-1所示:图2-1 编译
23、器的作用2.1.2 编译器的产生本世纪四十年代,由于冯诺依曼在存储程序计算机方面的先锋作用,使得编写一串代码或程序已成为可能和必要,这样计算机就可以执行所需的计算。在初期,这些程序都是用机器语言编写,编写或维护这样的代码是非常枯燥乏味且效率低下的,所以机器语言很快就被汇编语言代替了。汇编语言大大提高了程序编写速度和准确度,但它也有许多缺点。于是发展编程技术的下一个重要革新就是以一个更加类似于数学定义或自然语言的简洁形式来编写程序的功能操作,它应与任何机器都无关,而且也可由一个程序翻译为可执行的代码。随着对形式语言和自动机理论的研究,人们对高级程序设计语言的认识越来越深,对编译器结构的设计也越来
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 编译器 设计 实现 学士学位 论文
限制150内