下载此文档

编译原理 词法分析器 实验报告.doc


文档分类:高等教育 | 页数:约11页 举报非法文档有奖
1/11
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/11 下载此文档
文档列表 文档介绍
该【编译原理 词法分析器 实验报告 】是由【花双韵芝】上传分享,文档一共【11】页,该文档可以免费在线阅读,需要了解更多关于【编译原理 词法分析器 实验报告 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。词法分析器实验报告实验目的:设计、编制、调试一个词法分析子程序-识别单词,加深对词法分析原理的理解。功能描述:该程序要实现的是一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类。并依次输出各个单词的内部编码及单词符号自身值。(遇到错误时可显示 “Error!”,然后跳过错误部分继续进行)设计思想:设计该词法分析器的过程中虽然没有实际将所有的状态转移表建立出来,但是所用的思想是根据状态转移表实现对单词的识别。首先构造一个保留字表,然后,每输入一个字符就检测应该进入什么状态,并将该字符连接到d串后继续输入,如此循环,最后根据所在的接受状态以及保留字表识别单词。符号表:记号类别属性值ws--const保留字1var保留字1call保留字1begin保留字1if保留字1while保留字1do保留字1odd保留字1end保留字1then保留字1procedure保留字1=运算符2<运算符2<=运算符2<>运算符2>运算符2>=运算符2*运算符2+运算符2-运算符2/运算符2:= 运算符ident 标识符number 常数( 分隔符) 分隔符; 分隔符, 分隔符. 分隔符状态转换图:①标识符及保留字:letterordigittStart letter23455555number:+|-digit6012345Edigit③关系操作符:start<=(<=,2)>(<>,2)other=*(<,2)(=,2)>:=(>=,2)other*(>,2)=(:=,2)④分隔符:;start(;,5)(),.((,5)(),5)⑤算术运算符:start(,,5)(.,5)+(+,2)-(-,2)*/(*,2)(/,2)使用环境:Windowsxp下的visualc++程序测试:input1:inta,b;a=b+2;input2:while(a>=0)do7x=x++23;end;input3:begin:x:=9ifx>0thenx:=x+1;whilea:=0dob:=2*x/3,c:=a;end;output1:output2:output3:3,int1,while1,begin3,a5,(errorline15,,3,a3,x3,b2,>=2,:=5,;4,04,93,a5,)1,if2,=1,do3,x3,berrorline32,>2,+2,=4,04,23,x1,then5,;2,+3,x4,+232,:=5,;3,x1,end2,+5,;4,15,;1,while3,a2,:=4,01,do3,b2,:=4,22,*3,c5,;3,x2,:=2,/3,a4,35,;5,,1,end测试结果与预期结果一致源程序代码:#include<>#include<>voidmain(){inti=0,j,k=0,state=1,f=0,linenum=1;chara[11][10]={"const","var","call","begin","if","while","do","odd","end","then","procedure"};charb,d[40]={"\0"};freopen("","r",stdin);freopen("","w",stdout);b=getchar();while(b!=EOF)/*判断所输入字符是否为结束符 */{if(b==''||b=='\n'||b=='\t')/* 滤过空格、换行等分隔符号 */{if(b='\n')linenum++;b=getchar();}elseif((b>='a'&&b<='z')||(b>='A'&&b<='Z'))/*识别标识符以及保留字*/{d[i++]=b;b=getchar();while((b>='a'&&b<='z')||(b>='A'&&b<='Z')||(b>='0'&&b<='9')){d[i++]=b;b=getchar();}for(j=0;j<11;j++)/*查询保留字表确定该单词是否是保留字 */{if(strcmp(d,a[j])==0){printf("1,%s\n",d);k=1;break;}}if(k==0)/*在保留字表中没有查到该单词,是标识符 */printf("3,%s\n",d);for(j=0;j<=i;j++)d[j]='\0';i=0;k=0;}elseif(b>='0'&&b<='9')/*识别常数*/{d[i++]=b;b=getchar();while(f!=1){switch(state){case1:if(b>='0'&&b<='9'){state=1;d[i++]=b;b=getchar();}elseif(b=='.') {state=2;d[i++]=b;b=getchar();}elseif(b=='E'){state=4;d[i++]=b;b=getchar();}elsestate=7;break;case2:if(b>='0'&&b<='9'){state=3;d[i++]=b;b=getchar();}elsestate=8;break;case3:if(b>='0'&&b<='9'){state=3;d[i++]=b;b=getchar();}elseif(b=='E'){state=4;d[i++]=b;b=getchar();}elsestate=7;break;case4:if(b=='+'||b=='-'){state=5;d[i++]=b;b=getchar();}elseif(b>='0'&&b<='9'){state=6;d[i++]=b;b=getchar();}elsestate=8;break;case5:if(b>='0'&&b<='9'){state=6;d[i++]=b;b=getchar();}elsestate=8;break;case6:if(b>='0'&&b<='9'){state=6;d[i++]=b;b=getchar();}elsestate=7;break;case7:f=1;break;case8:f=1;break;}}if(state==7&&(b<'a'||b>'z')&&(b<'A'||b>'Z'))printf("4,%s\n",d);elseif(state==7&&(b>='a'&&b<='z')||(b>='A'&&b<='Z'))/*数字后接字母的出错控制*/{while((b>='a'&&b<='z')||(b>='A'&&b<='Z')){d[i++]=b;b=getchar();}printf("errorline%d\n",linenum);}elseprintf("errorline%d\n",linenum);for(j=0;j<=i;j++)d[j]='\0';i=0;f=0;state=1;}elseif(b=='<')/*识别'<'、'<='和'<>'*/{d[i++]=b;b=getchar();if(b=='='||b=='>'){d[i++]=b;b=getchar();printf("2,%s\n",d);for(j=0;j<=i;j++)d[j]='\0';i=0;}else{printf("2,%s\n",d);for(j=0;j<=i;j++)d[j]='\0';i=0;}}elseif(b=='>')/*识别'>'和'>='*/{d[i++]=b;b=getchar();if(b=='='){d[i++]=b;b=getchar();printf("2,%s\n",d);for(j=0;j<=i;j++)d[j]='\0';i=0;}else{printf("2,%s\n",d);for(j=0;j<=i;j++)d[j]='\0';i=0;}}elseif(b==':')/*识别':='*/{d[i++]=b;b=getchar();if(b=='='){d[i++]=b;b=getchar();}printf("2,%s\n",d);elseprintf("errorline%d\n",linenum);for(j=0;j<=i;j++)d[j]='\0';i=0;}elseif(b=='*'||b=='+'||b=='-'||b=='/'||b=='=')/*识别运算符*/{printf("2,%c\n",b);}b=getchar();elseif(b=='('||b==')'||b==','||b==';'||b=='.')/*识别分隔符*/{printf("5,%c\n",b);b=getchar();}else

编译原理 词法分析器 实验报告 来自淘豆网www.taodocs.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数11
  • 收藏数0 收藏
  • 顶次数0
  • 上传人花双韵芝
  • 文件大小286 KB
  • 时间2024-03-25
最近更新