C语言编译器设计与实现毕业论文

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C语言编译器设计与实现毕业论文

目录

摘要 ............................................................. 错误!未定义书签。Abstract............................................................ 错误!未定义书签。第一章绪论 (1)

1.1 开发背景 (1)

1.2 开发目标和意义 (2)

1.2 当前编译器国外的发展情况 (3)

第二章理论基础 (6)

2.1 编译系统概述 (6)

2.1.1 什么是编译器 (6)

2.1.2 编译器的产生 (6)

2.2 编译器的结构 (7)

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)

第三章 C编译器可行性分析及总体设计 (15)

3.1 可行性分析 (15)

3.1.1 经济可行性 (15)

3.1.2 技术可行性 (15)

3.1.3 运行可行性 (16)

3.1.4 时间可行性 (16)

3.1.5 法律可行性 (16)

3.2 C语言的基本描述 (17)

3.3 C编译器的功能 (18)

3.4 C编译器的程序结构 (18)

3.4.1 C编译器的设计模式 (18)

3.4.2 C编译器的文件组成 (20)

3.5 C编译器中的主要数据结构 (20)

第四章 C编译器的实现 (24)

4.1 词法分析阶段 (24)

4.1.1 概述 (24)

4.1.2 C词法分析程序的实现 (25)

4.1.3 关键字与标识符的识别 (27)

4.1.4 词法识别具体实现 (27)

4.2 语法分析阶段 (31)

4.2.1 概述 (31)

4.2.2 C语言抽象出来的文法规则 (32)

4.2.3 C语法分析程序的实现 (38)

4.3 语义分析阶段 (47)

4.3.1 概述 (47)

4.3.2 C语言的语义 (48)

4.3.3 C的符号表 (48)

4.3.4 C语义分析程序的实现 (49)

4.4 中间代码生成阶段 (55)

4.4.1 概述 (55)

4.5 C编译器的使用方法及测试 (56)

4.5.1 使用方法 (56)

4.5.2 测试源文件 (56)

4.5.3 测试词法分析 (57)

4.5.4 测试语义分析及中间代码生成 (58)

4.5.5 测试分析表文件的构造 (59)

参考文献 (62)

致谢 (63)

第一章绪论

1.1 开发背景

随着计算机科学技术的飞速发展,计算机技术被应用在了越来越广泛的领域,实现各种各样功能的计算机程序被大量地开发出来,应用在我们的生活、学习和工作当中。相应地,也产生了许多用以编写这些计算机程序的高级程序设计语言。程序编制者通过特定语言的编译器将自己编写的源程序翻译为特定机器上的目标程序,从而能够最终达到程序执行的目的。

从20世纪60年代以来,编译器设计就一直是计算机研究发展和开发领域中的一个活跃主题。虽然编译器设计已有很长的历史,并且也是一门相对成熟的计算机技术,但编译器毕竟是一种实现由高级语言源程序至机器或汇编指令的高效映射工具,随着计算机软、硬件水平的飞速发展,使得计算机应用日新月异,程序语言的设计在不断地变化,目标机体系结构也在不断地改进,软件越来越复杂,其规模也越来越大。尽管编译器设计问题在高级层次上没有变化(或变化很小),但当我们深入其部研究时就会发现,编译器的部构造其实也一直在变化。此外,由于我们能够提供给编译器本身使用的计算资源也在不断增加。因此,现代编译器可以采用比以前更耗费时间和空间的算法。当然,编译技术研究人员也在继续努力开发新的、更好的技术来解决传统编译器的一些设计性问题[1]。

另一方面,很多编译“前端”技术,如文法、正则表达式、语法分析器以及语法制导翻译器等,仍然被广泛使用。

1.2 开发目标和意义

编译器是一种相当复杂的系统程序,其代码的长度可从几千行到几百万行不等,所以编写甚至读懂这样的一个程序都不是一件容易的事。绝大多数的计算机专业人员从来没有编写过一个完整的编译器,但是,几乎所有形式的计算均要用到编译器,而且任何一个与计算机打交道的专业人员都应该掌握编译器的基本结构和操作。除此之外,计算机应用程序中经常遇到的一个任务就是有关命令解释程序和界面程序的开发,这比编译器的开发规模要小,但使用的却是很类似的技术。因此,掌握编译器的开发技术具有非常重大的实际意义。

编译器的设计的原理和技术还可以用于编译器设计之外的众多领域。因此,这些原理和技术通常会在一个计算机科学家的职业生涯中多次被用到。研究编译器的编写讲设计程序设计语言、计算机体系结构、形式语言理论、算法和软件工程。

编译器的设计从本质上来说是一种工程活动,它所使用的方法必须很好地解决现实中出现的各种翻译问题(即用真实的语言编制且在真实的机器上能够执行的真实的程序)。大多数情况下,开发编译器的人必须接受他们面对的语言和机器,很少能够去影响或改善这两者的设计。在开发过程中做什么样的分析和转换,以及什么时候去做,这些都是工程上的选择,但正是这些选择决定了一个编译器的性能高低。本实验就建立在一个自主开发的名为C的微型编译器基础之上,该编译器虽然功能弱于像Turbo C或Borland Pascal这样的经典编译器,但也已经完全具备了一个编译器应有的所有特征。

虽然本实验只是一个规模很小的微型编译器的开发,但所谓“麻雀虽小,五脏俱全”,作为一次较为完整的编译开发实践,它已经足够让我透彻地了解一个编译器开发过程了,同时能更深刻地理解和运用编译开发过程中的众多技术和方法,并能在此基础上针

相关文档
最新文档