示例#1
0
        public ListaThomson UnionI()
        {
            ListaThomson Pila = new ListaThomson();

            NodoThomson Iniciovacio = new NodoThomson("epsilon", "or");
            NodoThomson Finalvacio  = new NodoThomson("epsilon", "fin_or");

            NodoThomson vacio3 = new NodoThomson("epsilon");
            NodoThomson vacio2 = new NodoThomson("epsilon");
            NodoThomson vacio  = new NodoThomson("epsilon");

            if (aux1.GetTipo() == "unica")
            {
                Iniciovacio.sig1 = aux1.GetInicio();
                Iniciovacio.sig2 = vacio3;

                aux1.GetFinal().sig1 = vacio;
                vacio3.sig1 = vacio2;
                vacio.sig1  = Finalvacio;
                vacio2.sig1 = Finalvacio;
            }
            else if (aux1.GetTipo() == "doble")
            {
                Iniciovacio.sig1 = aux1.GetInicio();
                Iniciovacio.sig2 = vacio3;

                aux1.GetFinal().sig1 = Finalvacio;
                vacio3.sig1 = vacio2;
                vacio2.sig1 = Finalvacio;
            }

            Pila.setInicio(Iniciovacio);
            Pila.setTFinal(Finalvacio);
            return(Pila);
        }
示例#2
0
        public LinkedList <NodoThomson> llenaListaLineal()
        {
            lista_lineal_nodos = new LinkedList <NodoThomson>();
            NodoThomson aux = this.Inicio;

            while (aux != null)
            {
                if (repetido(aux.GetEstado()) != true)
                {
                    lista_lineal_nodos.AddLast(aux);
                }

                if (aux.GetTipo().CompareTo("or") == 0)
                {// tengo otra lista hacia otro lado
                    if (aux.sig2 != null && repetido(aux.sig2.GetEstado()) != true)
                    {
                        llenaListaLineal(aux.sig2);
                    }
                }
                aux = aux.sig1;
            }


            return(lista_lineal_nodos);
        }
示例#3
0
 public void imprimirPorDebajo(NodoThomson aux)
 {
     while (aux.sig1.GetTipo().CompareTo("fin_or") != 0)
     {
         if (aux.GetTipo().CompareTo("or") == 0)
         {
             if (aux.sig2 != null)
             {
                 // imprimirPorDebajo(aux.sig2);
             }
         }
         Console.WriteLine("-->" + " ID: " + aux.GetEstado() + " nombrePuntero:" + aux.GetTranscision());
         aux = aux.sig1;
     }
 }
示例#4
0
        public void AgregarDeUltimo()
        {
            NodoThomson NodoT = new NodoThomson();

            if (Inicio == null)
            {
                NodoT  = Inicio;
                Inicio = Fin;
            }
            else
            {
                Fin.sig1 = NodoT;
                NodoT    = Fin;
            }
        }
        public ListaThomson Unir()
        {
            NodoThomson vacio       = new NodoThomson("epsilon");
            NodoThomson Iniciovacio = new NodoThomson("epsilon");

            ListaThomson Pila       = new ListaThomson();
            NodoThomson  Finalvacio = new NodoThomson("epsilon");

            if (hijounico.GetTipo() == "unica")
            {
                Iniciovacio.sig1 = hijounico.GetInicio();
                hijounico.GetFinal().sig1 = vacio;
                vacio.sig2       = hijounico.GetInicio();
                vacio.sig1       = Finalvacio;
                Iniciovacio.sig2 = Finalvacio;
                Pila.setTipo("doble");
                Pila.setInicio(Iniciovacio);
                Pila.setTFinal(Finalvacio);
            }
            else if (hijounico.GetTipo() == "doble")
            {
                Iniciovacio.sig1 = hijounico.GetInicio();
                hijounico.GetFinal().sig2 = hijounico.GetInicio();
                hijounico.GetFinal().sig1 = vacio;

                Iniciovacio.sig2 = vacio;
                Pila.setInicio(Iniciovacio);
                Pila.setTFinal(vacio);
            }
            else if (hijounico.GetInicio().GetTranscision() == "or")
            {
                Iniciovacio.sig1 = hijounico.GetInicio();

                Iniciovacio.sig2 = Finalvacio;
                hijounico.GetInicio().sig2 = Finalvacio;
                hijounico.GetFinal().sig1  = Finalvacio;

                hijounico.GetFinal().sig2 = hijounico.GetInicio();

                Pila.setInicio(Iniciovacio);
                Pila.setTFinal(Finalvacio);
            }
            return(Pila);
        }
