Beispiel #1
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 #2
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 #3
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 #4
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;
        }