词法分析试验_第1页
词法分析试验_第2页
词法分析试验_第3页
词法分析试验_第4页
词法分析试验_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

词法分析试验词法分析试验词法分析试验V:1.0精细整理,仅供参考词法分析试验日期:20xx年X月词法分析程序实验实验题目:手动构造词法分析程序实验目的:掌握手动构造词法分析程序的基本思想实验设备(环境):实验基本要求:根据状态转换图利用C语言手工编写一个词法分析程序,对指定的源程序,给出程序的输出结果。实验内容及步骤:一、内容及要求:1.上机调试一个词法分析程序(程序1,见最后)(1)将单词分为标识符、常数、保留字和分隔符。(2)事先建立一保留字表,以备在识别保留字时进行查询。变量名表及常数表则在词法分析过程中建立。(3)所输出的每一单词,均按形如(CLASS,VALUE)的二元式编码。2.词法分析程序的输入程序1的输入一个PASCAL源程序sourcePROGRAMsource;{thislittlesourceprogramisusedtoillustratecompilingprocedure.}VARx,y,z:integer;a:integer;BEGIN2ab%%#x:=23+5;z:=xDIV-3b;y:=z+18*3;a:=x+(y-2)DIV4;END.3.词法分析程序的输出程序1的输出形如(CLASS,VALUE)的单词串(1,'PROGRAM')(7,'source')(9,';')(2,'VAR')(7,'x')(9,',')(7,'y')(9,',')(7,'z')(9,':')(6,'integer')(9,';')(7,'a')(9,':')(6,'integer')(9,';')(3,'BEGIN')(7,'x')(9,':=')(8,'23')(9,'+')(8,'5')(9,';')(7,'z')(9,':=')(7,'x')(4,'DIV')(9,'-')(9,';')(7,'y')(9,':=')(7,'z')(9,'+')(8,'18')(9,'*')(8,'3')(9,';')(7,'a')(9,':=')(7,'x')(9,'+')(9,'(')(7,'y')(9,'-')(8,'2')(9,')')(4,'DIV')(8,'4')(9,';')(5,'END')(9,'.')4.词法分析程序(程序1)说明附在最后面的词法分析程序(程序1)以“程序1的输入一个PASCAL源程序source”为输入程序,并对该程序进行一些词法检查,最后输出形如(CLASS,VALUE)的单词串作为词法分析程序的结果。二、改写词法分析程序对词法分析程序(程序1)进行改写,使其能对如下的源程序进行词法分析:PROGRAMsource;{thislittlesourceprogramisusedtoillustratecompilingprocedure.}VARx,y,z:integer;a:integer;BEGIN2ab%%#x:=23+5;z:=xDIV-3b;IFx>zTHENy:=z+18*3ELSEa:=x+(y-2)DIV4;END.附:程序1一个词法分析程序: out(u,"."); break; case'-': out(u,"-"); break; case'*': out(u,"*"); break; case'+': out(u,"+"); break; case'(': out(u,"("); break; case')': out(u,")"); break; case':': ch=fgetc(fp); if(ch=='=') out(u,":="); else { fseek(fp,-1,1); out(u,":"); } break; case'{': ch=fgetc(fp); while(ch!='}') {if(ch=='\n') line++; ch=fgetc(fp); } case'': case'\t': break; case'\n': line++; break; default:if(ch!=-1){ report_error(line);//非法字符 cout<<"非法字符:"; TOKEN[0]=ch; TOKEN[1]='\0'; cout<<TOKEN<<endl;}break; } } } }//////////////////////////////////////////////////intlookup(char*b){ inti; //intc; for(i=0;i<6;i++) { if(strcmp(b,s[i])==0) { returni+1;////////////////////////////////////wende } } return0; }/////////////////////////////////////////////voidout(inta,char*token){ FILE*fp; fp=fopen("","a"); fprintf(fp,"(%d,'%s')",a,token);fclose(fp);/* if(a<=6) { cout<<"(关键字"<<","<<token<<")"<<endl; } if(a==7) { cout<<"(标识符"<<","<<token<<")"<<endl; } if(a==8) { cout<<"(整数"<<","<<token<<")"<<endl; } if(a==9) { cout<<"(专用符号"<<","<<token<<")"<<endl; } if(a==10) { cout<<"(非法字符"<<","<<token<<")"<<endl; } if(a==11) { cout<<"(错误符号"<<","<<token<<")"<<endl; }*/}//////////////////////////////////////////////////////voidreport_error(intn){ cout<<"第"<<n<<"行错误!"<<endl;}intmain(intargc,char*argv[]){ FILE*fp; FILE*fq; charch; printf("源程序是:\n"); fp=fopen("","r"); fq=fopen("","w"); while(!feof(fp)) { ch=fgetc(fp); printf("%c",ch); } printf("\n"); printf("词法分

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论