示例#6
0
        public void llenaListaLineal(NodoThomson aux) // sobrecarga de metodo
        {
            while (aux != null)
            {
                if (repetido(aux.GetEstado()) != true)
                {
                    lista_lineal_nodos.AddLast(aux);
                }

                if (aux.GetTipo().CompareTo("or") == 0)
                {// tengo otra lista hacia otro lado
                    if (aux.sig2 != null && repetido(aux.sig2.GetEstado()) != true)
                    {
                        llenaListaLineal(aux.sig2);
                    }
                }
                aux = aux.sig1;
            }
        }
示例#7
0
        public ListaThomson Union()
        {
            ListaThomson Pila        = new ListaThomson();
            NodoThomson  vacio       = new NodoThomson("epsilon");
            NodoThomson  Iniciovacio = new NodoThomson("epsilon");
            NodoThomson  Finalvacio  = new NodoThomson("epsilon");

            if (aux1.GetTipo() == "unica")
            {
                Iniciovacio.sig1 = aux1.GetInicio();
                aux1.GetFinal().sig1 = vacio;
                vacio.sig2 = aux1.GetInicio();
                vacio.sig1 = Finalvacio;

                Pila.setTipo("doble");
                Pila.setInicio(Iniciovacio);
                Pila.setTFinal(Finalvacio);
            }
            else if (aux1.GetTipo() == "doble")
            {
                Iniciovacio.sig1 = aux1.GetInicio();
                aux1.GetFinal().sig1 = Finalvacio;

                aux1.GetFinal().sig2 = aux1.GetInicio();

                Pila.setInicio(Iniciovacio);
                Pila.setTFinal(Finalvacio);
            }
            else if (aux1.GetInicio().GetTranscision() == "or")
            {
                aux1.GetFinal().sig1 = Finalvacio;

                aux1.GetFinal().sig2 = aux1.GetInicio();

                Pila.setInicio(aux1.GetInicio());
                Pila.setTFinal(Finalvacio);
            }



            return(Pila);
        }
示例#8
0
        public void RecursivoMov(NodoThomson N, string Trans)
        {
            if (N.sig1 != null)
            {
                if (N.GetTranscision().Equals(Trans))
                {
                    lista_mov.AddLast(N.sig1);
                    RecursivoMov(N.sig1, Trans);
                }
            }
            if (N.sig2 != null)
            {
                if (N.GetTranscision().Equals(Trans))
                {
                    lista_mov.AddLast(N.sig2);

                    RecursivoMov(N.sig2, Trans);
                }
            }
        }
示例#9
0
        public void RecursivoCerr(NodoThomson n, string trans)
        {
            lista_ceradura.AddLast(n);


            if (n.sig1 != null)
            {
                if (n.GetTranscision().Equals(trans))
                {
                    RecursivoCerr(n.sig1, trans);
                }
            }
            if (n.sig2 != null)
            {
                if (n.GetTranscision().Equals(trans))
                {
                    RecursivoCerr(n.sig2, trans);
                }
            }
        }
