if(zhongjie(st[i][m+2])) {
first[i][n]=st[i][m+2]; n++; }
if(st[i][m+1]!=c) {
} } }
firstvt(st[i][m+1]); for(j=0; j if(st[j][0]==st[i][m+1]) break; } for(k=0; k for(t=0; t if(first[i][t]==first[j][k+1]) break; } if(t==n) { first[i][n]=first[j][k+1]; n++; } } m++; } while(st[i][m]!='\\0'); first[i][n]='\\0'; first[i][0]=--n; fflag[i]=1; } } void lastvt(char c) //求LASTVT集 { int i,j,k,m,n; for(i=0; i if(st[i][0]==c) break; } if(lflag[i]==0) { n=last[i][0]+1; m=0; do { if(st[i][m+1]=='\\0'||st[i][m+1]=='|') { if(zhongjie(st[i][m])) { last[i][n]=st[i][m]; n++; } else { if(zhongjie(st[i][m-1])) { last[i][n]=st[i][m-1]; n++; } if(st[i][m]!=c) { lastvt(st[i][m]); for(j=0; j if(st[j][0]==st[i][m]) break; } for(k=0; k for(t=0; t if(last[i][t]==last[j][k+1]) break; } if(t==n) { last[i][n]=last[j][k+1]; n++; } } } } } m++; } while(st[i][m]!='\\0'); last[i][n]='\\0'; last[i][0]=--n; lflag[i]=1; } } int deal() { int i,j; int x,y; int z; k=1; s[k]='#'; for(i=0; input[i]!='\\0'; i++); z=i--; i=0; while((a=input[i])!='\\0') { if(zhongjie(s[k])) j=k; else j=k-1; x=xiabiao(s[j]); y=xiabiao(a); if(data[x][y]=='>') //输入串的长度 //栈置初值 //计算输入串的长度 { out(1,k,s); printf(\ out(i+1,z,input); printf(\规约\\n\ do { q=s[j]; if(zhongjie(s[j-1])) j=j-1; else j=j-2; x=xiabiao(s[j]); y=xiabiao(q); } while(data[x][y]!='<'); int m,n,N; for(m=j+1; m<=k; m++) { for(N=0; N for(n=1; string[N][n]!='\\0'; n++) { if(!zhongjie(s[m])&&!zhongjie(string[N][n])) { if(zhongjie(s[m+1])&&zhongjie(string[N][n+1]) &&s[m+1]==string[N][n+1]) { s[j+1]=string[N][0]; break; } }