C语言编译器前端的设计与实现课程设计.docx

上传人:b****2 文档编号:1669586 上传时间:2022-10-23 格式:DOCX 页数:23 大小:60.84KB
下载 相关 举报
C语言编译器前端的设计与实现课程设计.docx_第1页
第1页 / 共23页
C语言编译器前端的设计与实现课程设计.docx_第2页
第2页 / 共23页
C语言编译器前端的设计与实现课程设计.docx_第3页
第3页 / 共23页
C语言编译器前端的设计与实现课程设计.docx_第4页
第4页 / 共23页
C语言编译器前端的设计与实现课程设计.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

C语言编译器前端的设计与实现课程设计.docx

《C语言编译器前端的设计与实现课程设计.docx》由会员分享,可在线阅读,更多相关《C语言编译器前端的设计与实现课程设计.docx(23页珍藏版)》请在冰豆网上搜索。

C语言编译器前端的设计与实现课程设计.docx

C语言编译器前端的设计与实现课程设计

C语言编译器前端的设计与实现课程设计

计算机与信息工程学院

软硬件专业综合课程设计总结报告

 

题目:

C语言编译器前端的设计与实现

 

姓名:

学号:

专业:

计算机科学与技术

指导教师:

起止日期:

12.11.26—13.01.20

 

计算机与信息工程学院

软硬件专业综合课程设计任务书

实践题目

C语言编译器前端的设计与实现

学生姓名

班级

学号

指导教师

职称

实践地点

计算机基础实验室

实践日期

2012年11月26日起至2013年1月20日

选题的目的:

编译器前端是制作一个编译器最为关键性的一个步骤,设计一个优秀的前端,直接影响到后期编译器的实现效率。

编译器前端具有多样化,实现的方法较多,如何选择更优秀的方法来设计,让许多人一直不懈的研究下去。

并且编译器前端的设计能与自然语言处理相互印证,是一个值得思考的领域。

技术要求:

1、熟练掌握一门语言,熟练掌握C语言语法使用,以及各种语法结构

2、良好的算法数据结构基础,对常见的数据结构模型能够实现

3、对编译原理知识有良好的基础,对于各种常见文法做到心中有数

4、熟练使用VS2005开发工具

进度安排:

2012年11月26日——2012年12月09日可行性研究、需求分析

2012年12月10日——2012年12月23日总体设计

2012年12月24日——2013年01月06日详细设计

2013年01月07日——2013年01月13日系统调试、测试

2013年01月14日——2013年01月18日撰写实训报告

2013年01月19日——2013年01月20日验收

主要参考资料:

[1]钱焕延.编译技术第2版[M].南京:

东南大学出版社出版,2002。

[2]康慕宁.编译原理[M].西安:

西北工业大学出版社出版,2003。

[3]贺世娟,陈冀川.Visualstudio2005程序设计[M].北京:

中国水利水电出版社出版,2008.8。

[4]杨克玉.Visualstudio2005程序设计实训教程[M].北京:

机械工业出版社出版,2009.2。

教师签名:

年月日

C语言编译器前端的设计与实现

摘要:

编译器是程序员使用的关键工具,程序员每天都在使用编译器,并且非常依赖于其正确性和可靠性。

编译器作为广大IT从业者必须接触的系统软件,它的设计本身又是一个极其庞大的工程。

编译器相关的各项技术经过近几十年的发展,已经日臻成熟,然而编译器构造原理和技术依然是计算机科学中理论与实践相结合的最好典范。

本文首先介绍了C语言及C语言编译器的发展历程,其次对本次开发所用到的工具VisualStudioC++2005以及面向对象的程序设计方法做一下简单介绍。

最后重点介绍了编译器前端的详细开发过程,分为三个部分分别阐述:

词法分析器的设计,语法分析器的设计,语义分析部分。

每个部分又分别从总体框架,详细流程,重点数据结构和函数,以及与其他部分的接口等方面予以阐述。

由于C语言本身的复杂性,很难面面俱到实现所有标准定义,所以本次设计只象征性的选择部分具有代表性的功能。

