- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Mini C编译器的设计与实现 (讲义) 电子科技大学计算机学院 《编译
Mini C编译器的设计与实现
(讲义)
电子科技大学计算机学院
《编译原理》课程组
2008年
目录
第一章 Mini C语言编译器简介 4
第二章 理论基础 7
2.1 编译系统概述 7
2.1.1 什么是编译器 7
2.1.2 编译器的产生 7
2.2 编译器的结构 8
2.3 编译器的组织 10
2.3.1 编译的分遍 10
2.3.2 分遍的设计 11
2.4 编译器中的主要数据结构 11
2.5 编译程序的开发 12
2.5.1 历史与发展 12
2.5.2 开发注意事项 12
2.5.3 编译技术和软件工具 12
第三章 MINI C语言和MINI C编译器 14
3.1 MINI C编译器的开发背景和意义 14
3.2 MINI C语言的基本描述 14
3.3 MINI C编译器的功能 15
3.4 MINI C编译器的程序结构 16
3.4.1 MINI C编译器的核心模块 16
3.4.2 MINI C编译器的文件组成 16
3.4.3 MINI C编译器的分遍 17
3.5 MINI C编译器中的主要数据结构 17
第四章 MINI C编译器的实现 19
4.1 词法分析阶段 19
4.1.1 概述 19
4.1.2 MINI C词法分析程序的实现 20
4.1.3 关键字与标识符的识别 21
4.1.4 为标识符分配空间 21
4.2 语法分析阶段 22
4.2.1 概述 22
4.2.2 MINI C语言的语法 22
4.2.3 MINI C语法分析程序的实现 23
4.3 语义分析阶段 24
4.3.1 概述 24
4.3.2 MINI C语言的语义 24
4.3.3 MINI C的符号表 25
4.3.4 MINI C语义分析程序的实现 25
4.4 MINI C运行时环境 26
4.4.1 概述 26
4.4.2 MINI C的运行时环境 26
4.5 代码生成阶段 28
4.5.1 概述 28
4.5.2 目标机器——Mini Machine 29
4.5.3 MINI C代码生成器的实现 31
MINI C代码生成器的MM接口 31
MINI C代码生成器 33
4.6.1 将临时变量放入寄存器 35
4.6.2 在寄存器中保存变量 36
4.6.3 优化测试表达式 36
4.7 MINI C编译器的使用方法 37
第一章 Mini C语言编译器简介
随着计算机科学技术的飞速发展,计算机技术被应用在了越来越广泛的领域,实现各种各样功能的计算机程序被大量地开发出来,应用在我们的生活、学习和工作当中。相应地,也产生了许多用以编写这些计算机程序的高级程序设计语言。程序编制者通过特定语言的编译器将自己编写的源程序翻译为特定机器上的目标程序,从而能够最终达到程序执行的目的。
从20世纪60年代以来,编译器设计就一直是计算机研究发展和开发领域中的一个活跃主题。虽然编译器设计已有很长的历史,并且也是一门相对成熟的计算机技术,但编译器毕竟是一种实现由高级语言源程序至机器或汇编指令的高效映射工具,随着计算机软、硬件水平的飞速发展,使得计算机应用日新月异,程序语言的设计在不断地变化,目标机体系结构也在不断地改进,软件越来越复杂,其规模也越来越大。尽管编译器设计问题在高级层次上没有变化(或变化很小),但当我们深入其内部研究时就会发现,编译器的内部构造其实也一直在变化。此外,由于我们能够提供给编译器本身使用的计算资源也在不断增加。因此,现代编译器可以采用比以前更耗费时间和空间的算法。当然,编译技术研究人员也在继续努力开发新的、更好的技术来解决传统编译器的一些设计性问题[1]。
编译器是一种相当复杂的系统程序,其代码的长度可从几千行到几百万行不等,所以编写甚至读懂这样的一个程序都不是一件容易的事。绝大多数的计算机专业人员从来没有编写过一个完整的编译器,但是,几乎所有形式的计算均要用到编译器,而且任何一个与计算机打交道的专业人员都应该掌握编译器的基本结构和操作。除此之外,计算机应用程序中经常遇到的一个任务就是有关命令解释程序和界面程序的开发,这比编译器的开发规模要小,但使用的却是很类似的技术。因此,掌握编译器的开发技术具有非常重大的实际意义。
编译器的设计从本质上来说是一种工程活动,它所使用的方法必须很好地解决现实中出现的各种翻译问题(即用真实的语言编制且在真实的机器上能够执行的真实的程序)。大多数情况下,开发编译器的人必须接受他们面对的语言和机器,很少能够去影响或改善这两者的设计。在开发过程中做什么样的分析和转换,以及什么时候去做,这些都是工程上的选择,但正是这些选择决定了一个编译器的性能高低。本实验就建立在一个自主开发的名为MINI C的微型编译器基础之上,该编译器虽然功能弱于像Turbo C或Borla
文档评论(0)