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

            if (Estructura1 is Terminal term)
            {
                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(term, n3);
                n2.Transiciones.AddLast(tra2);
                Transicion tra3 = new Transicion(epsilon, n2);
                n3.Transiciones.AddLast(tra3);
                n4 = new Nodo(n++);
                Transicion tra4 = new Transicion(epsilon, n4);
                n3.Transiciones.AddLast(tra4);
                Transicion tra5 = new Transicion(epsilon, n4);
                n1.Transiciones.AddLast(tra5);
                this.SetFirst(n1);
                this.SetLast(n4);
                listaNodos.AddLast(n1);
                listaNodos.AddLast(n2);
                listaNodos.AddLast(n3);
                listaNodos.AddLast(n4);
            }
            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();
                Transicion tra2 = new Transicion(epsilon, n2);
                n3.Transiciones.AddLast(tra2);
                n4 = new Nodo(n++);
                Transicion tra4 = new Transicion(epsilon, n4);
                n3.Transiciones.AddLast(tra4);
                Transicion tra5 = new Transicion(epsilon, n4);
                n1.Transiciones.AddLast(tra5);
                this.SetFirst(n1);
                this.SetLast(n4);
            }
            return(null);
        }
コード例 #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);
 }