词法分析器的设计与实现(共34页).doc
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《词法分析器的设计与实现(共34页).doc》由会员分享,可在线阅读,更多相关《词法分析器的设计与实现(共34页).doc(34页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上目录一设计题目2二设计要求21. 词法分析器的定义22. 设计要求23. 本程序自行规定:3三设计作用与目的41. 设计作用42. 设计目的4四运行环境及工具软件4五系统设计51. 系统总体设计5(1)词法分析器的设计5(2)总体设计框图6(3) 总程序流程图62. 各子模块设计8(1) 字符的识别8(2)关键字的识别8(3) 数字的识别8(4)界符的识别10(5) 运算处理103.相关函数分析114. 源程序设计12六实验调试结果291. 调试工具292. 调试步骤293. 调试结果29七设计中的问题及解决方法31八设计心得32九参考文献34词法分析器的设计与实现一
2、设计题目词法分析器的设计与实现二设计要求1. 词法分析器的定义词法分析顾名思义就是分词。它以程序设计语言编制的源程序作为输入,以单词序列作为输出。分词过程可以通过编制程序自动完成,我们通常称这个分词程序为词法分析器。词法分析器分析的源程序可以是现有的各类程序设计语言源程序也可以是人为给定的模型语言的源程序。本文中的源程序为后者。从词的角度来看,它涉及的内容较为简单,只包括几个较为常用的词类,词类的构成上也适当的作了一些简化。对词进行分析时,我们是按类型进行分析的 。不同类型的词在后续的分析中所起的作用不同,相应的操作也各有不同,但同种类型中的 词虽然单词的构成不同但从宏观上看它们的操作大体一致
3、。模型语言中的单词可以分为“关 键字”、“标识符”、“常数”、“分隔符”、“运算符”几类。一般,关键字在程序设计语言中人为给定2. 设计要求对给定的程序通过词法分析器能够识别一个个单词符号,并以二元式(单词种别码,单词符号的属性值)显示。而本程序则是通过对给定路径的文件的分析后以单词符号和文字提示显示。另外,如果是算术表达式,则需要通过栈、运算符的优先级比较处理等从而计算出最终结果并显示。通过此次课程设计要求掌握从源程序文件中读取有效字符的方法,掌握词法分析的实现方法并上机调试编出的词法分析程序。在处理表达式前,首先设置两个栈:一是运算符栈,用于在表达式处理过程中存放运算符。在开始时,运算符栈
4、中先压入一个表达式结束符“#”。二是操作数栈,用于在表达式处理过程中存放操作数。然后从左到右依次读出表达式中的各个符号(运算符或操作数),每读出一个符号按以下原则进行处理:(1) 若读出的是操作数,则将该操作数压入操作数栈,并依次读入下一个符号。(2) 若读出的是运算符,则作进一步判断。若读出运算符的优先级大于运算符栈顶运算符的优先级,则将读出的运算符压入运算符栈,并依次读下一个符号。若读出的是表达式结束符“#”,且运算符栈栈顶的运算符也是表达式结束符“#”,则表达式处理结束,最后的计算结果在操作数栈的栈顶位置。若读出运算符的优先级不大于运算符栈栈顶运算任的优先级,则从操作数栈连续退出两个操作
5、数,并从运算符栈退出一个运算符,然后作相应的运算(运算符为刚从运算符栈退出的运算符,运算对象为刚从操作数栈退出的两个操作数),并将运算结果压入操作栈。3. 本程序自行规定: 关键字:auto,break,case,char,const,continue, default,do,double,else,enum,extern, float,for,goto,if,int,long,return, short,signed,sizeof,static,struct,switch 运算符:+,-,*,/,= 界符:,;,,,.,(,),: 数字:09 其他标记 如字符串,表示以字母开头的标识符。 空
6、格、回车、换行符跳过。在屏幕上显示如下:( +, 运算符 )( ; , 界符 )(auto , 关键字 )( 1 , 无符号整数)( a , 普通标识符 )(continue , 关键字 )三设计作用与目的 1. 设计作用用高级语言编写一个词法分析器,使之能识别输入串,并把分析结果(单词符号,标识符,关键字等等)输出。输入源程序,输入单词符号,本词法分析器可以辨别关键字、标识符、常数、运算符号和某些界符,运用了文件读入来获取源程序代码,再对该源程序代码进行词法分析,这就是词法分析器的基本功能。当词法分析器调用预处理子程序处理出一串输入字符放进扫描缓冲区之后,分析器就从此缓冲区中逐一识别单词符号
7、。当缓冲区里的字符串被处理完之后,它又调用预处理子程序来处理新串。 2. 设计目的1)熟悉词法分析的基本原理,词法分析的过程,以及词法分析中要注意的一些问题;2)通过设计调试词法分析程序,实现从源程序中分出各种单词的方法;3)复习高级语言,进一步加强用高级语言来解决实际问题的能力;4)提高词法分析方法的实践能力;5)理解如何理论联系实际以及明白理论与实际的差别。四运行环境及工具软件Windows XP环境,Microsoft visual C+ 6.0版,512M内存,80G硬盘容量。VC+是开发的一个(集成开发环境),换句话说,就是使 的一个开发平台.有些软件就是这个编出来的vc+是平台上的
8、C+编程环境,学习VC要了解很多Windows平台的特性并且还要掌握、等的知识,难度比较大。五系统设计 1. 系统总体设计 (1)词法分析器的设计词法分析在教学上的主要应用是对源程序进行分词同时验证词的合性,词法分析的输入是给定的模型语言,输出为单词序列。输入的源程序可以看成是一个字符串序列,通过把源程序看作字符串序列就可以采用形式语言的一些现有理论处理相关的编译题。分词的输出为单词序列,单词是一个有共同含义的字符集。由于程序设计语言中通常使用空格来分割不同的词,因此初学者在理解这一概念时可以简单的把空格分隔开的字符串认为是一个单词。词法分析器设计时,输入的源程序以文件的形式存储在外部。主控程
9、序通过打开文件调用待分析的源程序。程序设计时采用一字一码的形式处理,标志符为一类,不同的标志符通过值区别。常数只给出具体的值即可。根据以上的分析可以相应的设计如下的存储结构。关键字可以设计为一个预先存储好的表格。其设计的主要思路为:先让用户输入单词或字符串,而且是一个字一个字的读取,直到#束,且要全部打印出代码。着便开始进行分析,先是依次判断每一个字符,空白就跳到下一个,次往下类推,道不是空白为止。后再读入一个字符,如果是字母,就继续读入下一个,只要遇到是字母或者是数字的时候,都继续往下读,而且读入的字符都依次地保存在一个字符串当中,直到不是字母或者是数字为止。这时侯来查找关键字表,如果有关键
10、字的话,则作为关键字输出,如果没有,就作为字符串输出。的话,如果是数字,也继续读入,如果是数字或者是小数点,依然继续往下读,也依次保存在字符串中,直到不是数字或小数点为止,最终这里得到就是常数。要注意的是,在这里如果中途遇到运算符和界符,也依然要做和前面关键字、字符串或者是常数类似的分析,如果输入是一个正确的算术表达式则按照如下操作进行:(1) 若读出的是操作数,则将该操作数压入操作数栈,并依次读入下一个符号。(2) 若读出的是运算符,则作进一步判断。若读出运算符的优先级大于运算符栈顶运算符的优先级,则将读出的运算符压入运算符栈,并依次读下一个符号。若读出的是表达式结束符“#”,且运算符栈栈顶
11、的运算符也是表达式结束符“#”,则表达式处理结束,最后的计算结果在操作数栈的栈顶位置。若读出运算符的优先级不大于运算符栈栈顶运算任的优先级,则从操作数栈连续退出两个操作数,并从运算符栈退出一个运算符,然后作相应的运算(运算符为刚从运算符栈退出的运算符,运算对象为刚从操作数栈退出的两个操作数),并将运算结果压入操作栈。这就是整个词法分析器的设计思想。 (2)总体设计框图总体设计框图如下:出错处理常数表 界 符 源文件运算符 数 字字 符关键字 字符表词法分析器图1.总体设计框图(3) 总程序流程图总程序流程图如下: 将其依次输入到*c读入一个字符放在ch变量中调用count()函数计算判断能否计
12、算?输出分析结果若可计算则输出表达式的值! 结束!将字符拼接成一字符串strToken输入一个被识别字符串开始图2.总体流程图 Ch是字符? Y N Ch是数字? N Ch是运算符?strToken是关键字? Y N N Y Y Y Ch是界符?输出字符串输出关键字 Y Y NRetract()Error2. 各子模块设计(1) 字符的识别 判断输入的字符是否为字符,若为字符则将其拼凑成一个单词在往下进行判断,若不为字符则则判断其是否为数字,其子模块程序流程图1如下:读入一个字符放在ch变量中Ch是字符?NCh是数字?Y将字符拼接成一个字符串strToken 图3. 字符的识别(2)关键字的识
13、别 判断输入的单词是否为关键字,若为关键字则返回它的编码,若不为关键字则判断其是否为运算符,其子模块程序流程图如图2所示:(3) 数字的识别 判断输入的字符是否为数字,若为数字则返回它的编码,若不为数字则判断其是否为运算符,其子模块程序流程图如图3所示:将字符拼接成一个字符串strTokenstrToken是关键字?NY输出关键字Return q输出字符串Return -1图4. 关键字的识别Ch是数字?NY Ch是运算符?将其依次输入到*c Y图5.数字的识别(4)界符的识别 判断输入的字符是否为界符,若为数字则break,若不为数字则将搜索指示器回调一个字符位置,将ch置为空白字符,其子模
14、块程序流程图如下所示:Ch是界符?NYErrorRetract()图6.界符的识别(5) 运算处理数字和运算符依次输入*c判断能否运算?N Y输出字符串90调用函数count()90图7.运算的判别3.相关函数分析n int i=0,j=0,k=0,t=0; /搜索指示器n char ch; /存放最新读入的原程序字符n void GetChar(); /将下一个字符读入ch中,搜索指示器前移一字符位n void GetBC(); /检查ch中的字符是否为空白,若是则调用Getchar直至ch中进入一个非空白字符n void Concat(); /将ch中的字符连接到strToken之后n b
15、ool IsLetter(); /判断ch中的字符是否为字符 bool IsDigit(); /判断ch中的字符是否为数字int Reserve(); /对strToken中的字符串查找保留字表,若它是一个保留字 l 则返回它的编码,否则返回-1值。n void Retract(); /将搜索指示器回调一个字符位置,将ch置为空白字符n char*InsertId(); /将strToken中的标识符插入符号表,返回符号表的指针n char * InsertConst(); /将strToken中的常数插入常数表,返回常数表指针n int check(char *c); / 检查字符串中有否除
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 词法 分析器 设计 实现 34
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内