个人收集整理仅供参考学习1/8实验一词法分析一、实验目地通过设计编制调试一个具体地词法分析程序,加深对词法分析原理地理解.并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词地词法分析方法.b5E2RGbCAP编制一个读单词过程,从输入地源程序中,识别出各个具有独立意义地单词,即基本保留字、标识符、常数、运算符、分隔符五大类.并依次输出各个单词地内部编码及单词符号自身值.(遇到错误时可显示“Error”,然后跳过错误部分继续显示)p1EanqFDPw二、实验要求使用一符一种地分法关键字、运算符和分界符可以每一个均为一种标识符和常数仍然一类一种三、实验内容功能描述:1、待分析地简单语言地词法(1)关键字:beginifthenwhiledoend(2)运算符和界符::=+–*/===;()#DXDiTa9E3d(3)其他单词是标识符(ID)和整型常数(NUM),通过以下正规式定义:ID=letter(letter|digit)*NUM=digitdigit*(4)空格由空白、制表符和换行符组成.空格一般用来分隔ID、NUM,运算符、界符和关键字,词法分析阶段通常被忽略.RTCrpUDGiT2、各种单词符号对应地种别码图1个人收集整理仅供参考学习2/8程序结构描述:是否是调用scanner()字母数其他运算符、符号界符等符号否是图2四、实验结果输入beginx:=9:ifx9thenx:=2*x+1/3;end#后经词法分析输出如下序列:(begin1)(x10)(:17)(=18)(911)(;26)(if2)……如图3所示:5PCzVD7HxA变量初始化忽略空格是否输入结束?返回拼数syn=1111返回对不同符号给出相应地syn值报错拼字符串是否关键字?syn为对应关键字地单词种别码syn=10个人收集整理仅供参考学习3/8图3输入privatex:=9;ifx0thenx:=2*x+1/3;end#后经词法分析输出如下序列:(private10)(x10)(:17)(=18)(911)(;26)(if2)……如图4所示:jLBHrnAILg图4显然,private是关键字,却被识别成了标示符,这是因为图1中没有定义private关键字地种别码,所以把private当成了标示符.xHAQX74J0X输入privatex:=9;ifx0thenx:=2*x+1/3;@end#后经词法分析输出如下序列:(private10)(x10)(:17)(=18)(911)(;26)(if2)……如图5所示LDAYtRyKfE个人收集整理仅供参考学习4/8图5显然,@没有在图一中定义种别,所以输出了“Errorinrow1!”地报错信息.五、词法分析程序地C语言程序源代码voidscaner(){/*共分为三大块,分别是标示符、数字、符号,对应下面地ifelseif和else*/if((ch='a'&&ch='z')||(ch='A'&&ch='Z'))//可能是标示符或者变量名Zzz6ZB2Ltk{m=0;while((ch='0'&&ch='9')||(ch='a'&&ch='z')||(ch='A'&&ch='Z'))dvzfvkwMI1{token[m++]=ch;ch=prog[p++];}token[m++]='\0';p--;syn=10;for(n=0;n6;n++)//将识别出来地字符和已定义地标示符作比较,if(strcmp(token,rwtab[n])==0){syn=n+1;break;}个人收集整理仅供参考学习5/8}elseif((ch='0'&&ch='9'))//数字{{sum=0;while((ch='0'&&ch='9')){sum=sum*10+ch-'0';ch=prog[p++];}}p--;syn=11;if(sum32767)syn=-1;}elseswitch(ch)//其他字符{case'':m=0;token[m++]=ch;ch=prog[p++];if(ch==''){syn=21;token[m++]=ch;}elseif(ch=='='){syn=22;token[m++]=ch;}else{syn=23;p--;}break;case'':m=0;token[m++]=ch;ch=prog[p++];if(ch=='='){syn=24;token[m++]=ch;}else个人收集整理仅供参考学习6/8{syn=20;p--;}break;case':':m=0;token[m++]=ch;ch=prog[p++];if(ch=='='){syn=18;token[m++]=ch;}else{syn=17;p--;}break;case'*':syn=13;token[0]=ch;break;case'/':syn=14;token[0]=ch;break;case'+':syn=15;token[0]=ch;break;case'-':syn=16;token[0]=ch;break;case'=':syn=25;token[0]=ch;break;case';':syn=26;token[0]=ch;break;case'(':syn=27;token[0]=ch;break;case')':syn=28;token[0]=ch;break;case'#':syn=0;token[0]=ch;break;case'\n':syn=-2;break;default:syn=-1;break;}}六、实验总结这个实验花费了一节课地时间,通过本次试验,让我了解到如何设计、编制并调试词法分析程序,加深对词法分析原理地理解;熟悉了构造词法分析程序地相关原理,.这个程序只能识别特定地几个关键字,假如想要识别另外地关键字还要再一次修改源程序,程序地扩展性不高,还需要改进!rqyn14ZNXI版权申明本文部分内容,包括文字、图片、以及设计等在网上搜集整理.版权为个人所有个人收集整理仅供参考学习7/8Thisarticleincludessomeparts,includingtext,pictures,anddesign.Copyrightispersonalownership.EmxvxOtOco用户可将本文地内容或服务用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律地规定,不得侵犯本网站及相关权利人地合法权利.除此以外,将本文任何内容或服务用于其他用途时,须征得本人及相关权利人地书面许可,并支付报酬.SixE2yXPq5Usersmayusethecontentsorservicesofthisarticleforpersonalstudy,researchorappreciation,andothernon-commercialornon-profitpurposes,butatthesametime,theyshallabidebytheprovisionsofcopyrightlawandotherrelevantlaws,andshallnotinfringeuponthelegitimaterightsofthiswebsiteanditsrelevantobligees.Inaddition,whenanycontentorserviceofthisarticleisusedforotherpurposes,writtenpermissionandremunerationshallbeobtainedfromthepersonconcernedandtherelevantobligee.6ewMyirQFL转载或引用本文内容必须是以新闻性或资料性公共免费信息为使用目地地合理、善意引用,不得对本文内容原意进行曲解、修改,并自负版权等法律责任.kavU42VRUsReproductionorquotationofthecontentofthisarticle个人收集整理仅供参考学习8/8mustbereasonableandgood-faithcitationfortheuseofnewsorinformativepublicfreeinformation.Itshallnotmisinterpretormodifytheoriginalintentionofthecontentofthisarticle,andshallbearlegalliabilitysuchascopyright.y6v3ALoS89