欢迎来到天天文库
浏览记录
ID:52697674
大小:251.00 KB
页数:19页
时间:2020-03-29
《安徽工业大学编译原理实验报告.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、编译原理实验报告姓名:叶玉虎班级:计122班指导老师:王森玉实验日期:2015/5/11实验内容:1.求出每个非终结符的FIRST集合2.求出每个产生式右部的FIRST集合3.求出每个非终结符的Follow集合实验环境:VisualStudio2010实验目的:让同学们掌握FIRST集合和FOLLOW集合的求法实验代码:#include#include#defineMAX50charcss[MAX][MAX];//保存所有的产生式intcount=0;intcnt=0;structL{//保存所有的终结符charch;intflag;//1:能推出ε
2、,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])
3、
4、(9==a[i])){i++;continue;}if((a[i]>='A')&&(a[i]<='Z')){if((a[i+1]!='-')
5、
6、(a[i+2]!='>')
7、){printf("产生式格式错误");return-1;}else{j=i;k=0;while((a[j]!='')&&(a[j]!=9)&&(a[j]!='$')&&(a[j]!=10)){if(a[j]=='
8、'){css[count][k]=' ';count++;if((a[j+1]=='')
9、
10、(a[j]==9)
11、
12、(a[j]=='$')
13、
14、(a[j]==10)){printf("产生式格式错误");return0;}css[count][0]=a[i];css[count][1]=a[i+1];css[count][2]=a[i+2];k=3;j++;contin
15、ue;}css[count][k]=a[j];k++;j++;}css[count][k]=' ';i=j;count++;}}else{printf("产生式格式错误");return-1;}}return0;}//从键盘获得输入intinput(){chara[MAX*MAX];intv;printf("输入产生式,产生式之间以空格回车或Tab键分隔,并以$键结束.");printf("用@表示虚拟符号ε,终结符用大写字母表示,其他字符表示非终结符");while(1){fgets(a,MAX*MAX,stdin);v=handle(a);if(v==-1)return
16、-1;if(v==2)return0;}}//求出能推出ε的非终结符voidseekEmpty(){inti,j,k,t;intflag=0,flag2=0;intlen,c;chara[MAX][MAX],ch;for(i=0;i17、18、(!flag)){l[cnt19、].ch=a[i][0];l[cnt].flag=-1;l[cnt].num=1;l[cnt].s=0;l[cnt].l=0;cnt++;flag=1;continue;}}c=count;while(c){for(i=0;i20、cnt;j++){if(ch==l[j].ch){l[j].flag=1;break;}}i--;continue;}len=strlen(a[i]);for(j=3;j21、22、(a[i][j]>'Z')){flag2=1;break;}}if(flag2){for(k=0;k
17、
18、(!flag)){l[cnt
19、].ch=a[i][0];l[cnt].flag=-1;l[cnt].num=1;l[cnt].s=0;l[cnt].l=0;cnt++;flag=1;continue;}}c=count;while(c){for(i=0;i20、cnt;j++){if(ch==l[j].ch){l[j].flag=1;break;}}i--;continue;}len=strlen(a[i]);for(j=3;j21、22、(a[i][j]>'Z')){flag2=1;break;}}if(flag2){for(k=0;k
20、cnt;j++){if(ch==l[j].ch){l[j].flag=1;break;}}i--;continue;}len=strlen(a[i]);for(j=3;j21、22、(a[i][j]>'Z')){flag2=1;break;}}if(flag2){for(k=0;k
21、
22、(a[i][j]>'Z')){flag2=1;break;}}if(flag2){for(k=0;k
此文档下载收益归作者所有