欢迎来到天天文库
浏览记录
ID:12588741
大小:409.00 KB
页数:16页
时间:2018-07-17
《语法分析实验报告》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、编译原理实验报告实验名称:语法分析实验类型:设计性实验指导教师:蒋勇专业班级:软件1001班姓名:李岳东学号:20101557实验地点:东6A-319实验成绩:____________________________日期:2012年月日一、实验目的编译技术是理论与实践并重的课程,而其实验课要综合运用一、二年级所学的多门课程的内容,用来完成一个小型编译程序。从而巩固和加强对词法分析、语法分析、语义分析、代码生成和报错处理等理论的认识和理解;培养学生对完整系统的独立分析和设计的能力,进一步培养学生的独立编程能力。二、实验
2、设计三、实验过程1)给定文法:(文法举例)EàE+T|TTàT*F|FFà(E)|i2)构造FIRST()集和FOLLOW()集表3-1FIRST()集和FOLLOW()集FIRSTFOLLOWE(,i#,+,)T(,i#,+,),*F(,i#,+,),*四、实验结果表4-1分析成功表4-2分析失败表4-3载入文件出错流程图如下所示:五、附录:关键代码#include#include#include#include#include3、.h>usingnamespacestd;intTESTparse();intprogram();intcompound_Stat();intstatement();intexpression_Stat();intexpression_r();intbool_expr();intadditive_expr();intterm();intfactor();intif_stat();intwhile_stat();intfor_stat();intwrite_stat();intread_stat();intdeclar4、ation_stat();intdeclaration_list();intstatement_list();intcompound_stat();chartoken[20],token1[40];//token保存单词符号,token1保存单词值charScanout[300];//保存词法分析输出文件名FILE*fp;//用于指向输入输出文件的指针//语法分析程序intTESTparse(){intes=0;if((fp=fopen(Scanout,"r"))==NULL){printf("打开%s错误!5、",Scanout);es=10;}if(es==0)es=program();printf("=====语法分析结果!======");switch(es){case0:printf("语法分析成功!");break;case10:printf("打开文件%s失败!",Scanout);break;case1:printf("缺少{!");break;case2:printf("缺少}!");break;case3:printf("缺少标识符!");break;case4:printf("少6、分号!");break;case5:printf("缺少(!");break;case6:printf("缺少)!");break;case7:printf("缺少操作数!");break;}fclose(fp);return(es);}//<程序>::={<声明序列><语句序列>}//program::={}intprogram(){intes=0;fscanf(fp,"%s%s",token,token1);printf("%7、s%s",token,token1);if(strcmp(token,"{"))//判断是否'{'{es=1;return(es);}fscanf(fp,"%s%s",&token,&token1);printf("%s%s",token,token1);es=declaration_list();if(es>0)return(es);es=statement_list();if(es>0)return(es);if(strcmp(token,"}"))//判断是否'}'{es=2;return(es);8、}return(es);}//<声明序列>::=<声明序列><声明语句>9、<声明语句>//::=//10、//该成::={}intde
3、.h>usingnamespacestd;intTESTparse();intprogram();intcompound_Stat();intstatement();intexpression_Stat();intexpression_r();intbool_expr();intadditive_expr();intterm();intfactor();intif_stat();intwhile_stat();intfor_stat();intwrite_stat();intread_stat();intdeclar
4、ation_stat();intdeclaration_list();intstatement_list();intcompound_stat();chartoken[20],token1[40];//token保存单词符号,token1保存单词值charScanout[300];//保存词法分析输出文件名FILE*fp;//用于指向输入输出文件的指针//语法分析程序intTESTparse(){intes=0;if((fp=fopen(Scanout,"r"))==NULL){printf("打开%s错误!
5、",Scanout);es=10;}if(es==0)es=program();printf("=====语法分析结果!======");switch(es){case0:printf("语法分析成功!");break;case10:printf("打开文件%s失败!",Scanout);break;case1:printf("缺少{!");break;case2:printf("缺少}!");break;case3:printf("缺少标识符!");break;case4:printf("少
6、分号!");break;case5:printf("缺少(!");break;case6:printf("缺少)!");break;case7:printf("缺少操作数!");break;}fclose(fp);return(es);}//<程序>::={<声明序列><语句序列>}//program::={}intprogram(){intes=0;fscanf(fp,"%s%s",token,token1);printf("%
7、s%s",token,token1);if(strcmp(token,"{"))//判断是否'{'{es=1;return(es);}fscanf(fp,"%s%s",&token,&token1);printf("%s%s",token,token1);es=declaration_list();if(es>0)return(es);es=statement_list();if(es>0)return(es);if(strcmp(token,"}"))//判断是否'}'{es=2;return(es);
8、}return(es);}//<声明序列>::=<声明序列><声明语句>
9、<声明语句>//::=//
10、//该成::={}intde
此文档下载收益归作者所有