编译原理-语法分析器-(java完美运行版)---副本

发布时间 : 星期五 文章编译原理-语法分析器-(java完美运行版)---副本更新完毕开始阅读

{

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中存在空

联系合同范文客服:xxxxx#qq.com(#替换为@)