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

.词法分析器实验报告专业资料word.实验目的:设计、编制、调试一个词法分析子程序-识别单词,加深对词法分析原理的理解。功能描述:该程序要实现的是一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类。并依次输出各个单词的内部编码及单词符号自身值。(遇到错误时可显示“Error!”,然后跳过错误部分继续进行)设计思想:设计该词法分析器的过程中虽然没有实际将所有的状态转移表建立出来,但是所用的思想是根据状态转移表实现对单词的识别。首先构造一个保留字表,然后,每输入一个字符就检测应该进入什么状态,并将该字符连接到d串后继续输入,如此循环,最后根据所在的接受状态以及保留字表识别单词。符号表:专业资料word.记号类别属性值-ws-保留1const保留1var保留1call保留1begin保留1if保留1while保留1do保留1odd保留1end保留1then保留1procedure运算2=运算2<运算2<=运算2<>运算2>运算2>=运算2*运算2+运算2-运算2/运算:=2标识3ident专业资料word.常数4number分隔符5(分隔5)分隔;5分隔,5分隔.5状态转换图:①标识符及保留字:letterordigittletterStartnumber:②otherotherdigitdigitdigitdigit+|-Estartdigit.digit6510234digitE③关系操作符:专业资料word.=start<)<=,2>)<>,2other*)(<,2=)=,>=)>=,2other*(>,2)=(:=,2)④分隔符:专业资料word.;start(;,5)(((,5))(),5),.(,,5)(.,5)算术运算符:⑤+start(+,2)-(-,2)*/(*,2)(/,2)使用环境:visualc++6.0Windowsxp下的程序测试:专业资料word.input1:inta,b;a=b+2;input2:while(a>=0)do7x=x+6.7E+23;end;input3:begin:x:=9ifx>0thenx:=x+1;whilea:=0dob:=2*x/3,c:=a;end;output2:output1:4,2output2:5,;3,int1,while3,a5,(5,,3,a3,b2,>=5,;4,03,a5,)2,=1,do3,berrorline32,+专业资料word.output3:3,c2,=output3:2,:=3,x1,begin2,+3,aerrorline14,6.7E+235,;3,x5,;1,end2,:=1,end5,;4,95,;1,if3,x2,>4,01,then3,x2,:=3,x2,+4,15,;1,while3,a2,:=4,01,do3,b2,:=4,22,*3,x2,/4,35,,专业资料word.测试结果与预期结果一致源程序代码:#include<stdio.h>#include<string.h>voidmain(){inti=0,j,k=0,state=1,f=0,linenum=1;chara[11][10]={const,var,call,egin,if,while,do,odd,end,hen,procedure};charb,d[40]={\freopen(input.txt,,stdin);freopen(output.txt,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(,%s\n,d);{k=1;专业资料word.break;}}if(k==0)/*在保留字表中没有查到该单词,是标识符*/printf(,%s\n,d);for(j=0;j<=i;j++)j]='\0';d[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;专业资料word.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(,%s\n,d);elseif(state==7(b>='a'b<='z')||(b>='A'b<='Z'))/*数字后接字母的...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供参考,付费前请自行鉴别。
3、如文档内容存在侵犯商业秘密、侵犯著作权等,请点击“举报”。

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

客服邮箱:

biganzikefu@outlook.com

所有的文档都被视为“模板”,用于写作参考,下载前须认真查看,确认无误后再购买;

文档大部份都是可以预览的,笔杆子文库无法对文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;

文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为依据;

如果您还有什么不清楚的或需要我们协助,可以联系客服邮箱:

biganzikefu@outlook.com

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

笔杆子文秘
机构认证
内容提供者

为您提供优质文档,供您参考!

确认删除?