Beispiel #1
0
        public void creaAfd()
        {
            Estado papi = new Estado(this.listProd[0],this.idSig++);
            this._listEdos.Add(papi);

            this.creaAfdRec(this._listEdos[0]);
        }
Beispiel #2
0
 public Arista(Token token,Estado estadoDest):this(token)
 {
     this._estadoDest = estadoDest;
 }
Beispiel #3
0
        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);
                    }
                }
            }
        }
Beispiel #4
0
        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;
        }