高级语言编译器中词法分析器的设计与实现(共24页).doc
《高级语言编译器中词法分析器的设计与实现(共24页).doc》由会员分享,可在线阅读,更多相关《高级语言编译器中词法分析器的设计与实现(共24页).doc(24页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上 四川师范大学本科毕业设计高级语言编译器中词法分析器的设计与实现学生姓名张彪院系名称物理与电子工程学院专业名称通信工程班 级2008级 4 班学 号指导教师 陈万川完成时间2012年 5月 12日高级语言编译器中的词法分析器的设计与实现学生姓名:张彪 指导老师:陈万川内容摘要:编译器是程序员使用的关键工具,程序员毎天都在使用编译器,并且非常依赖于其正确性和可靠性。本文首先介绍了C语言及C语言编译器的发展历程,其次对本次开发所用到的工具Visual Studio C+2005以及面向对象的程序设计方法做一下简单介绍。最后重点介绍了编译器的详细开发过程,分为四个部分分别阐
2、述:词法分析器的设计;语法分析器的设计;语义分析;以及系统的用户界面部分。每个部分又分别从总体框架,详细流程,重点数据结构和函数,以及与其他部分的接口等方面予以阐述。由于C语言本身的复杂性,很难面面倶到实现所有标准定义,所以本次设计只象征性的选择部分具有代表性的功能。在本文的第四章详细给出了此次设计所实现的功能和语法规范,同时也给出了编译器的运行方式。关键词:编译器 C源程序 VC+The lexical analyzers Design and Implementation of high-level language compilerAbstract: The compiler is a
3、key tool used by the programmer. Programmers every day in the compiler, and is very dependent on its accuracy and reliability. This paper first describes the C language and C language compiler development process, make a brief introduction followed by the tools used to develop Visual Studio C + + 20
4、05 as well as object-oriented programming method. Finally, highlight the compiler development process is divided into four parts, respectively, explained: The design of lexical analyzer, parser design, semantic analysis, as well as the systems user interface part. Each part separately from the overa
5、ll framework of the process, focusing on data structures and functions, as well as other parts of the interface to be elaborated. Due to the complexity of the C language itself, difficult to Powerphones Ju to all standard definition, so the wood design is only symbolic choice of representative funct
6、ions. Chapter IV of this paper is given in detail the design features and syntax specification, but also gives the compiler run.Keywords: compiler the C source VC + +专心-专注-专业目 录1 绪论11.1 C语言及编译器概述11.2 C编译器设计思想11.3开发工具的选用及介绍21.4论文组织结构32 C语言词法分析器的总体分析与设计42.1系统设计目标与功能分析42.2词法分析42.3语法分析42.3.1自顶向下的语法分析52.
7、3.2自底向上的语法分析52.4语义分析52.5符号表62.6类型检查73 系统详细设计73.1系统设计基本思路73.2词法分析模块设计83.3语法分析模块设计103.4语义分析模块设计133.5界面设计考量153.5.1可用性原则153.5.2可视性原则163.5.3系统主要界面组成174 系统原型测试194.1系统测试基本原则194.2系统测试的步骤194.3测试结果205 结束语20致谢21参考文献21高级语言编译器中的词法分析器的设计与实现1 绪论1.1 C语言及编译器概述C语言是一种计算机程序设计语言。它既具有高级语言的特点,又具有汇编语言的特点。它由美国贝尔研究所的D.M.Ritc
8、hie于1972年推出。1978后,C语言已先后被移植到大、中、小及微型机上。它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。它的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到C语言,适于编写系统软件,三维,二维图形和动画。具体应用比如单片机以及嵌入式系统开发。词法分析代表了一类问题的集合,即如何对输入字符串中的特定模式进行具备特定动作的匹配。解决此类问题,不仅对于编译器开发中的阶段抽象具有重要意义,更对应用领域中有关字符处理的需求具有深刻价值。设计和实现词法分析器,要用到词素、记号、正则表达式、输入
9、字符双缓冲区、符号表、状态转换图设计等概念。抽象地阐述这些概念往往晦涩难懂,而结合某一具体编译器的前端实现来分析探讨,则容易使概念条理清晰,目的明确。因此,从设计一个轻量级语言开始,根据语言编译的要求设计和实现词法分析器,将原理与实践结合,将是研究此类问题的最佳途径。 编译是从源代码(通常为高阶语言)到能直接被计算机或虚拟机执行的目标代码(通常为低阶语言或机器语言)的翻译过程。然而,也存在从低阶语言到高阶语言的编译器,这类编译器中用来从由高阶语言生成的低阶语言代码重新生成高阶语言代码的又被叫做反编译器。也有从一种高阶语言生成另一种高阶语言的编译器,或者生成一种需要进一步处理的的中间代码的编译器
10、(又叫级联)。典型的编译器输出是由包含入口点的名字和地址,以及外部调用(到不在这个目标文件中的函数调用)的机器代码所组成的目标文件。一组目标文件,不必是同一编译器产生,但使用的编译器必需采用同样的输出格式,可以链接在一起并生成可以由用户直接执行的可执行程序。1.2 C编译器设计思想一个编译器的主要工作过程可以概括为以下几个步骤:(1)词法分析词法分析器根据词法规则识别出源程序中的各个记号(token),每个记号代表一类单词(lexeme)。源程序中常见的记号可以归为几大类:关键字、标识符、字面量和特殊符号。词法分析器的输入是源程序,输出是识别的记号流。词法分析器的任务是把源文件的字符 流转换成
11、记号流。本质上它查看连续的字符然后把它们识别为“单词”。(2)语法分析语法分析器根据语法规则识别出记号流中的结构短语、句子,并构造一棵能够正确反映该结构的语法树。(3)语义分析语义分析器根据语义规则对语法树中的语法单元进行静态语义检查,如果类型检查和转换等,其目的在于保证语法正确的结构在语义上也是合法的。(4)中间代码生成中间代码生成器根据语义分析器的输出生成中间代码。中间代码可以有若干种形式,它们的共同特征是与具体机器无关。最常用的一种中间代码是三地址码,它的一种实现方 式是四元式。三地址码的优点是便于阅读、便于优化。(5)中间代码优化优化是编译器的个重要组成部分,由于编译器将源程序翻译成中
12、间代码的工作是机械的、按固定模式进行的,因此,生成的中间代码往往在时间和空间上有很大浪费。当需要生成高效目标代码时,就必须进行优化。(6)目标代码生成目标代码生成是编译器的最后一个阶段。在生成目标代码时要考虑以下几个问题:计算机的系统结构、指令系统、寄存器的分配以及内存的组织等。编译器生成的目标程序代 码可以有多种形式:汇编语言、可重定位二进制代码、内存形式。(7)符号表管理符号表的作用是记录源程序中符号的必要信息,并加以合理组织,从而在编译器的各个阶段能对它们进行快速、准确的查找和操作。符号表中的某些内容甚至要保留到程序的 运行阶段。(8)出错处理用户编写的源程序中往往会有一些错误,可分为静
13、态错误和动态错误两类。所谓动态 错误,是指源程序中的逻辑错误,它们发生在程序运行的时候,也被称作动态语义错误,如变量取值为零时作为除数,数组元素引用时下标出界等。静态错误又可分为语法错误和 静态语义错误。语法错误是指有关语言结构上的错误,如单词拼写错、表达式中缺少操作数、begin和end不匹配等。静态语义错误是指分析源程序时可以发现的语言意义上的错误,如加法的俩个操作数中一个是整型变量名,而另一个是数组名等。本系统的设计主要是实现了其中的词法分析、语法分析和语义分析三个部分。1.3开发工具的选用及介绍软件环境使用Window2000/XP操作系统,用Visual C+.Net为开发平台,在开
14、发此软件时用的是VC+中的MFC框架。Visual C+.Net2005是微软公司推出的开发Win32应用程序(Windows95/98/2000/XP/NT)的面向对象的可视化集成工具。从原来的Visual C+6.0/ Visual C+.Net 2005升级而来,它的最大优点就是提供了功能强大的MFC类库,MFC是一个很大的类层次结构,其中封装了大量的类及其函数,很多Windows程序所共有的标准内容可以由MFC的类来提供,MFC类为这些内容提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接门把具体应用程序特有的东西填入这个轮廓,这将简化编程工作,大大的减少程序员编写的代码数
15、量,使编程工作变得更加轻松容易。当然还有Visual 2008 和最新的Visual 2010beta版也已经发布。Visual Studio2005的成功已被证实,即开发人员偏爱一个具备对他们需要的工具提供接口的集成开发环境。下面主要介绍它的特点。通过将开发人员在开发环境中需要的测 试和性能工具(例如,单元测试、代码分析和性能分析)合并在一起,Visual Studio 2005 Team System也期待着这种成功。这使开发人员能够在生命周期的较早阶段就改善其代码的质量,而无需中断他们的工作。通过尽早地为开发人员提供他们需要用于识别和解决质量问题的工具,更多的产品缺陷就能够在它们还未构成
16、危害之前即被发现并解决。Visual Studio 2005 Team System,那么过程就不仅仅是文档了。它还能将自己体现为实际的工具行为更改。当您在项目初期选择过程时,还需要选择工作流和工作产品,它们会驱动系统的行为方式。对SDL过程的支持是内置的,这使得对工作流的支持是无缝的。通过将过程集成到团队成员日常使用的基本工具中,Visual Studio 2005 Team System加大消除了过程釆纳的障碍,并使自动收集跨职能的项目标准成为可能,而无需实施人工报告的相关开销。通过使用一个公共的跨工具集的数据仓库,Visual Studio 2005 Team System解决了在大多数
17、SDLC工具中建立数据仓库这一问题,并启动了一个聚合的项月状态视图。团队根据能够收集到的规则来管理项目。今天,数据主要限于缺陷跟踪。Visual Studio 2005 Team System中集成的数据将开创一条新路通过平衡利用贯穿于SDLC的大量、多样的数据来管理项目规则。Visual Studio 2005 Team System会收集精确的数据不仅限于缺陷跟踪,而是包括测试结果、代码涵盖、代码生成、任务进度等这些贯穿于团队常规工作流程的数据。该数据以某些标准的报告方式呈现,客户和Mcrosoft内部团队已在报告中建立了成功项目管理的关键规则。此外,团队还能够创建自定义报告。仅当以项目的
18、大范围上下文查看数据时,才能够精确地报告项目状态。这些优点也是此次毕业设计选用此开发工具的主要原因。1.4论文组织结构全文共由四部分组成: 第一章 绪论简述了C语言的发展以及一般编译器的工作原理,并介绍了本系统开发的主要平台和工具及其特点。第二章 C语言词法分析器的总体分析与设计简单的介绍了系统的设计目标及系统要实现的功能。简单的介绍了几个要实现的编译步骤的概念和要完成的任务。第三章 系统的详细设计介绍了系统的基本流程,各个模块的设计思想和核心代码部分。第四章 系统原型的测试对原型系统进行了测试。 2 C语言词法分析器的总体分析与设计2.1系统设计目标与功能分析本系统的设计同标是完成一个小型的
19、C语言编译器,由于要完成一个完美的C语言编译器是一件非常复杂的事情,不仅要考虑C语言代码的各种灵活用法,还需要熟悉生成目标代码和生成解析可执行文件的原理,甚至是汇编语言。所以本系统只完成整个编译过程中的词法分析、语法分析、语义分析以及其中的建立符号表和类型检查几个步骤,并不生成最后的可执行文件。另外,本系统包含一个简单易用的用户界面部分,可以进行C语言代码的编写、打开、保存等功能,并且代码视图釆用的是关键字高亮显示技术,使代码的阅读更加直观。而在编译过程中,下部的输出窗门实时显示编译过程中发现的错误等信息,最后显示编译结果。下面分别概括介绍编译过程中的这几个阶段。2.2词法分析词法分析程序又称
20、扫描器,它是编译过程的第一个阶段。其主要任务是从左到右依次描述字符中形式的源程序的各个字符,逐个识别出其中的单词,并将其转换成为内部编码形式的单词符号串输出,用于进行语法分析。通常可釆用二元式(CLASS,VALUE)来表示一个单词符号的内部编码,其中CLASS为一整数码,用于表示该单词的类别;VALUE则是单词之值(如变量名在符号表中的序号,常数的二进制表示,以及运算符和分隔符的编码,等等。概括的说,扫描器在其工作过程中,一般应完成下列的任务:(1)识别出源程序中的各个单词符号,并将其转换成内部编码形式;(2)删除无用的空白字符、回车字符以及其他非实质性字符;(3)删除注释;(4)进行词法检
21、查,报告所发现的错误。此外,视编译工作流程的组织,一些编译程序在进行词法分析时,还要完成将所识别出的标志符登录到符号表的工作。从功能上看,词法分析上把字符币形式的源程序转换为单词形式,然后进行语法分析。从工作方式上看,与语法分析之间存在两种接口方式。一种方式是将词法分析的输出结果存放在一个中间文件上,后面的语法分析程序将它作为输入进行语法分析。另一种方式是将词法分析编成一个子程序,该子程序由语法分析程序调用,当语法分析程序需要一个新的单词时,就调用该子程序,每调用一次,则从源程序字符中中读出一个具有独立意义的单词。本设计釆用前一种方式。2.3语法分析语法分析程序又称分析器,它以单词串形式的源程
22、序作为输入或分析的对象,其基本任务是:报据程序设计语言的语法规则(即定义该语言的前后无关文法,分析源程序的语法结构,即分析如何由这些单词组成该源程序的各种语法成分如下标变量、函数、各种表达式、各种程序语句等,并在分析过程中进行语法正确性检查,产生内部形式的中间代码,供编译程序后续阶段处理。目前,已存在多种语法分析方面的方法,但就产生语法树的方向而言,可大致把它们分为自顶向下分析和自底向上分析两大类。2.3.1自顶向下的语法分析所谓自顶向下的语法分析,只指对于给定输入串w,试图为其构造一个从文法开始符号S到W的最左推导S=W或为自上而下地构造一棵S为报结点的语法树。如果这一尝试得到成功,则证明w
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 高级 语言 编译器 词法 分析器 设计 实现 24
限制150内