编译原理课程设计 LL(1)文法分析器(4)

2020-06-21 15:30

}

}

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<<\


编译原理课程设计 LL(1)文法分析器(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:采掘电钳工新版安全规程

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: