{
break; } }
else//错误 {
t3.setText(\文法输入有误\+\); return -1; } } } } }
return flag; }
private int tianjiaFollow(char a[],String
b,String
followVn[],int flag) //计算FOLLOW**(递归) {
if(puanduanString(followVn,b.charAt(0))){addString(followVn,b);} else {
return flag; }
if(b.equals(\))//当为S时#存入follow {
a[flag]='#'; flag++; }
for(int i=0;i
String t=(String)P.elementAt(i); for(int j=2;j if(t.charAt(j)==b.charAt(0)&&j+1 if(t.charAt(j+1)!='\\0') { if((t.charAt(j+1)>'Z'||t.charAt(j+1)<'A'))//所求为终结符 { if(flag==0||puanduanChar(a,t.charAt(2)))//自身 { a[flag]=t.charAt(j+1); flag++; } } else//所求为非终结符 { int k; for(k=0;Vn[k]!=null;k++) { if(Vn[k].equals(String.valueOf(t.charAt(j+1)))) { break;//找寻下一个非终结符的Vn位置 } } flag=addElementFirst(a,k,flag);//把下一个非终结符first加入所求follow集 for(k=j+1;k if((t.charAt(j+1)>'Z'||t.charAt(j+1)<'A'))break; else { if(panduan_kong(t.charAt(k))) {} else { break; } } } if(k>=t.length())//下一个非终结符可推出空,把表达式左边非终结符的follow集加入所求follow集 { int p=followComplete(t.charAt(0)); if(p!=-1) { flag=addElementFollow(a,p,flag); } else if((flag=tianjiaFollow(a,String.valueOf(t.charAt(0)),followVn,flag))==-1) return -1; } } } else//错误 { t3.setText(\文法输入有误,请重新输入\+\); return -1; } } if(t.charAt(j)==b.charAt(0)&&j+1==t.length())//下一个字符为空,把表达式左边非终结符的follow集加入所求follow集 { int p=followComplete(t.charAt(0)); if(p!=-1) { flag=addElementFollow(a,p,flag); } else if((flag=tianjiaFollow(a,String.valueOf(t.charAt(0)),followVn,flag))==-1) return -1; } } } return flag; } private void tianjiaSelect(char a[],String b,int flag) //计算SELECT** { int i=2; int biaozhi=0; while(i if((b.charAt(i)>'Z'||b.charAt(i)<'A')&&b.charAt(i)!='#')//是终结符 { a[flag]=b.charAt(i);//将这个字符加入到Select**,结束Select**的计算 break; } else if(b.charAt(i)=='#')//是空 { int j; for(j=0;Vn[i]!=null;j++)//将表达式左侧的非终结符的follow加入select { if(Vn[j].equals(b.substring(0,1))) { break; } } for(int k=0;follow[j][k]!='\\0';k++) { if(puanduanChar(a,follow[j][k])) { a[flag]=follow[j][k]; flag++; } } break; } else if(b.charAt(i)>='A'&&b.charAt(i)<='Z'&&i+1 int j; for(j=0;Vn[i]!=null;j++) { if(Vn[j].equals(String.valueOf(b.charAt(i)))) { break; } } for(int k=0;first[j][k]!='\\0';k++) { if(puanduanChar(a,first[j][k]))//把表达式右侧所有非终结符的first集加入。 { if(first[j][k]=='#')//first中存在空
相关推荐: