public List<Estado> mueve(EstadoAFD estadoAFD, String terminal) { List<Estado> estadosAFN = new List<Estado>(); for(int i = 0; i < estadoAFD.getEstadosAFN().Count(); i++) { for(int j = 0; j < estadoAFD.getEstadosAFN()[i].getListTrans().Count(); j++) { if (estadoAFD.getEstadosAFN()[i].getListTrans()[j].getSimbolo().Equals(terminal)) { estadosAFN.Add(estadoAFD.getEstadosAFN()[i].getListTrans()[j].getFinal()); } } } if(estadosAFN.Count() > 0) { TransicionAFD transicion = new TransicionAFD(estadoAFD, null, terminal); transiciones.Add(transicion); } Console.WriteLine("mueve de " + estadoAFD.getNombre() + " con " + terminal); for(int i = 0; i < estadosAFN.Count(); i++) { Console.Write(estadosAFN[i].getNumero() + ", "); } Console.WriteLine(); return estadosAFN; }
public EstadoAFD cerradura(Estado estadoAFN) { EstadoAFD estadoAFD = new EstadoAFD(contadorEstado); estadoAFD.getEstadosAFN().Add(estadoAFN); if (estadoAFN.isEstAceptacion()) { estadoAFD.setAceptacion(true); } for (int j = 0; j < estadoAFD.getEstadosAFN().Count(); j++) { for (int i = 0; i < estadoAFD.getEstadosAFN()[j].getListTrans().Count(); i++) { if (estadoAFD.getEstadosAFN()[j].getListTrans()[i].getSimbolo().Equals("ep")) { estadoAFD.getEstadosAFN().Add(estadoAFD.getEstadosAFN()[j].getListTrans()[i].getFinal()); if (estadoAFD.getEstadosAFN()[j].getListTrans()[i].getFinal().isEstAceptacion()) { estadoAFD.setAceptacion(true); } } } } Console.WriteLine("cerradura de: "+ estadoAFN.getNumero()); Console.WriteLine("\n"); for (int i = 0; i < estadoAFD.getEstadosAFN().Count(); i++) { Console.Write(estadoAFD.getEstadosAFN()[i].getNumero() + ", "); } Console.WriteLine("\n"); Console.WriteLine("Estado "+ estadoAFD.getNombre()); contadorEstado++; return estadoAFD; }
public EstadoAFD cerradura(List<Estado> estadosAFN) { int contador = 0; EstadoAFD estadoAFD = new EstadoAFD(contadorEstado); for(int k = 0; k < estadosAFN.Count(); k++) { estadoAFD.getEstadosAFN().Add(estadosAFN[k]); if (estadosAFN[k].isEstAceptacion()) { estadoAFD.setAceptacion(true); } for(int j = contador; j < estadoAFD.getEstadosAFN().Count(); j=contador) { for(int i = 0; i < estadoAFD.getEstadosAFN()[j].getListTrans().Count(); i++) { if (estadoAFD.getEstadosAFN()[j].getListTrans()[i].getSimbolo().Equals("ep")) { estadoAFD.getEstadosAFN().Add(estadoAFD.getEstadosAFN()[j].getListTrans()[i].getFinal()); if (estadoAFD.getEstadosAFN()[j].getListTrans()[i].getFinal().isEstAceptacion()) { estadoAFD.setAceptacion(true); } } } contador++; } } Console.WriteLine("cerradura de: "); for(int i = 0; i < estadosAFN.Count(); i++) { Console.Write(estadosAFN[i].getNumero() + ", "); } Console.WriteLine("\n"); for(int i = 0; i < estadoAFD.getEstadosAFN().Count(); i++) { Console.Write(estadoAFD.getEstadosAFN()[i].getNumero() + ", "); } Console.WriteLine("\n"); estadoAFD = compararEstadosAFD(estadoAFD); transiciones[transiciones.Count() - 1].setFinal(estadoAFD); Console.WriteLine("Estado " + estadoAFD.getNombre()); contadorEstado++; return estadoAFD; }
public EstadoAFD compararEstadosAFD(EstadoAFD estadoAFD) { Boolean iguales = true; Boolean encontrado = false; for(int i = 0; i < listaEstadosAFD.Count(); i++) { iguales = true; if(listaEstadosAFD[i].getEstadosAFN().Count() == estadoAFD.getEstadosAFN().Count()) { for (int j = 0; j < estadoAFD.getEstadosAFN().Count(); j++) { encontrado = false; for (int k = 0; k < listaEstadosAFD[i].getEstadosAFN().Count(); k++) { if (estadoAFD.getEstadosAFN()[j].getNumero() == listaEstadosAFD[i].getEstadosAFN()[k].getNumero()) { encontrado = true; break; } } if (!encontrado) { iguales = false; break; } } if (iguales) { return listaEstadosAFD[i]; } } } return estadoAFD; }