}
}
a[++t]='#'; a[0]++;
for(i=0;i for(j=2;j<=g[i][0];j++) { if(g[i][j]==ch) { for(m=j;m<=g[i][0];m++) { if(m==g[i][0]) { } else { if(!search(vn,g[i][m+1]))//当此非终结符后面的字符为终结字符时,放入对if(g[i][1]!=ch) fellowzh(a,g[i][1]);//发现要求的非终结符在此产生式的末尾时 break; else 应的fellow集合 { } else { k=search(vn,g[i][m+1]);//把此非终结符后面的非终结符的first集合中if(!search(a,g[i][m+1])) { } break; a[++t]=g[i][m+1]; a[0]++; 的元素放入对应的fellow集合 } 16 for(n=1;n<=first[k-1][0];n++) { } if(!search(emptychar,g[i][m+1]))break; if(!search(a,first[k-1][n])) { } a[++t]=first[k-1][n]; a[0]++; } } } } } } void grammer::prepareform() { int i,j; buildemptychar(); buildfirst(); buildfellow(); for(i=0;i } } for(i=0;i cout< } void grammer::buildform() { int i,j,k,t,m,n; bool flag; form=new int*[vn[0]]; for(i=0;i form[i]=new int[vt[0]]; for(i=0;i } } 17 for(i=0;i t=search(vn,g[i][1]); flag=true; for(j=2;j<=g[i][0];j++) { k=search(vt,g[i][j]);//若发现这个产生式的first集合中的对应的终结符时 if(k) { if(g[i][j]!='@') { } else//若发现对应产生式中的first集合中含有空字符时 { for(m=1;m<=fellow[t-1][0];m++) { } 18 if(fellow[t-1][m]!='#')//可把对应的非终结符的fellow集合中的元素对应的{ } else { if(form[t-1][k-1]!=-1) { n=search(vt,fellow[t-1][m]); if(form[t-1][n-1]!=-1) { } form[t-1][n-1]=i; cout<<\有终结符@本fellow集合中非#错误!\exit(1); if(form[t-1][k-1]!=-1) { } form[t-1][k-1]=i; flag=false; break; cout<<\本终结符错误!\exit(1); 表项中填入该产生式的标号 cout<<\有终结符@本fellow集合中#错误!\ exit(1); } } form[t-1][k-1]=i; } } } flag=false; break; else//找到该产生式中的非终结符时 { } k=search(vn,g[i][j]); for(m=1;m<=first[k-1][0];m++) { } if(!search(first[k-1],'@'))//若在此终结符对应的first集合中无空字符时 { } flag=false; break; if(first[k-1][m]!='@') { } else { } n=search(vt,first[k-1][m]); if(form[t-1][n-1]!=-1) { cout<<\本first集合中非@!\ exit(1); } form[t-1][n-1]=i; if(flag==true)//说明该产生式对应的first集合中含有空字符 { for(m=1;m<=fellow[t-1][0];m++) { if(fellow[t-1][m]!='#') { } else 19 n=search(vt,fellow[t-1][m]); if(form[t-1][n-1]!=-1) { } form[t-1][n-1]=i; cout<<\本fellow集合中非#错误!\exit(1); } } } } { } n=search(vt,'@'); if(form[t-1][n-1]!=-1) { } form[t-1][n-1]=i; cout<<\本fellow集合中#错误!\exit(1); printform(); void grammer::outputblank(int i) { } void grammer::printform() { } cout< for(i=0;i cout<<\outputblank(4); for(j=0;j 20 int i,j,k,t,m; cout<<\预测分析表如下所示------------------------------\outputblank(6); for(i=1;i<=vt[0];i++) { if(vt[i]=='@') { } else { } cout< int j; for(j=0;j cout<<\ 百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库编译原理课程设计 LL(1)文法分析器(4)在线全文阅读。
相关推荐: