您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 机械/模具设计 > 从正规文法构造有穷状态自动机
课程名称:从正规文法构造有穷状态自动机年级/专业/班:11级计算机类(二)班姓名:徐勇兵学号:E01114278从正规文法构造有穷状态自动机输入:任意的正规文法输出:相应的有穷状态自动机要求:识别有穷状态自动机是确定的还是非确定的,生成相应的五元组形式。说明:应检查输入的是否正规文法。实验截图:测试一:测试二:***************************************************************************测试三:importjava.util.Vector;importjavax.swing.JOptionPane;classTools{publicVectorStringprotection(VectorStringvs){VectorStringnewvector=newVectorString();for(inti=0;ivs.size();i++)newvector.add(vs.get(i));returnnewvector;}publicVectorVectorStringdoubleprotection(VectorVectorStringvs){VectorVectorStringnewvector=newVectorVectorString();for(inti=0;ivs.size();i++){VectorStringproduce=(VectorString)vs.get(i);VectorStringtemp=newVectorString();for(intj=0;jproduce.size();j++){temp.add((String)produce.get(j));}//forjnewvector.add(temp);}//forireturnnewvector;}publicVectorStringaddElements(VectorStringvs,VectorStringtemp){for(inti=0;itemp.size();i++){//if(!vs.contains(temp.get(i)))vs.add(temp.get(i));}//forreturnvs;}//publicVectorStringaddElements(VectorStringvs,VectorStringtemp){}//classtoolsclassElements{VectorStringend=newVectorString();//表示终结符VectorStringnoend=newVectorString();//表示非终结符VectorVectorStringproduce=newVectorVectorString();//产生式publicvoidsetend(){//终结符元素添加while(true){Strings=JOptionPane.showInputDialog(null,请输入终结符);if(s==null){return;}//ifend.add(s);}//while}//publicvoidaddend(){//元素添加publicvoidsetnoend(){//非终结符元素添加while(true){Strings=JOptionPane.showInputDialog(null,非请输入终结符);if(s==null){return;}//ifnoend.add(s);}//while}//publicvoidaddnoend(){//publicvoidsetproduce(){while(true){Strings=JOptionPane.showInputDialog(null,请输入产生式,-隔开);if(s==null)return;VectorStringtemp=newVectorString();temp.add(s.split(-)[0]);temp.add(s.split(-)[1]);produce.add(temp);}//while}//publicvoidaddproduce()publicVectorStringgetend(){returnend;}publicVectorStringgetnoend(){returnnoend;}publicVectorVectorStringgetproduce(){returnthis.produce;}publicvoidrun(){/*************************TEST********************************/end.add(a);end.add(b);noend.add(S);noend.add(A);noend.add(B);VectorStringtemp=newVectorString();temp.add(S);temp.add(aA);produce.add(temp);/*************************/VectorStringtemp1=newVectorString();temp1.add(S);temp1.add(bB);produce.add(temp1);/*************************/VectorStringtemp2=newVectorString();temp2.add(S);temp2.add(e);produce.add(temp2);/*************************/VectorStringtemp3=newVectorString();temp3.add(A);temp3.add(aB);produce.add(temp3);/*************************/VectorStringtemp4=newVectorString();temp4.add(A);temp4.add(bA);produce.add(temp4);/*************************/VectorStringtemp5=newVectorString();temp5.add(B);temp5.add(aS);produce.add(temp5);/*************************/VectorStringtemp6=newVectorString();temp6.add(B);temp6.add(bA);produce.add(temp6);/*************************/VectorStringtemp7=newVectorString();temp7.add(B);temp7.add(e);produce.add(temp7);/*************************/VectorStringtemp8=newVectorString();temp8.add(S);temp8.add(aB);produce.add(temp8);/*VectorStringtemp9=newVectorString();temp9.add(S);temp9.add(aAA);produce.add(temp9);*///System.out.println(produce.size()=+produce.size());/***********************TEST**********************************///this.setend();//this.setnoend();//this.setproduce();}publicbooleanIscontainend(Strings)//正则表达式判断s1是否在END的闭包里面正则忘了怎么写了{intlength=s.length();for(inti=0;ilength;i++){Stringa=+s.charAt(i);if(end.contains(a))continue;elsereturnfalse;}//forreturntrue;}//publicbooleanisRGPcontain(Strings)publicbooleanIsNoENd(Strings){Stringss=+s.charAt(0);if(!Iscontainend(ss))//如果不含有终结符,则为非终结符returntrue;returnfalse;}//publicbooleanpublicvoidshow(){System.out.print(终结符输出如下:);for(inti=0;iend.size();i++){System.out.print((String)end.get(i)+,);}System.out.println();System.out.print(非终结符输出如下:);for(inti=0;inoend.size();i++){System.out.print((String)noend.get(i)+,);}System.out.println();System.out.print(产生式输出如下:);for(inti=0;iproduce.size();i++){System.out.println();VectorStringtemp=(VectorString)produce.get(i);System.out.print((String)temp.get(0)+-+(String)temp.get(1));}System.out.println();}}//classElementspublicclassTest{Elementselements;Toolstools=newTools();VectorStringend=newVectorString();//表示终结符VectorStringnoend=newVectorString();//表示非终结符VectorStringinputTable=newVectorString();//表示输入符号的集合即又穷字母表VectorStringstatusTable=newVectorString();//状态表VectorVectorStringproduce=newVectorVectorString();//产生式VectorVectorStringnewproduce=newVectorVectorString();//转换函数Stringstart=S;//初态Stringlast=Z;//终态publicvoidfirststep(){if(elements.Iscontainend(aA)==true)System.out.println(yes);for(inti=0;iproduce.size();i++){VectorStringtemp=produce.get(i);Stringleft=temp.get(0);Stringright=temp.get(1);if(right.length()!=1){//S-aA形式Stringone=+right.charAt(0);Stringtwo=+right.charAt(1);VectorStringtemp1=newVectorString();temp1.add(left);temp1.add(one);temp1.add(two);newproduce.add(t
本文标题:从正规文法构造有穷状态自动机
链接地址:https://www.777doc.com/doc-4399699 .html