在本文的第四章详细给出了此次设计所实现的功能和语法规范,同时也给出了编译器的运行方式。

关键词:

编译器前端、C源程序、面向对象程序设计方法、VC++

 

附录:

附录1:

词法分析核心代码............................................................................................17

附录2:

语法分析核心代码............................................................................................18

第1章绪论

1.1C语言及编译器概述

C语言是在70年代初问世的。

一九七八年由美国电话电报公司(AT&T)贝尔实验室正式发表了C语言。

同时由B.W.Kernighan和D.M.Ritchit合著了著名的“THECPROGRAMMINGLANGUAGE”一书。

通常简称为《K&R》,也有人称之为《K&R》标准。

但是,在《K&R》中并没有定义一个完整的标准C语言,后来由美国国家标准学会在此基础上制定了一个C语言标准,于一九八三年发表。

通常称之为ANSIC。

C语言是一种结构化语言。

它层次清晰,便于按模块化方式组织程序,易于调试和维护。

C语言的表现能力和处理能力极强。

它不仅具有丰富的运算符和数据类型,便于实现各类复杂的数据结构。

它还可以直接访问内存的物理地址,进行位(bit)一级的操作。

由于C语言实现了对硬件的编程操作,因此C语言集高级语言和低级语言的功能于一体。

既可用于系统软件的开发,也适合于应用软件的开发。

此外,C语言还具有效率高,可移植性强等特点。

因此广泛地移植到了各类各型计算机上,从而形成了多种版本的C语言。

编译是从源代码(通常为高阶语言)到能直接被计算机或虚拟机执行的目标代码(通常为低阶语言或机器语言)的翻译过程。

然而,也存在从低阶语言到高阶语言的编译器,这类编译器中用来从由高阶语言生成的低阶语言代码重新生成高阶语言代码的又被叫做反编译器。

也有从一种高阶语言生成另一种高阶语言的编译器,或者生成一种需要进一步处理的的中间代码的编译器(又叫级联)。

典型的编译器输出是由包含入口点的名字和地址,以及外部调用(到不在这个目标文件中的函数调用)的机器代码所组成的目标文件。

一组目标文件,不必是同一编译器产生,但使用的编译器必需采用同样的输出格式,可以链接在一起并生成可以由用户直接执行的可执行程序。

1.2C编译器前端设计思想

一个编译器的前端设计主要工作过程可以概括为以下几个步骤:

(1)词法分析

词法分析器根据词法规则识别出源程序中的各个记号(token),每个记号代表一类单词(lexeme)。

源程序中常见的记号可以归为几大类:

关键字、标识符、字面量和特殊符号。

词法分析器的输入是源程序,输出是识别的记号流。

词法分析器的任务是把源文件的字符流转换成记号流。

本质上它查看连续的字符然后把它们识别为“单词”。

(2)语法分析

语法分析器根据语法规则识别出记号流中的结构(短语、句子),并构造一棵能够正确反映该结构的语法树。

(3)语义分析

语义分析器根据语义规则对语法树中的语法单元进行静态语义检查,如果类型检查和转换等,其目的在于保证语法正确的结构在语义上也是合法的。

本系统的设计主要是实现了其中的词法分析、语法分析和语义分析三个部分。

1.3开发工具的选用及介绍

软件环境使用Windows2000/XP操作系统,用VisualC++.NET为开发平台,在开发此软件时用的是VC++中的MFC框架。

VisualC++.NET2005是微软公司推出的开发Win32应用程序(Windows95/98/2000/XP/NT)的面向对象的可视化集成工具。

从原来的VisualC++6.0/VisualC++.Net2005升级而来,它的最大优点就是提供了功能强大的MFC类库,MFC是一个很大的C++类层次结构,其中封装了大量的类及其函数,很多Windows程序所共有的标准内容可以由MFC的类来提供,MFC类为这些内容提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有的东西填入这个轮廓,这将简化编程工作,大大的减少程序员编写的代码数量,使编程工作变得更加轻松容易。

当然还有Visual2008和最新的Visual2010beta版也已经发布。

