Exemple #1
0
        public EstAFD2 compararEstadosAFD(EstAFD2 estadoAFD)
        {
            Boolean iguales    = true;
            Boolean encontrado = false;

            for (int i = 0; i < listaEstadosAFD.Count(); i++)
            {
                iguales = true;
                if (listaEstadosAFD[i].getEstadosAFN().Count() == estadoAFD.getEstadosAFN().Count())
                {
                    for (int j = 0; j < estadoAFD.getEstadosAFN().Count(); j++)
                    {
                        encontrado = false;
                        for (int k = 0; k < listaEstadosAFD[i].getEstadosAFN().Count(); k++)
                        {
                            if (estadoAFD.getEstadosAFN()[j].getNumero() == listaEstadosAFD[i].getEstadosAFN()[k].getNumero())
                            {
                                encontrado = true;
                                break;
                            }
                        }
                        if (!encontrado)
                        {
                            iguales = false;
                            break;
                        }
                    }
                    if (iguales)
                    {
                        return(listaEstadosAFD[i]);
                    }
                }
            }
            return(estadoAFD);
        }
Exemple #2
0
        public List <Estado> mueve(EstAFD2 estadoAFD, String terminal)
        {
            List <Estado> estadosAFN = new List <Estado>();

            for (int i = 0; i < estadoAFD.getEstadosAFN().Count(); i++)
            {
                for (int j = 0; j < estadoAFD.getEstadosAFN()[i].getListTrans().Count(); j++)
                {
                    if (estadoAFD.getEstadosAFN()[i].getListTrans()[j].getSimbolo().Equals(terminal))
                    {
                        estadosAFN.Add(estadoAFD.getEstadosAFN()[i].getListTrans()[j].getFinal());
                    }
                }
            }

            if (estadosAFN.Count() > 0)
            {
                TransAFD2 transicion = new TransAFD2(estadoAFD, null, terminal);
                transiciones.Add(transicion);
            }

            Console.WriteLine("mueve de " + estadoAFD.getNombre() + " con " + terminal);
            for (int i = 0; i < estadosAFN.Count(); i++)
            {
                Console.Write(estadosAFN[i].getNumero() + ", ");
            }

            Console.WriteLine();

            return(estadosAFN);
        }
Exemple #3
0
        public EstAFD2 cerradura(Estado estadoAFN)
        {
            EstAFD2 estadoAFD = new EstAFD2(contadorEstado);

            estadoAFD.getEstadosAFN().Add(estadoAFN);
            if (estadoAFN.isEstAceptacion())
            {
                estadoAFD.setAceptacion(true);
            }
            for (int j = 0; j < estadoAFD.getEstadosAFN().Count(); j++)
            {
                for (int i = 0; i < estadoAFD.getEstadosAFN()[j].getListTrans().Count(); i++)
                {
                    if (estadoAFD.getEstadosAFN()[j].getListTrans()[i].getSimbolo().Equals("ep"))
                    {
                        estadoAFD.getEstadosAFN().Add(estadoAFD.getEstadosAFN()[j].getListTrans()[i].getFinal());
                        if (estadoAFD.getEstadosAFN()[j].getListTrans()[i].getFinal().isEstAceptacion())
                        {
                            estadoAFD.setAceptacion(true);
                        }
                    }
                }
            }
            Console.WriteLine("cerradura de: " + estadoAFN.getNumero());
            Console.WriteLine("\n");
            for (int i = 0; i < estadoAFD.getEstadosAFN().Count(); i++)
            {
                Console.Write(estadoAFD.getEstadosAFN()[i].getNumero() + ", ");
            }
            Console.WriteLine("\n");
            Console.WriteLine("Estado " + estadoAFD.getNombre());
            contadorEstado++;
            return(estadoAFD);
        }
Exemple #4
0
        public void generarAFD(List <Estado> estados, List <String> terminales)
        {
            listaEstadosAFD = new List <EstAFD2>();
            transiciones    = new List <TransAFD2>();
            Estado inicial = obtenerEstadoInicial(estados);

            listaEstadosAFD.Add(cerradura(inicial));
            listaEstadosAFD[listaEstadosAFD.Count() - 1].setInicial(true);

            for (int j = 0; j < listaEstadosAFD.Count(); j++)
            {
                for (int i = 0; i < terminales.Count(); i++)
                {
                    List <Estado> estadoAFN = mueve(listaEstadosAFD[j], terminales[i]);

                    if (estadoAFN.Count() > 0)
                    {
                        EstAFD2 estadoAFD = cerradura(estadoAFN);

                        if (!estadoAFD.isAgregado())
                        {
                            listaEstadosAFD.Add(estadoAFD);
                            estadoAFD.setAgregado(true);

                            for (int t = 0; t < estadoAFD.getEstadosAFN().Count(); t++)
                            {
                                Console.Write(estadoAFD.getEstadosAFN()[t].getNumero() + ", ");
                            }
                        }
                    }
                }
            }


            String grafo = generarCodigoGraphviz();

            generarImagenGraphviz(grafo, "afd" + contadorImagen);
            llenarTransicionesPorEstado();

            String tabla = generarCodigoGraphvizTT(terminales);

            generarImagenGraphviz(tabla, "tt" + contadorImagen);
            contadorImagen++;



            /* List<Estado> estadosAFN = mueve(estadoAFD, terminales[0]);
             * EstadoAFD estadoAFD2 = cerradura(estadosAFN);
             * List<Estado> estadosAFN = mueve(estadoAFD, terminales[1]);
             * EstadoAFD estadoAFD3 = cerradura(estadosAFN);
             * List<Estado> estadosAFN = mueve(estadoAFD2, terminales[0]);
             * EstadoAFD estadoAFD4 = cerradura(estadosAFN);
             * List<Estado> estadosAFN = mueve(estadoAFD2, terminales[1]);
             * EstadoAFD estadoAFD5 = cerradura(estadosAFN);*/
        }
Exemple #5
0
        public EstAFD2 cerradura(List <Estado> estadosAFN)
        {
            int     contador  = 0;
            EstAFD2 estadoAFD = new EstAFD2(contadorEstado);

            for (int k = 0; k < estadosAFN.Count(); k++)
            {
                estadoAFD.getEstadosAFN().Add(estadosAFN[k]);
                if (estadosAFN[k].isEstAceptacion())
                {
                    estadoAFD.setAceptacion(true);
                }
                for (int j = contador; j < estadoAFD.getEstadosAFN().Count(); j = contador)
                {
                    for (int i = 0; i < estadoAFD.getEstadosAFN()[j].getListTrans().Count(); i++)
                    {
                        if (estadoAFD.getEstadosAFN()[j].getListTrans()[i].getSimbolo().Equals("ep"))
                        {
                            estadoAFD.getEstadosAFN().Add(estadoAFD.getEstadosAFN()[j].getListTrans()[i].getFinal());
                            if (estadoAFD.getEstadosAFN()[j].getListTrans()[i].getFinal().isEstAceptacion())
                            {
                                estadoAFD.setAceptacion(true);
                            }
                        }
                    }

                    contador++;
                }
            }

            Console.WriteLine("cerradura de: ");
            for (int i = 0; i < estadosAFN.Count(); i++)
            {
                Console.Write(estadosAFN[i].getNumero() + ", ");
            }

            Console.WriteLine("\n");
            for (int i = 0; i < estadoAFD.getEstadosAFN().Count(); i++)
            {
                Console.Write(estadoAFD.getEstadosAFN()[i].getNumero() + ", ");
            }
            Console.WriteLine("\n");
            estadoAFD = compararEstadosAFD(estadoAFD);

            transiciones[transiciones.Count() - 1].setFinal(estadoAFD);
            Console.WriteLine("Estado " + estadoAFD.getNombre());
            contadorEstado++;
            return(estadoAFD);
        }
Exemple #6
0
 public void setFinal(EstAFD2 final)
 {
     this.final = final;
 }
Exemple #7
0
 public void setInicial(EstAFD2 inicial)
 {
     this.inicial = inicial;
 }
Exemple #8
0
 public TransAFD2(EstAFD2 inicial, EstAFD2 final, String simbolo)
 {
     this.inicial = inicial;
     this.final   = final;
     this.simbolo = simbolo;
 }