示例#1
0
        public SubAFN crearOr(SubAFN basico1, SubAFN basico2)
        {
            SubAFN b1      = nuevo(basico1);
            SubAFN b2      = nuevo(basico2);
            SubAFN or      = new SubAFN();
            Estado inicial = new Estado(0);

            inicial.setTransicion(new TransicionThompson(inicial, b1.getInicial(), "ε"));
            inicial.setTransicion(new TransicionThompson(inicial, b2.getInicial(), "ε"));
            or.setEstado(inicial);
            or.setInicial(inicial);
            int e          = 0;
            int basico1tam = b1.getEstados().Count;
            int basico2tam = b2.getEstados().Count;

            for (e = 0; e < basico1tam; e++)
            {
                Estado aux = b1.getEstado(e);
                aux.setId(e + 1);
                foreach (TransicionThompson t in aux.getTransiciones())
                {
                    t.getInicio().setId(e + 1);
                    t.getFinal().setId(t.getFinal().getId() + 1);
                }
                or.setEstado(aux);
            }
            int tf = e + 1;

            for (int i = 0; i < basico2tam; i++)
            {
                Estado aux = b2.getEstado(i);
                aux.setId(e + 1);
                foreach (TransicionThompson t in aux.getTransiciones())
                {
                    t.getInicio().setId(e + 1);
                    t.getFinal().setId(t.getFinal().getId() + tf);
                }
                or.setEstado(aux);
                e++;
            }
            Estado final = new Estado(basico1tam + basico2tam + 1);

            or.setFinal(final);
            or.setEstado(final);
            Estado basico1fin = b1.getFinal();
            Estado basico2fin = b2.getFinal();

            basico1fin.setTransicion(new TransicionThompson(basico1fin, final, "ε"));
            basico2fin.setTransicion(new TransicionThompson(basico2fin, final, "ε"));
            return(or);
        }
示例#2
0
        public SubAFN crearKleene(SubAFN basico)
        {
            SubAFN b      = nuevo(basico);
            int    tam    = b.getEstados().Count;
            SubAFN kleene = new SubAFN();
            Estado inicio = new Estado(0);

            kleene.setEstado(inicio);
            kleene.setInicial(inicio);
            for (int i = 0; i < tam; i++)
            {
                Estado aux = b.getEstado(i);
                aux.setId(i + 1);
                foreach (TransicionThompson t in b.getEstado(i).getTransiciones())
                {
                    t.getInicio().setId(i + 1);
                    t.getFinal().setId(t.getFinal().getId() + 1);
                }

                if (i == 0)
                {
                    b.setInicial(aux);
                }
                if (i == tam - 1)
                {
                    b.setFinal(aux);
                }
                kleene.setEstado(aux);
            }
            Estado fin = new Estado(tam + 1);

            kleene.setEstado(fin);
            kleene.setFinal(fin);
            Estado inibasico = b.getInicial();
            Estado finbasico = b.getFinal();

            inicio.setTransicion(new TransicionThompson(inicio, inibasico, "ε"));
            inicio.setTransicion(new TransicionThompson(inicio, fin, "ε"));
            finbasico.setTransicion(new TransicionThompson(finbasico, inibasico, "ε"));
            finbasico.setTransicion(new TransicionThompson(finbasico, fin, "ε"));
            return(kleene);
        }
示例#3
0
        public SubAFN crearConcatenacion(SubAFN basico1, SubAFN basico2)
        {
            SubAFN conc2         = nuevo(basico2);
            SubAFN concatenacion = new SubAFN();
            int    e             = 0;

            for (e = 0; e < basico1.getEstados().Count - 1; e++)
            {
                Estado aux = basico1.getEstado(e);
                aux.setId(e);
                if (e == 0)
                {
                    concatenacion.setInicial(aux);
                }
                concatenacion.setEstado(aux);
            }
            int tf = e - conc2.getEstado(0).getId();

            for (int i = 0; i < conc2.getEstados().Count; i++)
            {
                Estado aux = conc2.getEstado(i);
                aux.setId(e);
                foreach (TransicionThompson t in aux.getTransiciones())
                {
                    t.getInicio().setId(e);
                    t.getFinal().setId(t.getFinal().getId() + tf);
                }
                if (i == conc2.getEstados().Count - 1)
                {
                    concatenacion.setFinal(aux);
                }
                concatenacion.setEstado(aux);
                e++;
            }
            return(concatenacion);
        }