public string StringIDTerminal(int id)
 {
     foreach (Nodo AuxNodo in Nodos)
     {
         if (AuxNodo.getID() == id)
         {
             return(AuxNodo.getTerminal());
         }
     }
     return("error");
 }
        public void createRegexAFN()
        {
            LinkedList <Nodo> TempNodos = new LinkedList <Nodo>(Nodos);

            // SE CREAN LOS AFN's BASICOS PARA TERMINALES
            foreach (Nodo AuxNodo in TempNodos)
            {
                if (AuxNodo.getTipo() == Nodo.TipoNodo.TERMINAL)
                {
                    AFN TempAFN = new AFN();
                    TempAFN.createBasicAFN(AuxNodo.getID(), EstadosAFN);
                    AuxNodo.setAFN(TempAFN);
                }
            }

            Nodo TempNodo;
            Nodo AuxNodo1;
            Nodo AuxNodo2;
            Nodo NewNodo;
            AFN  NewAFN;

            //SE BUSCA EL PATRON OB-AFN-AFN o OU-AFN Y SE OPERAN LOS AFN's
            Console.Write("ENTRO CON SIZE DE ");
            Console.WriteLine(TempNodos.Count);
            while (TempNodos.Count > 1)
            {
                for (int i = 0; i < TempNodos.Count; i++)
                {
                    NewNodo = new Nodo();
                    NewNodo.setTipo(Nodo.TipoNodo.AFN);
                    NewAFN   = new AFN();
                    TempNodo = TempNodos.ElementAt(i);

                    if (TempNodo.getTipo() != Nodo.TipoNodo.AFN)
                    {
                        switch (TempNodo.getTipo())
                        {
                        case Nodo.TipoNodo.ALTERNANCIA:
                            AuxNodo1 = TempNodos.ElementAt(i + 1);
                            AuxNodo2 = TempNodos.ElementAt(i + 2);
                            if (AuxNodo1.getTipo() == Nodo.TipoNodo.AFN && AuxNodo2.getTipo() == Nodo.TipoNodo.AFN)
                            {
                                NewAFN.createAlternanciaAFN(AuxNodo1.getAFN(), AuxNodo2.getAFN(), EstadosAFN);
                                NewNodo.setAFN(NewAFN);
                                TempNodos.Remove(AuxNodo1);
                                TempNodos.Remove(AuxNodo2);
                                TempNodos.Find(TempNodo).Value = NewNodo;
                                i = TempNodos.Count;
                            }
                            break;

                        case Nodo.TipoNodo.CONCATENACION:
                            AuxNodo1 = TempNodos.ElementAt(i + 1);
                            AuxNodo2 = TempNodos.ElementAt(i + 2);
                            if (AuxNodo1.getTipo() == Nodo.TipoNodo.AFN && AuxNodo2.getTipo() == Nodo.TipoNodo.AFN)
                            {
                                NewAFN.createConcatenacionAFN(AuxNodo1.getAFN(), AuxNodo2.getAFN(), EstadosAFN);
                                NewNodo.setAFN(NewAFN);
                                TempNodos.Remove(AuxNodo1);
                                TempNodos.Remove(AuxNodo2);
                                TempNodos.Find(TempNodo).Value = NewNodo;
                                i = TempNodos.Count;
                            }
                            break;

                        case Nodo.TipoNodo.KLEENE:
                            AuxNodo1 = TempNodos.ElementAt(i + 1);
                            if (AuxNodo1.getTipo() == Nodo.TipoNodo.AFN)
                            {
                                NewAFN.createKleeneAFN(AuxNodo1.getAFN(), EstadosAFN);
                                NewNodo.setAFN(NewAFN);
                                TempNodos.Remove(AuxNodo1);
                                TempNodos.Find(TempNodo).Value = NewNodo;
                                i = TempNodos.Count;
                            }
                            break;

                        case Nodo.TipoNodo.POSITIVA:
                            AuxNodo1 = TempNodos.ElementAt(i + 1);
                            if (AuxNodo1.getTipo() == Nodo.TipoNodo.AFN)
                            {
                                NewAFN.createPositivaAFN(AuxNodo1.getAFN(), EstadosAFN);
                                NewNodo.setAFN(NewAFN);
                                TempNodos.Remove(AuxNodo1);
                                TempNodos.Find(TempNodo).Value = NewNodo;
                                i = TempNodos.Count;
                            }
                            break;

                        case Nodo.TipoNodo.UNAOCERO:
                            AuxNodo1 = TempNodos.ElementAt(i + 1);
                            if (AuxNodo1.getTipo() == Nodo.TipoNodo.AFN)
                            {
                                NewAFN.createUnaOCeroAFN(AuxNodo1.getAFN(), EstadosAFN);
                                NewNodo.setAFN(NewAFN);
                                TempNodos.Remove(AuxNodo1);
                                TempNodos.Find(TempNodo).Value = NewNodo;
                                i = TempNodos.Count;
                            }
                            break;
                        }
                    }
                }
            }
            Console.Write("SALIO CON SIZE DE ");
            Console.WriteLine(TempNodos.Count);
            RegexAFN        = TempNodos.ElementAt(0).getAFN();
            Estado.Contador = 0;
            createSubConjuntos();
        }