欢迎来到天天文库
浏览记录
ID:20475506
大小:276.78 KB
页数:21页
时间:2018-10-12
《安徽工业大学编译原理实验报告》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、编译原理实验报告姓名:叶玉虎班级:计122班指导老师:王森玉实验日期:2015/5/11实验内容:1.求出每个非终结符的FIRST集合2.求出每个产生式石部的FIRST集合3.求出每个非终结符的Follow集合实验环境:VisualStudio2010实验目的:让同学们掌握FIRST集合和FOLLOW集合的求法实验代码:#include#include2、intflag;//l:能推出e,0:不能,初值:-lintnum;charfirst[MAX];ints;//first的长度charfollow[MAX];intl;//follow的长度}1[MAX];//对输入的格式进行控制,并校验输入是否符合格式inthandle(chara[]){intlen,i=O,j,k;len=strlen(a);while(a[i]!=10){if(a[i]==,$,)return2;if(C*==a[i])3、4、(9==a[i]))i++;continue;if((a[i]>=,Al)&&(a[i]<=,Z,)){if5、((a[i+l]!=’-’)6、7、(a[i+2]!=’〉’)){printf("产生式格式错误">;return-1;}else參參J=l;k=0;while((a[j]!=’,)&&(aU]!=9)&&(a[j]!=,$,)&&(a8、j]!=10)){if(aD]==T){css[count][k]=’ ’;count++;if((a[j+l]=’’)9、10、(a[j]==9)11、12、(a[j]==T)13、14、(a[j]=10)){printf("产生式格式错误");return0;}css[count][0]=a[i];css[count][1]=a[i+15、l];css[count][2]=a[i+2];k=3;j++;continue;css[count][k]=a[j];k++;j++;}css[count][k]=’ ’;•參FJ;count++;}}else{printf("产生式格式错误return-1;return0;}//从键盘获得输入intinput(){chara[MAX*MAX];intv;printf("输入产生式,产生式之间以空格In]车或Tab键分隔,并以$键结束An");printf(”用@表示虚拟符号e,终结符用大写字母表示,其他字符表示非终结符”);while(l){fg16、ets(a,MAX*MAX,stdin);v=handle(a);if(v=-l)return-1;if(v==2)return0;}}//求出能推出e的非终结符voidseekEmpty(){inti,j,k,t;intflag=0,flag2=0;intlen,c;chara[MAX][MAX],ch;for(i=0;i17、j].ch=a[i][O])18、l[j].num++;flag=l;break;elseflag=O;}if((!cnt)19、20、(!flag)){l[cnt].ch=a[i][O];l[cnt].flag=-l;l[cnt].num=l;l[cnt].s=O;l[cnt].l=O;cnt++;flag=l;continue;}}c=count;while(c){for(i=0;i21、{for(k=j;k22、八’)23、24、邮朋〉幻){flag2=l;break;}}if(flag2){for(k=0;k25、um==0)l[k].flag=0;break;}}if(i!=c
2、intflag;//l:能推出e,0:不能,初值:-lintnum;charfirst[MAX];ints;//first的长度charfollow[MAX];intl;//follow的长度}1[MAX];//对输入的格式进行控制,并校验输入是否符合格式inthandle(chara[]){intlen,i=O,j,k;len=strlen(a);while(a[i]!=10){if(a[i]==,$,)return2;if(C*==a[i])
3、
4、(9==a[i]))i++;continue;if((a[i]>=,Al)&&(a[i]<=,Z,)){if
5、((a[i+l]!=’-’)
6、
7、(a[i+2]!=’〉’)){printf("产生式格式错误">;return-1;}else參參J=l;k=0;while((a[j]!=’,)&&(aU]!=9)&&(a[j]!=,$,)&&(a
8、j]!=10)){if(aD]==T){css[count][k]=’ ’;count++;if((a[j+l]=’’)
9、
10、(a[j]==9)
11、
12、(a[j]==T)
13、
14、(a[j]=10)){printf("产生式格式错误");return0;}css[count][0]=a[i];css[count][1]=a[i+
15、l];css[count][2]=a[i+2];k=3;j++;continue;css[count][k]=a[j];k++;j++;}css[count][k]=’ ’;•參FJ;count++;}}else{printf("产生式格式错误return-1;return0;}//从键盘获得输入intinput(){chara[MAX*MAX];intv;printf("输入产生式,产生式之间以空格In]车或Tab键分隔,并以$键结束An");printf(”用@表示虚拟符号e,终结符用大写字母表示,其他字符表示非终结符”);while(l){fg
16、ets(a,MAX*MAX,stdin);v=handle(a);if(v=-l)return-1;if(v==2)return0;}}//求出能推出e的非终结符voidseekEmpty(){inti,j,k,t;intflag=0,flag2=0;intlen,c;chara[MAX][MAX],ch;for(i=0;i17、j].ch=a[i][O])18、l[j].num++;flag=l;break;elseflag=O;}if((!cnt)19、20、(!flag)){l[cnt].ch=a[i][O];l[cnt].flag=-l;l[cnt].num=l;l[cnt].s=O;l[cnt].l=O;cnt++;flag=l;continue;}}c=count;while(c){for(i=0;i21、{for(k=j;k22、八’)23、24、邮朋〉幻){flag2=l;break;}}if(flag2){for(k=0;k25、um==0)l[k].flag=0;break;}}if(i!=c
17、j].ch=a[i][O])
18、l[j].num++;flag=l;break;elseflag=O;}if((!cnt)
19、
20、(!flag)){l[cnt].ch=a[i][O];l[cnt].flag=-l;l[cnt].num=l;l[cnt].s=O;l[cnt].l=O;cnt++;flag=l;continue;}}c=count;while(c){for(i=0;i21、{for(k=j;k22、八’)23、24、邮朋〉幻){flag2=l;break;}}if(flag2){for(k=0;k25、um==0)l[k].flag=0;break;}}if(i!=c
21、{for(k=j;k22、八’)23、24、邮朋〉幻){flag2=l;break;}}if(flag2){for(k=0;k25、um==0)l[k].flag=0;break;}}if(i!=c
22、八’)
23、
24、邮朋〉幻){flag2=l;break;}}if(flag2){for(k=0;k25、um==0)l[k].flag=0;break;}}if(i!=c
25、um==0)l[k].flag=0;break;}}if(i!=c
此文档下载收益归作者所有