安徽工业大学编译原理实验报告.doc
上传人:王子****青蛙 上传时间:2024-09-14 格式:DOC 页数:19 大小:94KB 金币:10 举报 版权申诉
预览加载中,请您耐心等待几秒...

安徽工业大学编译原理实验报告.doc

安徽工业大学编译原理实验报告.doc

预览

免费试读已结束,剩余 9 页请下载文档后查看

10 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

编译原理实验报告姓名:叶玉虎班级:计122班指导老师:王森玉实验日期:2015/5/11实验内容:1。求出每个非终结符得FIRST集合2、求出每个产生式右部得FIRST集合3。求出每个非终结符得Follow集合实验环境:VisualStudio2010实验目得:ﻩ让同学们掌握FIRST集合与FOLLOW集合得求法实验代码:#include〈stdio、h>#include〈string、h〉#defineMAX50charcss[MAX][MAX];//保存所有得产生式intcount=0;intcnt=0;structL{//保存所有得终结符ﻩcharch;intflag;//1:能推出ε,0:不能,初值:-1intnum;charfirst[MAX];ints;//first得长度ﻩcharfollow[MAX];ﻩintl;//follow得长度}l[MAX];//对输入得格式进行控制,并校验输入就是否符合格式inthandle(chara[]){intlen,i=0,j,k;ﻩlen=strlen(a);while(a[i]!=10)ﻩ{ﻩif(a[i]=='$')ﻩﻩﻩreturn2;if(('’==a[i])||(9==a[i]))ﻩ{ﻩﻩi++;ﻩﻩcontinue;ﻩﻩ}ﻩif((a[i]>='A’)&&(a[i]〈=’Z’)){ﻩﻩﻩif((a[i+1]!=’-')||(a[i+2]!='>'))ﻩﻩ{ﻩﻩﻩprintf(”产生式格式错误\n");ﻩreturn-1;ﻩ}elseﻩﻩ{ﻩﻩj=i;ﻩﻩﻩk=0;ﻩﻩﻩwhile((a[j]!=’')&&(a[j]!=9)&&(a[j]!='$')&&(a[j]!=10))ﻩﻩ{ﻩﻩif(a[j]==’|’)ﻩﻩﻩ{ﻩﻩﻩﻩﻩcss[count][k]='\0’;ﻩﻩﻩcount++;ﻩﻩﻩif((a[j+1]=='’)||(a[j]==9)||(a[j]=='$’)||(a[j]==10))ﻩﻩﻩﻩ{ﻩﻩprintf("产生式格式错误\n");ﻩﻩﻩreturn0;ﻩ}ﻩcss[count][0]=a[i];ﻩﻩﻩﻩcss[count][1]=a[i+1];ﻩﻩcss[count][2]=a[i+2];ﻩﻩﻩﻩk=3;ﻩﻩﻩﻩj++;ﻩﻩﻩcontinue;ﻩﻩﻩﻩ}ﻩﻩﻩcss[count][k]=a[j];ﻩﻩﻩk++;ﻩﻩj++;ﻩ}ﻩﻩcss[count][k]=’\0';ﻩﻩﻩi=j;ﻩﻩcount++;ﻩﻩ}ﻩ}ﻩﻩelseﻩ{ﻩﻩﻩprintf("产生式格式错误\n");ﻩﻩﻩreturn-1;ﻩ}ﻩ}ﻩreturn0;}//从键盘获得输入intinput(){chara[MAX*MAX];ﻩintv;printf("输入产生式,产生式之间以空格回车或Tab键分隔,并以$键结束。\n");printf(”用表示虚拟符号ε,终结符用大写字母表示,其她字符表示非终结符\n”);ﻩwhile(1){ﻩfgets(a,MAX*MAX,stdin);ﻩﻩv=handle(a);ﻩif(v==-1)ﻩﻩﻩreturn—1;ﻩif(v==2)ﻩﻩreturn0;ﻩ}}//求出能推出ε得非终结符voidseekEmpty(){ﻩinti,j,k,t;ﻩintflag=0,flag2=0;ﻩintlen,c;chara[MAX][MAX],ch;for(i=0;i〈count;i++)ﻩ{ﻩstrcpy(a[i],css[i]);ﻩ}//求出含有得非终结符得个数,并把各终结符保存起来ﻩfor(i=0;i〈count;i++)ﻩ{ﻩﻩfor(j=0;j<cnt;j++){if(l[j]、ch==a[i][0])ﻩ{ﻩﻩl[j]、num++;ﻩﻩﻩﻩflag=1;ﻩﻩﻩbreak;ﻩﻩﻩ}ﻩelseﻩﻩﻩﻩflag=0;ﻩﻩ}ﻩif((!cnt)||(!flag))ﻩﻩ{ﻩl[cnt].ch=a[i][0];ﻩl[cnt]、flag=-1;l[cnt].num=1;ﻩl[cnt]。s=0;ﻩﻩl[cnt]、l=0;cnt++;ﻩ