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); }
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); }