示例#10
0
        public void imprimir()
        {
            int         x   = 1;
            NodoThomson aux = this.Inicio;


            while (aux != null)
            {
                if (aux.GetTipo().CompareTo("or") == 0)
                {// necesito imprimir por debajo
                    Console.WriteLine(x + "." + " ID: " + aux.GetEstado() + " nombrePuntero:" + aux.GetTranscision());
                    if (aux.sig2 != null)
                    {
                        imprimirPorDebajo(aux.sig2);
                    }
                }
                Console.WriteLine(x + "." + " ID: " + aux.GetEstado() + " nombrePuntero:" + aux.GetTranscision());
                x++;
                aux = aux.sig1;
            }
        }
        public ListaThomson junta()
        {// .a-.    . = nodo     letras = transiciones  si me entendes eso ?
            ListaThomson Pila = new ListaThomson();

            NodoThomson nulo = new NodoThomson("epsilon");

            hijo1.GetFinal().sig1 = hijo2.GetInicio();
            hijo2.GetFinal().sig1 = nulo;
            NodoThomson aux       = hijo1.GetInicio();

            /*    // apuntaste una lista string cada vez que recorro la lista
             *  //------a
             *  //------a
             *  // a ---------b
             */
            Pila.setInicio(hijo1.GetInicio());
            Pila.setTFinal(nulo);
            Pila.setTipo("doble");
            MessageBox.Show(Pila.GetInicio().GetTranscision());

            return(Pila);
        }
示例#12
0
        // tipo = 0  lista simple
        // tipo = 1 listaCompuesta
        // tipo = 2 Lista OR pura

        public ListaThomson()
        {
            NodoThomson Fin    = null;
            NodoThomson Inicio = null;
        }
示例#13
0
        public ListaThomson Union()
        {
            ListaThomson Pila = new ListaThomson();

            NodoThomson Iniciovacio = new NodoThomson("epsilon", "or");
            NodoThomson Finalvacio  = new NodoThomson("epsilon", "fin_or");

            NodoThomson vacio2 = new NodoThomson("epsilon");
            NodoThomson vacio  = new NodoThomson("epsilon");

            if (aux1.GetTipo() == "unica" && aux2.GetTipo() == "unica")
            {
                MessageBox.Show("si" + aux1.GetTipo() + aux2.GetTipo());

                Iniciovacio.sig1 = aux1.GetInicio();


                Iniciovacio.sig2 = aux2.GetInicio();
                aux1.GetFinal().sig1 = vacio;
                aux2.GetFinal().sig1 = vacio2;
                vacio.sig1  = Finalvacio;
                vacio2.sig1 = Finalvacio;
                Pila.setTipo("doble");
            }
            else if (aux1.GetTipo() == "doble" && aux2.GetTipo() == "doble")
            {
                MessageBox.Show("si es doble");
                Iniciovacio.sig1 = aux1.GetInicio();
                Iniciovacio.sig2 = aux2.GetInicio();
                aux1.GetFinal().sig1 = Finalvacio;
                aux2.GetFinal().sig1 = Finalvacio;
                Pila.setTipo("doble");
            }

            else if (aux1.GetTipo() == "doble" && aux2.GetTipo() == "unica")
            {
                MessageBox.Show("unica  y doble");
                Iniciovacio.sig1 = aux1.GetInicio();
                Iniciovacio.sig2 = aux2.GetInicio();
                aux1.GetFinal().sig1 = Finalvacio;
                aux2.GetFinal().sig1 = vacio2;
                vacio.sig1 = Finalvacio;
                Pila.setTipo("doble");
            }
            else if (aux1.GetTipo() == "unica" && aux2.GetTipo() == "doble")
            {
                MessageBox.Show("unica  y doble");
                Iniciovacio.sig1 = aux1.GetInicio();
                Iniciovacio.sig2 = aux2.GetInicio();
                aux1.GetFinal().sig1 = Finalvacio;
                aux2.GetFinal().sig1 = vacio2;
                vacio2.sig1 = Finalvacio;
                Pila.setTipo("doble");
            }
            else if (aux1.GetInicio().GetTranscision() == "or")
            {
                aux1.GetInicio().sig2 = Finalvacio;
                aux1.GetFinal().sig1  = Finalvacio;

                aux1.GetFinal().sig2 = aux1.GetInicio();

                Pila.setInicio(aux1.GetInicio());
                Pila.setTFinal(Finalvacio);
                Pila.setTipo("doble");
            }

            Pila.setInicio(Iniciovacio);

            Pila.setTFinal(Finalvacio);


            return(Pila);
        }
