好文档 - 专业文书写作范文服务资料分享网站

C语言编译器设计与实现

天下 分享 时间: 加入收藏 我要投稿 点赞

C语言编译器设计与实现

摘 要

随着计算机的广泛应用,计算机程序设计语言也从初期的机器语言发展为汇编语言,以及现在的各种高级程序设计语言。而编译技术是计算机语言发展的支柱,也是计算机科学中发展最迅速、最成熟的一个分支,他集中体现了计算机发展的成果与精华。

其核心思想就是把同样的逻辑结构和思想从一种语言表示的程序转换为另外一种语言表示的程序。从高级语言,甚至运行与虚拟平台的高级语言,到机器语言,最终到硬件执行的物理信号,这一层层的转化,都涉及编译技术的应用。

本系统采用C++为编程语言。论文主要介绍了本课题的开发背景,所要完成的功能和开发的过程。重点的说明了系统设计的重点、设计思想、难点技术和解决方案。

关键词:编译技术,编程程序,高级语言

i

C language compiler design and Implementation

Abstract

With 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 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 . 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 language. 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 language

ii

目 录

摘 要 ............................................................................................................................................................ i Abstract .......................................................................................................................................................... ii 第一章 绪论 ................................................................................................................................................ 1

1.1 开发背景 ....................................................................................................................................... 1 1.2 开发目标和意义 ........................................................................................................................... 1 1.2 当前编译器国内外的发展情况 ..................................................................................................... 2 第二章 理论基础 .......................................................................................................................................... 4

2.1 编译系统概述 ............................................................................................................................... 4 2.1.1 什么是编译器 ............................................................................................................................ 4

2.1.2 编译器的产生 .................................................................................................................... 4 2.2 编译器的结构 ............................................................................................................................... 4 2.3 编译器的组织 ............................................................................................................................... 6

2.3.1 编译的分遍 ........................................................................................................................ 6 2.3.2 分遍的设计 ........................................................................................................................ 6 2.4 编译器中的主要数据结构 ........................................................................................................... 7 2.5 编译程序的开发 ........................................................................................................................... 7

2.5.1 历史与发展 ........................................................................................................................ 7 2.5.2 开发注意事项 .................................................................................................................... 7 2.5.3 编译技术和软件工具 ........................................................................................................ 7

第三章 C编译器可行性分析及总体设计 .................................................................................................. 9

3.1 可行性分析 ..................................................................................................................................... 9

3.1.1 经济可行性 .......................................................................................................................... 9 3.1.2 技术可行性 ........................................................................................................................ 9 3.1.3 运行可行性 ........................................................................................................................ 9 3.1.4 时间可行性 ...................................................................................................................... 10 3.1.5 法律可行性 ...................................................................................................................... 10 3.2 C语言的基本描述 ..................................................................................................................... 10 3.3 C编译器的功能 ......................................................................................................................... 10 3.4 C编译器的程序结构 ................................................................................................................. 11

3.4.1 C编译器的设计模式 ...................................................................................................... 11 3.4.2 C编译器的文件组成 ...................................................................................................... 12 3.5 C编译器中的主要数据结构 ..................................................................................................... 12 第四章 C编译器的实现 .......................................................................................................................... 14

4.1 词法分析阶段 ............................................................................................................................. 14

4.1.1 概述 .................................................................................................................................. 14 4.1.2 C词法分析程序的实现 .................................................................................................. 14 4.1.3 关键字与标识符的识别 .................................................................................................. 16 4.1.4 词法识别具体实现 .......................................................................................................... 16 4.2 语法分析阶段 ............................................................................................................................. 18

4.2.1 概述 .................................................................................................................................. 18

4.2.2 C语言抽象出来的文法规则 .......................................................................................... 19 4.2.3 C语法分析程序的实现 .................................................................................................. 22 4.3 语义分析阶段 ............................................................................................................................. 26

4.3.1 概述 .................................................................................................................................. 26 4.3.2 C语言的语义 .................................................................................................................. 27 4.3.3 C的符号表 ...................................................................................................................... 27 4.3.4 C语义分析程序的实现 .................................................................................................. 28 4.4 中间代码生成阶段 ..................................................................................................................... 33

4.4.1 概述 .................................................................................................................................. 33 4.5 C编译器的使用方法及测试 ..................................................................................................... 33

4.5.1 使用方法 .......................................................................................................................... 33 4.5.2 测试源文件 ...................................................................................................................... 33 4.5.3 测试词法分析 .................................................................................................................. 34 4.5.4 测试语义分析及中间代码生成 ...................................................................................... 35 4.5.5 测试分析表文件的构造 .................................................................................................. 36

参考文献...................................................................................................................................................... 38 致谢 ............................................................................................................................................................. 39

第一章 绪论

1.1 开发背景

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

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

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

1.2 开发目标和意义

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

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

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

1

C语言编译器设计与实现

C语言编译器设计与实现摘要随着计算机的广泛应用,计算机程序设计语言也从初期的机器语言发展为汇编语言,以及现在的各种高级程序设计语言。而编译技术是计算机语言发展的支柱,也是计算机科学中发展最迅速、最成熟的一个分支,他集中体现了计算机发展的成果与精华。其核心思想就是把同样的逻辑结构和思想从一种语言表示的程序转换为另外一种语言表示的
推荐度:
点击下载文档文档为doc格式
56bkm8o93206i7k4fff923x6i11g5t00rpp
领取福利

微信扫码领取福利

微信扫码分享