欢迎来到天天文库
浏览记录
ID:44677980
大小:164.00 KB
页数:13页
时间:2019-10-24
《预测分析算法》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、#include#includc"stdio.h"#include"string.h"typedefstruct{charleftSym;charrightSym[10];intlength;(grammarElement;//文法的结构体intgCount=0;//计数文法的个数grammarElementgramSet[20];〃存放文法的缓存区char*analist[10][10];//分析列表typcdcfstruct{charch[20];charsize;}FI_FO;//firstfollow集合结构体FI_FOfirst[26],follow[26
2、];〃非终结符的first集合,非终结符的fllow集合intflagH[26],flagFO[26];//对应的first.follow集的标志intVnCount=0,VtCount=0;charVNf26];charVT[26J;intFI[26],FO[26];charstack[10];//栈charInput_Str[81]={, ,};〃输入缓冲区iniTop_Of_Stack,Analysised;〃堆栈指针。和分析列指针intLen_Of_Input;//输入字符长度intStep_Of_Ana=0;//分析步骤计数intj,k,x,y,temp;voidinita
3、l();//初始化intinput();//文法的输入voidprint。;//打印出來文法intset();//设置VT,VNintcheck(charch);//终结符返回1intlocation(char*p,chara);〃给定字符查其在VT,VN中的下标voidfirstFollowO”/求first,follow集合voidprintVnVt();//打印终结字符,非终结字符voiddisFirst();//voiddisFollovv();//voidaddchar(FI_FO*p,charch);//在P后追加字符chvoidaddAll(FI_FO*P,FI_FO*D
4、);//D追加字符串到PintfirstSet(chartemp);//求first集合inifollowSel(chartemp);//求follow集合intpreFollow();//预先扫描voidsetTable();//构造分析列表intChar2Int(char);〃返回下标,用于分析表voidPrint_Step();//输出intlocation(char*p,chara)〃给定字符査其在VT,VN中的卜标inti;for(i=0;i<26;i++)if(a==*(p+i))returni;return-1;//没查到intChar2Int(charmark)//返回
5、卜'标,用于分析表{intii;//下标值for(ii=0;ii=VnCount)for(ii=0;ii6、Sr;〃压入开始字符getchar();printfC请输入你要分析的字符串:”);gcts(Input_Str);//输入要检测分析的字符串printf("#%s",Input_Str);printf(n####");printf(nH);Len_Of_Input=strlen(Input_Str);//输入字符串的长度if(Input_Str[Len_Of_I叩u卜1]!=$)//下面是对输入字符串的初步判断,并对错误输入进行处理,{printf("输入没冇终止字符“);Analysised=Len_Of_Input*2;//中止下面的操作t=0;}el7、sefor(i=0;i<(Len_Of_Tnput-l);i++){if(location(VT,Input_Str[i])==-1){printf(“待分析的字符串中含有终结符以外的字符”);Analysised=Len_Of_Input*2;//中止下面的操作break;elset=lif(t==l)printf(“步骤分析栈剩余输入串推导所用产牛式或匹配”);while(Analysised
6、Sr;〃压入开始字符getchar();printfC请输入你要分析的字符串:”);gcts(Input_Str);//输入要检测分析的字符串printf("#%s",Input_Str);printf(n####");printf(nH);Len_Of_Input=strlen(Input_Str);//输入字符串的长度if(Input_Str[Len_Of_I叩u卜1]!=$)//下面是对输入字符串的初步判断,并对错误输入进行处理,{printf("输入没冇终止字符“);Analysised=Len_Of_Input*2;//中止下面的操作t=0;}el
7、sefor(i=0;i<(Len_Of_Tnput-l);i++){if(location(VT,Input_Str[i])==-1){printf(“待分析的字符串中含有终结符以外的字符”);Analysised=Len_Of_Input*2;//中止下面的操作break;elset=lif(t==l)printf(“步骤分析栈剩余输入串推导所用产牛式或匹配”);while(Analysised
此文档下载收益归作者所有