public void obtenerTerminales() { //transicion t = new transicion(""+this.inicio.getId(), this.inicio); transicion t = new transicion("" + contadorEstados, this.inicio); contadorEstados++; transiciones.Add(t); obT(this.inicio); terminales = terminales.OrderBy(o => o.getValorTransicion()).ToList(); Console.WriteLine("recorrido"); foreach (nodoThompson n in terminales) { Console.WriteLine(n.getValorTransicion()); } foreach (transicion tran in transiciones) { noCerradura = new List <int>(); transicionActual = tran; obtenerCerradura(tran.getNodo()); /*Console.WriteLine("Transiciones"); * /*************************** * Console.WriteLine(tran.getNodo().getId()); * /***************************/ /* Console.WriteLine("nodos que alcanza"); * foreach (int i in transicionActual.getNodosAlcanza()) * { * Console.WriteLine(i); * } * * Console.WriteLine("terminales que alcanza"); * foreach (nodoThompson j in transicionActual.getTerminalesAlcanza()) * { * Console.WriteLine(j.getValorTransicion() + " " + j.getArriba().getId()); * }*/ } foreach (transicion tran in transiciones) { bool control = true; foreach (nodoThompson k in noAgregar) { if (tran.getNodo() == k) { control = false; } } if (control == true) { nuevasTransiciones.Add(tran); foreach (transicion tranTemporal in transiciones) { if (!(tranTemporal == tran)) { List <int> nodosQueAlcanzaActual = tran.getNodosAlcanza(); List <int> nodosQueAlcanzaTemporal = tranTemporal.getNodosAlcanza(); List <int> diferencias = nodosQueAlcanzaActual.Except(nodosQueAlcanzaTemporal).ToList(); List <int> diferencias1 = nodosQueAlcanzaTemporal.Except(nodosQueAlcanzaActual).ToList(); foreach (int nuevosDif in diferencias1) { diferencias.Add(nuevosDif); } if ((diferencias.FirstOrDefault() == 0)) { Console.WriteLine("No se agrega: " + tranTemporal.getNombre()); noAgregar.Add(tranTemporal.getNodo()); } } } } } Console.WriteLine("nuevasTransiciones"); foreach (transicion l in nuevasTransiciones) { Console.WriteLine(l.getNombre()); } }
void obT(nodoThompson n) { if (n.getArriba() != null) { bool control = true; foreach (int j in no) { if (n.getId() == j) { control = false; } } if (control == true) { if (n.getAbajo() == null) { no.Add(n.getId()); } if (!n.getValorTransicion().Equals("ε")) { transicion sig = new transicion("" + contadorEstados, n.getArriba()); contadorEstados++; transiciones.Add(sig); bool ctrl = true; foreach (nodoThompson term in terminales) { if (term == n) { } else { if (n.getValorTransicion().Equals(term.getValorTransicion())) { ctrl = false; } } } if (ctrl == true) { terminales.Add(n); } } obT(n.getArriba()); } } if (n.getAbajo() != null) { bool control = true; foreach (int j in no) { if (n.getId() == j) { control = false; } } if (control == true) { if (n.getAbajo() == null) { no.Add(n.getId()); } if (!n.getValorTransicion().Equals("ε")) { transicion sig = new transicion("" + contadorEstados, n.getArriba()); transiciones.Add(sig); bool ctrl = true; foreach (nodoThompson term in terminales) { if (term == n) { } else { if (n.getValorTransicion().Equals(term.getValorTransicion())) { ctrl = false; } } } if (ctrl == true) { terminales.Add(n); } } obT(n.getAbajo()); } } }