VisualStudio2005的成功已被证实,即开发人员偏爱一个具备对他们需要的工具提供接口的集成开发环境。

下面主要介绍它的有点。

通过将开发人员在开发环境中需要的测试和性能工具(例如,单元测试、代码分析和性能分析)合并在一起,VisualStudio2005TeamSystem也期待着这种成功。

这使开发人员能够在生命周期的较早阶段就改善其代码的质量,而无需中断他们的工作。

通过尽早地为开发人员提供他们需要用于识别和解决质量问题的工具,更多的产品缺陷就能够在它们还未构成危害之前即被发现并解决。

VisualStudio2005TeamSystem,那么过程就不仅仅是文档了。

它还能将自己体现为实际的工具行为更改。

当您在项目初期选择过程时,还需要选择工作流和工作产品,它们会驱动系统的行为方式。

对SDLC过程的支持是内置的,这使得对工作流的支持是无缝的。

通过将过程集成到团队成员日常使用的基本工具中,VisualStudio2005TeamSystem大大消除了过程采纳的障碍,并使自动收集跨职能的项目标准成为可能,而无需实施人工报告的相关开销。

通过使用一个公共的跨工具集的数据仓库,VisualStudio2005TeamSystem解决了在大多数SDLC工具中建立数据仓库这一问题,并启动了一个聚合的项目状态视图。

团队根据能够收集到的规则来管理项目。

今天,数据主要限于缺陷跟踪。

VisualStudioTeamSystem中集成的数据将开创一条新路—通过平衡利用贯穿于SDLC的大量、多样的数据来管理项目规则。

VisualStudio2005TeamSystem会收集精确的数据—不仅限于缺陷跟踪,而是包括测试结果、代码涵盖、代码生成、任务进度等这些贯穿于团队常规工作流程的数据。

该数据以某些标准的报告方式呈现,客户和Microsoft内部团队已在报告中建立了成功项目管理的关键规则。

此外,团队还能够创建自定义报告。

仅当以项目的大范围上下文查看数据时,团队才能够精确地报告项目状态。

1.4论文组织结构

第1章绪论

简述了C语言的发展以及一般编译器的工作原理,并介绍了本系统开发的主要平台和工具及其特点。

第2章C语言词法分析器的总体分析与设计

简单的介绍了系统的设计目标及系统要实现的功能。

简单的介绍了几个要实现的编译步骤的概念和要完成的任务。

第3章系统的详细设计

介绍了系统的基本流程,各个模块的设计思想和核心代码部分。

第2章C语言词法分析器的总体分析与设计

2.1系统设计目标与功能分析

本系统的设计目标是完成一个小型的C语言编译器的前端设计,由于要完成一个完美的C语言编译器前端是一件非常复杂的事情,不仅要考虑到C语言代码的各种灵活用法,还需要能灵活运用C语言语法,甚至是了解语法的构成原理。

本系统只完成整个编译过程中的词法分析、语法分析、语义分析以及其中的建立符号表和类型检查几个步骤。

下面分别概括介绍编译过程中的这几个阶段。

2.2词法分析

词法分析程序又称扫描器,它是编译过程的第一个阶段。

其主要任务是从左到右依次描描字符串形式的源程序的各个字符,逐个识别出其中的单词,并将其转换成为内部编码形式的单词符号串输出,用于进行语法分析。

通常可采用二元式(CLASS,VALUE)来表示一个单词符号的内部编码,其中CLASS为一整数码,用于表示该单词的类别;VALUE则是单词之值(如变量名在符号表中的序号,常数的二进制表示,以及运算符和分隔符的编码,等等)。

概括的说,扫描器在其工作过程中,一般应完成下列的任务:

(1)识别出源程序中的各个单词符号,并将其转换成内部编码形式;

(2)删除无用的空白字符、回车字符以及其他非实质性字符;

(3)删除注释;

(4)进行词法检查,报告所发现的错误。

此外,视编译工作流程的组织,一些编译程序在进行词法分析时,还要完成将所识别出的标志符登录到符号表的工作。

从功能上看,词法分析上把字符

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 广告传媒

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1