示例#1
0
        private bool existEstado(Transiciones transicion, String estado, List <Estados> estadosExistentes)
        {
            bool exist = false;

            if (estado.Contains(vacio) || estado.ToCharArray()[0] == ',')
            {
                return(true);
            }
            foreach (Estados estadosExistente in estadosExistentes)
            {
                if (estadosExistente.estado == (estado))
                {
                    return(true);
                }
                else if (estado.Length == estadosExistente.estado.Length)
                {
                    exist = esIgualEstado(estado, estadosExistente.estado);
                    if (exist)
                    {
                        transicion.nextstate = (estadosExistente.estado);
                    }
                }
            }
            return(exist);
        }
示例#2
0
        public Transiciones[] getalltransicionesDFA()
        {
            List <Transiciones> tnDFA  = new List <Transiciones>();
            List <Estados>      e_exis = new List <Estados>();
            Estados             eta    = buscarEstado(estd_inicial);

            foreach (string t in alfab)
            {
                string         tmp_tr      = "";
                Transiciones[] tmp_alltran = eta.getAllTrancionesConEntry(t);
                for (int i = 0; i < tmp_alltran.Length; i++)
                {
                    tmp_tr += tmp_alltran[i].nextstate;
                    if (i != tmp_alltran.Length - 1)
                    {
                        tmp_tr += ",";
                    }
                }
                tnDFA.Add(new Transiciones(eta.estado, t, tmp_tr));
            }
            e_exis.Add(eta);

            while (getNuevoEstado(e_exis, tnDFA) != null)
            {
                Transiciones trans    = getNuevoEstado(e_exis, tnDFA);
                string       tmp_find = vacio;
                foreach (string altp in alfab)
                {
                    tmp_find = gettransicion(trans.nextstate.Split(','), altp);
                    if (tmp_find.ToCharArray()[0] == ',')
                    {
                        tmp_find = tmp_find.Substring(1, tmp_find.Length - 1);
                    }

                    tnDFA.Add(new Transiciones(trans.nextstate, altp, tmp_find));
                }

                if (trans.nextstate != (vacio) || trans.nextstate == (""))
                {
                    e_exis.Add(new Estados(trans.nextstate));
                }
            }
            if (existenTransicionVacias(tnDFA))
            {
                addnewstatedeath(tnDFA, e_exis);
            }
            DFASTATES = e_exis.ToArray();
            return(tnDFA.ToArray());
        }