编译原理实验报告《词法分析器的构造》(共24页).doc
《编译原理实验报告《词法分析器的构造》(共24页).doc》由会员分享,可在线阅读,更多相关《编译原理实验报告《词法分析器的构造》(共24页).doc(14页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上词法分析器的构造实验报告一、 实验名称词法分析器的构造二、实验目的 设计、编制、调试一个词法分析程序,对单词进行识别和编码,加深对词法分析原理的理解。三、实验内容和要求 编写一个C语言词法分析器,要求:1、允许用户自己输入源程序并保存为文件2、系统能够输出经过预处理后的源程序(去掉注释、换行、空格等)3、能够将该源程序中所有的单词根据其所属类型(整数、保留字、运算符、标识符等。定义的类C语言中的标识符只能以字母或下划线开头)进行归类显示,例如:识别保留字:if、int、for、while、do、return、break、continue等,其他的都识别为标识符;常数为
2、无符号整形数;运算符包括:+、-、*、/、=、=、=、!=等;分隔符包括:,、;、(、)等。4、实现文件的读取操作,而不是将文本以字符串形式预存于程序中。文本内容为待分析的类C语言程序。例如下面为一段C语言源程序:main()int a,b;a = 10; b = a + 20;要求输出如下(2,main)(5,()(5,)(5, )(1,int)(2,a)(5,,)(2,b)(5,;)(2,a)(4,=)(3,10)(5,;)(2,b)(4,=)(2,a)(4,+)(3,20)(5,;)(5,)四、主要仪器设备硬件:微型计算机。软件: Visual C+ 6.0(也可以是其它集成开发环境)。
3、 五、实验过程描述1、状态转换图01324567空白字母非字母数字和_字母或数字或_数字非数字运算符界符其他*数字2、程序主要框架 程序中编写了以下函数,各个函数实现的作用如下:int alpha(int st):/识别保留字和标识符int number(int st) /识别常数int anotation(int st) /处理除号/和注释/int other(int st) /识别运算符、分隔符、特殊字符int choice1(int st)/读入的字符是字母返回1int choice2(int st)/读入的字符是数字返回1int choice(int st) /根据读入的单词的第一个字
4、符确定调用不同函数识别单词 3、编写的源程序#include#include#include#includeusing namespace std;string keywords21=include,void,main,int,char,float,double,if,else,then,break,continue,for,do,while,printf,scanf,begin,end,return,define;char rz99999= ;/源程序 char pz9999 =;/预处理后的源程序 string id10000;/存储标识符 int pp=0;/标识符序号 string n
5、u10000;/存储常数 int qq=0;/常数序号 int choice1(char a) /判断是否是字母 if(a=a&a=A&a=0&a=9) return 1; else return 0;int alpha(int st) /识别保留字(1)和标识符(2) char wordbuf20= ;int n=0;for( ; ; )wordbufn=rzst; st+;n+; if(choice2(rzst)=1)|(choice1(rzst)=1)|(rzst=_)/语法 标识符=|wordbufn=rzst;else break;int flag=0;for(int k=0;k21
6、;k+)if(strcmp(keywordsk.c_str(),wordbuf)=0) flag=1;/是保留字 if(flag=1) printf( (%s,1) ,wordbuf); elseint flagg=-1;for(int t=0;tpp;t+) if(strcmp(idt.c_str(),wordbuf)=0)/已经出现过的标识符 flagg=t;if(flagg=-1) /新的标识符记录到id中 idpp=wordbuf; pp+; printf( (%s,2) ,wordbuf);return st;int number(int st) /识别常数 char numbuf2
7、0= ;int n=0;int k=0;int flag=0;for( ; ; )numbufn=rzst; st+;n+; if(choice2(rzst)=1)numbufn=rzst;else if(k=0)&(rzst=.)numbufn=rzst;k+;else if(choice1(rzst)=1)numbufn=rzst;flag=1;continue;else break;if(flag=0)int flagg=-1;for(int t=0;tqq;t+) if(strcmp(nut.c_str(),numbuf)=0)/已经出现过的常数 flagg=t;if(flagg=-1
8、) /新的的常数 nuqq=numbuf; qq+;printf( (%s,3) ,numbuf);elseprintf( ();for(int i=0;in;i+) printf(%s,numbufi); printf(,error digital!) );return st;int anotation(int st) /处理除号/和注释char tabuf9999= ;int n=0; st+;if(rzst=/)printf( (/,-) );st+;while(rzst!=10)tabufn=rzst;st+;n+;printf( 注释);for(int i=0;in;i+)print
9、f(%c,tabufi);else if(rzst=*)printf( (/*,-) );st+;int stt=st+1;while(1)if(rzst=*&rzst+1=/) break;tabufn=rzst;st+;n+;if(rzst+1=0)printf(/* error!n);return st+1;printf( 注释);for(int i=0;i,=,: st+; if(rzst=) st+; printf( (=,4) ); else printf( (,4) ); break;case : st+; if(rzst=) st+; printf( (=,4) ); else
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 词法分析器的构造 编译 原理 实验 报告 词法 分析器 构造 24
限制150内