Exemplo n.º 1
0
        public override object Numerar(ref LinkedList <Nodo> listaNodos, ref int n)
        {
            Terminal epsilon = new Terminal(Terminal.Tipo.EPSILON, "ε");

            if (Estructura1 is Terminal term1)
            {
                n1 = new Nodo(n++);
                n2 = new Nodo(n++);
                Transicion tra1 = new Transicion(epsilon, n2);
                n1.Transiciones.AddLast(tra1);
                n3 = new Nodo(n++);
                Transicion tra2 = new Transicion(term1, n3);
                n2.Transiciones.AddLast(tra2);
                if (Estructura2 is Terminal term2)
                {
                    n4 = new Nodo(n++);
                    Transicion tra3 = new Transicion(epsilon, n4);
                    n1.Transiciones.AddLast(tra3);
                    n5 = new Nodo(n++);
                    Transicion tra4 = new Transicion(term2, n5);
                    n4.Transiciones.AddLast(tra4);
                    n6 = new Nodo(n++);
                    Transicion tra5 = new Transicion(epsilon, n6);
                    n3.Transiciones.AddLast(tra5);
                    Transicion tra6 = new Transicion(epsilon, n6);
                    n5.Transiciones.AddLast(tra6);
                    listaNodos.AddLast(n1);
                    listaNodos.AddLast(n2);
                    listaNodos.AddLast(n3);
                    listaNodos.AddLast(n4);
                    listaNodos.AddLast(n5);
                    listaNodos.AddLast(n6);
                }
                else
                {
                    Estructura2.Numerar(ref listaNodos, ref n);
                    n4 = Estructura2.GetFirst();
                    Transicion tra3 = new Transicion(epsilon, n4);
                    n1.Transiciones.AddLast(tra3);
                    n5 = Estructura2.GetLast();
                    n6 = new Nodo(n++);
                    Transicion tra5 = new Transicion(epsilon, n6);
                    n3.Transiciones.AddLast(tra5);
                    Transicion tra6 = new Transicion(epsilon, n6);
                    n5.Transiciones.AddLast(tra6);
                    listaNodos.AddLast(n1);
                    listaNodos.AddLast(n2);
                    listaNodos.AddLast(n3);
                    listaNodos.AddLast(n6);
                }
            }
            else
            {
                n1 = new Nodo(n++);
                Estructura1.Numerar(ref listaNodos, ref n);
                n2 = Estructura1.GetFirst();
                Transicion tra1 = new Transicion(epsilon, n2);
                n1.Transiciones.AddLast(tra1);
                n3 = Estructura1.GetLast();
                if (Estructura2 is Terminal term2)
                {
                    n4 = new Nodo(n++);
                    Transicion tra3 = new Transicion(epsilon, n4);
                    n1.Transiciones.AddLast(tra3);
                    n5 = new Nodo(n++);
                    Transicion tra4 = new Transicion(term2, n5);
                    n4.Transiciones.AddLast(tra4);
                    n6 = new Nodo(n++);
                    Transicion tra5 = new Transicion(epsilon, n6);
                    n3.Transiciones.AddLast(tra5);
                    Transicion tra6 = new Transicion(epsilon, n6);
                    n5.Transiciones.AddLast(tra6);
                    listaNodos.AddLast(n1);
                    listaNodos.AddLast(n4);
                    listaNodos.AddLast(n5);
                    listaNodos.AddLast(n6);
                }
                else
                {
                    Estructura2.Numerar(ref listaNodos, ref n);
                    n4 = Estructura2.GetFirst();
                    Transicion tra3 = new Transicion(epsilon, n4);
                    n1.Transiciones.AddLast(tra3);
                    n5 = Estructura2.GetLast();
                    n6 = new Nodo(n++);
                    Transicion tra5 = new Transicion(epsilon, n6);
                    n3.Transiciones.AddLast(tra5);
                    Transicion tra6 = new Transicion(epsilon, n6);
                    n5.Transiciones.AddLast(tra6);
                    listaNodos.AddLast(n1);
                    listaNodos.AddLast(n6);
                }
            }
            this.SetFirst(n1);
            this.SetLast(n6);
            return(null);
        }
Exemplo n.º 2
0
 public override object Numerar(ref LinkedList <Nodo> listaNodos, ref int n)
 {
     if (Estructura1 is Terminal term1)
     {
         //.ab
         if (Estructura2 is Terminal term2)
         {
             n1 = new Nodo(n++);
             n2 = new Nodo(n++);
             Transicion tra1 = new Transicion(term1, n2);
             n1.Transiciones.AddLast(tra1);
             n3 = new Nodo(n++);
             Transicion tra2 = new Transicion(term2, n3);
             n2.Transiciones.AddLast(tra2);
             this.SetFirst(n1);
             this.SetLast(n3);
             listaNodos.AddLast(n1);
             listaNodos.AddLast(n2);
             listaNodos.AddLast(n3);
         }
         //.a.bc
         else
         {
             n1 = new Nodo(n++);
             Estructura2.Numerar(ref listaNodos, ref n);
             n2 = Estructura2.GetFirst();
             Transicion tra1 = new Transicion(term1, n2);
             n1.Transiciones.AddLast(tra1);
             this.SetFirst(n1);
             this.SetLast(Estructura2.GetLast());
             listaNodos.AddLast(n1);
         }
     }
     else
     {
         Estructura1.Numerar(ref listaNodos, ref n);
         n2 = Estructura1.GetLast();
         //..abc
         if (Estructura2 is Terminal term2)
         {
             n3 = new Nodo(n++);
             Transicion tra = new Transicion(term2, n3);
             n2.Transiciones.AddLast(tra);
             this.SetFirst(Estructura1.GetFirst());
             this.SetLast(n3);
             listaNodos.AddLast(n3);
         }
         //..ab.cd
         else
         {
             Estructura2.Numerar(ref listaNodos, ref n);
             Terminal epsilon = new Terminal(Terminal.Tipo.EPSILON, "ε");
             n3 = Estructura2.GetFirst();
             Transicion tra = new Transicion(epsilon, n3);
             n2.Transiciones.AddLast(tra);
             this.SetFirst(Estructura1.GetFirst());
             this.SetLast(Estructura2.GetLast());
         }
     }
     return(null);
 }