end.clear(); // begin,end convertSet清空 begin.add('A'); // 初态固定为A for(int j=0;j Object obx=i.get(j); ArrayList alx=(ArrayList)obx; Object obx0=i0.get(j); ArrayList alx0=(ArrayList)obx0; Object obx1=i1.get(j); ArrayList alx1=(ArrayList)obx1; Iterator endIt=endTemp.iterator(); while(endIt.hasNext()) // 判断是否是新的终态集的元素,若是加入end { Object endItem=endIt.next(); if(alx.contains(endItem)) end.add(String.valueOf((char)('A'+j))); } ArrayList alk=new ArrayList(); alk.add(\ if(!obx0.equals(alk)) { convertSet.add(new NfaNode(String.valueOf((char)('A'+j)),String.valueOf(charList.get(0)),String.valueOf((char)('A'+i.indexOf(obx0))))); } if(!obx1.equals(alk)) { convertSet.add(new NfaNode(String.valueOf((char)('A'+j)),String.valueOf(charList.get(1)),String.valueOf((char)('A'+i.indexOf(obx1))))); } } } private ArrayList convertSet; // 分别保存状态变换的类集 private ArrayList begin; // 分别保存开始状态集 private ArrayList end; // 分别保存终止状态集 private ArrayList charList; // 字母表 } public class NfaDemo // NFA测试 { public static void main(String args[]) throws IOException { char e; ArrayList beginOb=new ArrayList(); // beginOb保存初态 ArrayList charListOb=new ArrayList(); // charListOb保存字母表 int convertNum; // convertNum保变迁函数中变迁次数 ArrayList endOb=new ArrayList(); // 保存终态集 ArrayList convertOb=new ArrayList(); System.out.println(\请输入 NFA(Q,Σ,δ,q,F)的情况:\保存变迁 BufferedReader br1= new BufferedReader(new InputStreamReader(System.in)); System.out.print(\初态集q=\ beginOb.add(String.valueOf((char)br1.read())); System.out.print(\终态集(格式如:E#或EF#)F=\ BufferedReader br2= new BufferedReader(new InputStreamReader(System.in)); do { e=(char)br2.read(); // 先把char类型转化为Sring类型 endOb.add(String.valueOf(e)); // e加入到终态集的类集中 }while(e!='#'); endOb.remove(\删除# System.out.print(\请输入字母表(格式如:01#)Σ=\ BufferedReader br3= new BufferedReader(new InputStreamReader(System.in)); charListOb.add(String.valueOf((char)br3.read())); charListOb.add(String.valueOf((char)br3.read())); System.out.print(\请输入变迁函数中变迁次数:\ BufferedReader br4= new BufferedReader(new InputStreamReader(System.in)); convertNum=Integer.parseInt(br4.readLine()); // 把从键盘输入的String类型转化为int类型 System.out.println(\请输入变换规则δ(格式如:A0B或AaB):\for(int i=0;i String m,n,p; BufferedReader br5=new BufferedReader(new InputStreamReader(System.in)); m=String.valueOf((char)br5.read()); n=String.valueOf((char)br5.read()); p=String.valueOf((char)br5.read()); convertOb.add(new NfaNode(m,n,p)); } // 把输入的转变等信息存入类集convertOb中 Nfa nfa1=new Nfa(convertOb,beginOb,endOb,charListOb); System.out.println(\原来的NFA如下:\ nfa1.display(); // 显示NFA nfa1.nfaToDfa(); // NF转为DFA System.out.println(\转换后的DFA如下:\ nfa1.display(); // 显示DFA } }
用Java语言实现NFA到DFA的等价变换-桂日培(2)
2019-06-11 19:47
用Java语言实现NFA到DFA的等价变换-桂日培(2).doc
将本文的Word文档下载到电脑
下载失败或者文档不完整,请联系客服人员解决!