欢迎来到天天文库
浏览记录
ID:57178868
大小:82.50 KB
页数:9页
时间:2020-08-05
《C语言求文法的First集.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、C语言求文法的FIRST集//Copyright:ChenZexi,JXNU#include#include#include#defineMAXS50#defineepsilon'*'charnoend[MAXS];//非终极符charEnd[MAXS];//终极符intN;structSTR{inthas_epsion;charleft;charright[MAXS];};structFirst{charletter;chargather[MAXS];};intg
2、etlr(structSTR*p,inti,char*temp){intj;intk=0;intsucc=0;for(j=0;j'){succ=1;if(j==1){p[i].left=temp[0];j=3;p[i].has_epsion=0;while(temp[j]!=' '){p[i].right[k]=temp[j];if(temp[j]==epsilon){p[i].has_epsion=1;}k++;j++;}
3、p[i].right[k]=' ';}}}returnsucc;}intfindchar(char*s,charc){inti;intindex=-1;for(i=0;i4、N(终极符)和VT(非终极符)voidVNVT(structSTR*p){inti,j,x;for(i=0;i='A'&&p[i].left<='Z')){if(findchar(noend,p[i].left)<0){x=strlen(noend);noend[x]=p[i].left;noend[x+1]=' ';}}}for(j=0;j='A'&&p[5、i].right[j]<='Z')){if(findchar(End,p[i].right[j])<0){x=strlen(End);End[x]=p[i].right[j];End[x+1]=' ';}}else{if(findchar(noend,p[i].right[j])<0){x=strlen(noend);noend[x]=p[i].right[j];noend[x+1]=' ';}}}}}//非终极符的FIRST集voidFirstgather(structSTR*p,structFirst*f){int6、i,j,k,l,m;intx,n;intchange=1;inteps;for(i=0;i7、j].right[0]);//不是非终极符if(n<0){k=0;//直接收取:对形如U->a…的产生式(其中a是终结符),把a收入到First(U)中if(findchar(f[i].gather,p[j].right[k])<0){x=strlen(f[i].gather);f[i].gather[x]=p[j].right[k];f[i].gather[x+1]=' ';change=1;}}//是非终极符else{//反复传送:对形入U->P…的产生式(其中P是非终结符),应把First(P)中的全部内容传送到F8、irst(U)中for(l=0;l=0&&findchar(f[i].gather,p[j].right[l])<0){x=strlen(f[i].gather);f[i].ga
4、N(终极符)和VT(非终极符)voidVNVT(structSTR*p){inti,j,x;for(i=0;i='A'&&p[i].left<='Z')){if(findchar(noend,p[i].left)<0){x=strlen(noend);noend[x]=p[i].left;noend[x+1]=' ';}}}for(j=0;j='A'&&p[
5、i].right[j]<='Z')){if(findchar(End,p[i].right[j])<0){x=strlen(End);End[x]=p[i].right[j];End[x+1]=' ';}}else{if(findchar(noend,p[i].right[j])<0){x=strlen(noend);noend[x]=p[i].right[j];noend[x+1]=' ';}}}}}//非终极符的FIRST集voidFirstgather(structSTR*p,structFirst*f){int
6、i,j,k,l,m;intx,n;intchange=1;inteps;for(i=0;i7、j].right[0]);//不是非终极符if(n<0){k=0;//直接收取:对形如U->a…的产生式(其中a是终结符),把a收入到First(U)中if(findchar(f[i].gather,p[j].right[k])<0){x=strlen(f[i].gather);f[i].gather[x]=p[j].right[k];f[i].gather[x+1]=' ';change=1;}}//是非终极符else{//反复传送:对形入U->P…的产生式(其中P是非终结符),应把First(P)中的全部内容传送到F8、irst(U)中for(l=0;l=0&&findchar(f[i].gather,p[j].right[l])<0){x=strlen(f[i].gather);f[i].ga
7、j].right[0]);//不是非终极符if(n<0){k=0;//直接收取:对形如U->a…的产生式(其中a是终结符),把a收入到First(U)中if(findchar(f[i].gather,p[j].right[k])<0){x=strlen(f[i].gather);f[i].gather[x]=p[j].right[k];f[i].gather[x+1]=' ';change=1;}}//是非终极符else{//反复传送:对形入U->P…的产生式(其中P是非终结符),应把First(P)中的全部内容传送到F
8、irst(U)中for(l=0;l=0&&findchar(f[i].gather,p[j].right[l])<0){x=strlen(f[i].gather);f[i].ga
此文档下载收益归作者所有