public void creaAfd() { Estado papi = new Estado(this.listProd[0],this.idSig++); this._listEdos.Add(papi); this.creaAfdRec(this._listEdos[0]); }
public Arista(Token token,Estado estadoDest):this(token) { this._estadoDest = estadoDest; }
private void creaAfdRec(Estado e) { Produccion nuevaProd; List<Produccion> listProd; List<Produccion> listProdIguales; Arista ar; Estado estadoNuevo,estadoAux; int numPrueba = 0; foreach (Produccion p in e.listProd) { // numPrueba++; if (this.idSig == 384) { numPrueba = 0; } if (p.punto < p.listProd.Count) { ar = new Arista(p.listProd[p.punto]); // if (ar.token.GetType().Name.Equals("NoTerm")) // { listProdIguales = e.regresaListaDePRod(ar.token); if (listProdIguales.Count>1/*e.listProd.Exists(a => a.listProd[a.punto].token.Equals(ar.token.token))*/) { // = e.listProd.FindAll(a => a.listProd[a.punto].token.Equals(ar.token.token)); listProd = new List<Produccion>(); foreach (Produccion prod in listProdIguales) { nuevaProd = new Produccion(prod); nuevaProd.punto++; listProd.Add(nuevaProd); } estadoNuevo = new Estado(listProd, this.idSig++); } else { nuevaProd = new Produccion(p); nuevaProd.punto++; estadoNuevo = new Estado(nuevaProd, this.idSig++); } // } // else // { // nuevaProd = new Produccion(p); // nuevaProd.punto++; // estadoNuevo = new Estado(nuevaProd, this.idSig++); // } estadoAux = this.buscaEstadosIguales(estadoNuevo); if (estadoAux != null) { this.idSig--; ar.estadoDest = estadoAux; if (!e.listAristas.Exists(a => a.token.token.Equals(ar.token.token) && a.estadoDest.id.Equals(ar.estadoDest.id))) { e.agregaArista(ar); } } else { ar.estadoDest = estadoNuevo; e.agregaArista(ar); this._listEdos.Add(estadoNuevo); this.creaAfdRec(estadoNuevo); } } } }
private Estado buscaEstadosIguales(Estado estadoNuevo) { Estado est=null; bool[] band = new bool[estadoNuevo.listProd.Count]; bool band2 = false;; List<Estado> listEdo; // int prueba=0; listEdo = this.listEdos.FindAll(a=>a.listProd.Count.Equals(estadoNuevo.listProd.Count)); foreach (Estado e in listEdo) { // if (e.id.Equals(291)) // { // prueba = 2; // } for (int i = 0; i < e.listProd.Count; i++) { if (e.listProd[i].completa().Equals(estadoNuevo.listProd[i].completa()) && e.listProd[i].tokensDeBusq().Equals(estadoNuevo.listProd[i].tokensDeBusq())) { if(e.listProd[i].punto.Equals(estadoNuevo.listProd[i].punto)) { band[i] = true; } } else { band[i] = false; } } foreach (bool b in band) { if (b == false) { band2 = false; break; } else { band2 = true; } } if (band2 == true) { est = e; break; } } return est; }