//Metodo que realiza la regla 3 de los AFD. public void Verel3() { AFD nuevoest; Infoenla nuevoen; List <Separa> listaux = new List <Separa>(); List <Separa> listaux2 = new List <Separa>(); for (int x = 0; x < lreg.Count(); x++) { listaux.Add(lreg[x].coprod()); } while (listaux.Count != 0) { listaux2 = Buscasim(listaux, listaux[0]); if (listaux2 != null) { for (int x = 0; x < listaux2.Count; x++) { for (int i = 0; i < listaux.Count; i++) { if (Reglasim(listaux2[x], listaux[i]) == true) { listaux.RemoveAt(i); break; } } } foreach (Separa r in listaux2) { r.derecha[0].moverpunto(); } if (listaux2[0].derecha[0].tkanterior() != null) { nuevoest = ceds.buscaEstado(listaux2[0]); if (nuevoest == null) { nuevoest = new AFD(listaux2, ceds); ceds.agregaEstado(nuevoest); nuevoen = new Infoenla(nuevoest, listaux2[0].derecha[0].tkanterior()); listaEnlaces.Add(nuevoen); nuevoest.eval(); } else { nuevoen = new Infoenla(nuevoest, listaux2[0].derecha[0].tkanterior()); listaEnlaces.Add(nuevoen); } } } else { listaux.RemoveAt(0); } } }
public Infoenla(AFD est, NT tk) { estAFD = est; token = tk; }
//Agrega un nuevo estado a la lista. public void agregaEstado(AFD nuevo) { nuevo.num = numestado; numestado++; estados.Add(nuevo); }