示例#14
0
 // new NodoTHomson("transicion", id) ;
 public void crearTerminales(NodoThomson nuevo)
 {
     this.Fin    = nuevo;
     this.Inicio = nuevo;
     this.tipo   = "unica";
 }
示例#15
0
 public ListaThomson(NodoThomson nuevo)
 {
     this.Fin    = nuevo;
     this.Inicio = nuevo;
     this.tipo   = "unica";
 }
示例#16
0
        public void Menu()
        {
            for (int i = Thomson.Count() - 1; i >= 0; i--)
            {
                Nodo aux = Thomson.ElementAt(i);


                if (aux.getT() == Nodo.TipoNodo.Terminal)
                {
                    NodoThomson  nuevo = new NodoThomson(aux.getDescripcion()); // ya guarda la transicion
                    ListaThomson li    = new ListaThomson(nuevo);
                    li.setTipo("unica");
                    PilaT.AddLast(li);
                }

                else if (aux.getT() == Nodo.TipoNodo.CerraduraA)
                {
                    ListaThomson aux1 = new ListaThomson();
                    aux1 = PilaT.Last();
                    PilaT.RemoveLast();
                    Asterisco    A = new Asterisco(aux1);
                    ListaThomson R = A.Unir();
                    PilaT.AddLast(R);
                }
                else if (aux.getT() == Nodo.TipoNodo.CerraduraI)
                {
                    ListaThomson aux1 = new ListaThomson();
                    aux1 = PilaT.Last();
                    PilaT.RemoveLast();
                    OR           A = new OR(aux1);
                    ListaThomson R = A.UnionI();
                    PilaT.AddLast(R);
                }

                else if (aux.getT() == Nodo.TipoNodo.Concatenacion)
                { // . ab
                  // sacar los 2 de la cima
                  // meter la lista resultante a la pila y cambiar el tipo

                    ListaThomson aux1 = new ListaThomson();
                    ListaThomson aux2 = new ListaThomson();
                    ListaThomson R    = new ListaThomson();
                    aux1 = PilaT.Last();
                    PilaT.RemoveLast();
                    aux2 = PilaT.Last();
                    PilaT.RemoveLast();
                    Punto_Concatenacion concatena = new Punto_Concatenacion(aux1, aux2);
                    ListaThomson        resultado = concatena.junta();
                    PilaT.AddLast(resultado);
                    // lo meto a la pila
                }
                else if (aux.getT() == Nodo.TipoNodo.OR)
                {
                    ListaThomson aux1 = new ListaThomson();
                    ListaThomson aux2 = new ListaThomson();
                    ListaThomson R    = new ListaThomson();
                    aux1 = PilaT.Last();
                    PilaT.RemoveLast();
                    aux2 = PilaT.Last();
                    PilaT.RemoveLast();
                    OR or = new OR(aux1, aux2);

                    R = or.Union();
                    PilaT.AddLast(R);
                }
                else if (aux.getT() == Nodo.TipoNodo.CerraduraP)
                {
                    ListaThomson aux1 = new ListaThomson();
                    ListaThomson aux2 = new ListaThomson();
                    ListaThomson R    = new ListaThomson();
                    aux1 = PilaT.Last();
                    PilaT.RemoveLast();


                    Mas mas = new Mas(aux1);
                    R = mas.Union();

                    PilaT.AddLast(R);
                }
                else if (aux.getT() == Nodo.TipoNodo.CerraduraI)
                {
                    ListaThomson aux1 = new ListaThomson();
                    ListaThomson aux2 = new ListaThomson();
                    ListaThomson R    = new ListaThomson();
                    aux1 = PilaT.Last();
                    PilaT.RemoveLast();


                    Mas mas = new Mas(aux1);
                    R = mas.Union();

                    PilaT.AddLast(R);
                }
            }
        }
示例#17
0
 public void setInicio(NodoThomson Inicio) //  XY
 {
     this.Inicio = Inicio;
 }
示例#18
0
 public void setTFinal(NodoThomson Final) //  XY
 {
     this.Fin = Final;
 }