public AutomataD createAutomata(string s) { InfixToPostfix ix = new InfixToPostfix(s); ArbolSin ar = new ArbolSin(s); Converter con = new Converter(); return(con.DirectAFD(ar)); }
public AutomataD DirectAFD(ArbolSin a) { DStates d = new DStates(); List <Nodo> temp = new List <Nodo>(); EstadoD e; AutomataD b = new AutomataD(); d.Add(new EstadoD(a.getRaiz().getFPos())); b.setInicio(d[0]); b.setAlfa(a.getAlfa()); d.setNMarcado(); while (d.getNMarcado() != null) { d.marcar(); b.addContEstados(d.getNMarcado()); foreach (var i in b.getAlfa()) { temp = a.getFollowPos(d.getNMarcado().getNodosD(), i); e = new EstadoD(temp); if (!d.contieneN(e)) { d.Add(e); if (e.cotieneN(a.getFin())) { b.addFin(e); } d.getNMarcado().agregarTransicion(e, i); } else { d.getNMarcado().agregarTransicion(d.Find(t => t.getNodosD().All(e.getNodosD().Contains) && e.getNodosD().All(t.getNodosD().Contains)), i); } } d.setNMarcado(); } return(b); }