void edge::newfollow(string w) { int i;
for(i=0;i if(follow.find(w[i])>follow.length()&&w[i]!='*') follow+=w[i]; } void edge::newselect(string w) { int i; for(i=0;i if(select.find(w[i])>select.length()&&w[i]!='*') select+=w[i]; } void edge::delfirst() { int i=first.find('*'); first.erase(i,1); } //LL1.cpp #include int SUM; string NODE,ENODE; //计算first void first(edge ni,edge *n,int x) { int i,j; for(j=0;j if(ni.getlf()==n[j].getlf()) { if(NODE.find(n[j].getro()) for(i=0;i if(n[i].getlf()==n[j].getro()) first(n[i],n,x); } else n[x].newfirst(n[j].getro()); } } } //计算follow void follow(edge ni,edge *n,int x) { int i,j,k,s; string str; for(i=0;i s=NODE.find(ni.getrg()[i]); if(s if(n[j].getlf().find(ni.getrg()[i])==0) { if(NODE.find(ni.getrg()[i+1]) for(k=0;k if(n[k].getlf().find(ni.getrg()[i+1])==0) { n[j].newfollow(n[k].getfirst()); if(n[k].getfirst().find(\ n[j].newfollow(ni.getfollow()); } } else { str.erase(); str+=ni.getrg()[i+1]; n[j].newfollow(str); } } } } //计算select void select(edge &ni,edge *n) { int i,j; if(ENODE.find(ni.getro()) ni.newselect(ni.getro()); if(ni.getro()==\ ni.newselect(ni.getfollow()); } else for(i=0;i if(ni.getrg()[i]==n[j].getlf()[0]) { ni.newselect(n[j].getfirst()); if(n[j].getfirst().find('*')>n[j].getfirst().length()) return; } } //输出集合 void out(string p) { int i; if(p.length()==0) return; cout<<\ for(i=0;i cout< cout< //连续输出符号 void outfu(int a,string c) { int i; for(i=0;i //输出预测分析表 void outgraph(edge *n,string (*yc)[50]) { int i,j,k; bool flag; for(i=0;i if(ENODE[i]!='*') { outfu(10,\ cout< outfu(10,\cout<<\int x; for(i=0;i outfu(4,\ cout< for(k=0;k flag=1; for(j=0;j if(NODE[i]==n[j].getlf()[0]) { x=n[j].getselect().find(ENODE[k]); if(x cout<<\ yc[i][k]=n[j].getrg(); outfu(9-n[j].getrlen(),\ flag=0; } x=n[j].getselect().find('#'); if(k==ENODE.length()-1&&x cout<<\ yc[i][j]=n[j].getrg(); } } } if(flag&&ENODE[k]!='*') outfu(11,\ } cout< //分析符号串 int pipei(string &chuan,string &fenxi,string (*yc)[50],int &b) { char ch,a; int x,i,j,k; b++; cout< outfu(8,\else outfu(9,\cout< outfu(26-chuan.length()-fenxi.length(),\cout< ch=fenxi[fenxi.length()-1]; x=ENODE.find(ch); if(x if(ch==a) { fenxi.erase(fenxi.length()-1,1); chuan.erase(0,1); cout<<\匹配\ if(pipei(chuan,fenxi,yc,b)) return 1; else return 0; } else return 0; } else { if(ch=='#') { 百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库LL(1)预测分析法实验报告(2)在线全文阅读。
相关推荐: