Beispiel #1
0
        public EstadoAFD cerradura(Estado estadoAFN)
        {
            EstadoAFD estadoAFD = new EstadoAFD(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;
     
        }
Beispiel #2
0
        public List<Estado> mueve(EstadoAFD 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)
            {
                TransicionAFD transicion = new TransicionAFD(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;
        }
Beispiel #3
0
        public void generarAFD(List<Estado> estados, List<String> terminales)
        {

            listaEstadosAFD = new List<EstadoAFD>();
            transiciones = new List<TransicionAFD>();
            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> estadosAFN = mueve(listaEstadosAFD[j], terminales[i]);

                    if(estadosAFN.Count() > 0)
                    {
                        EstadoAFD estadoAFD = cerradura(estadosAFN);

                        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);*/
        }
Beispiel #4
0
        public EstadoAFD cerradura(List<Estado> estadosAFN)
        {
            int contador = 0;
            EstadoAFD estadoAFD = new EstadoAFD(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;

        }
Beispiel #5
0
        public EstadoAFD compararEstadosAFD(EstadoAFD 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;
        }
Beispiel #6
0
 public void setFinal(EstadoAFD final)
 {
     this.final = final;
 }
Beispiel #7
0
 public void setInicial(EstadoAFD inicial)
 {
     this.inicial = inicial;
 }
Beispiel #8
0
 public TransicionAFD(EstadoAFD inicial, EstadoAFD final, String simbolo)
 {
     this.inicial = inicial;
     this.final   = final;
     this.simbolo = simbolo;
 }