private void HacerNuevasTransiciones(Nodo <string> nodo, string item) { List <TransicionClass> transicionClasses = new List <TransicionClass>(); List <string> auxTran = new List <string>(); Queue <string> auxTransicionesTodo = ToDoTransicion; var trans = item.Split(','); List <int> Transicion = new List <int>(); foreach (var character in trans) { Transicion.Add(Convert.ToInt32(character)); } foreach (var simb in Simbolos) { List <int> auxis = new List <int>(); foreach (var tran in Transicion) { outRecursive = true; EncontrarPosicion(tran, nodo); if (aux.Valor == simb) { var Follow = TablaDeFollows.Find(x => x.Posicion == tran); var newList = auxis.Union(Follow.FollowValues); auxis = newList.ToList(); } } if (auxis.Count != 0) { auxis.Sort(); TransicionClass newCell = new TransicionClass(); newCell.Simbolo = simb; string Tran = ""; foreach (var TransicionAuxis in auxis) { Tran += TransicionAuxis.ToString(); Tran += ","; } if (Tran.EndsWith(",")) { Tran = Tran.TrimEnd(','); } newCell.Transicion = Tran; auxTran.Add(Tran); transicionClasses.Add(newCell); } else { string Tran = "-----"; TransicionClass newCell = new TransicionClass(); newCell.Simbolo = simb; newCell.Transicion = Tran; transicionClasses.Add(newCell); } } TablaDeTransiciones.Add(Transicion, transicionClasses); foreach (var newTran in auxTran) { if (!TransicionPresente.Contains(newTran)) { TransicionPresente.Add(newTran); ToDoTransicion.Enqueue(newTran); } } }
private void TablaDeTransicionesDo(Nodo <string> nodo) { List <TransicionClass> transicionClasses = new List <TransicionClass>(); List <int> Transicion = new List <int>(); foreach (var item in TablaDeFollows) { if (!Simbolos.Contains(item.Valor)) { Simbolos.Add(item.Valor); } } Transicion = nodo.First; foreach (var simb in Simbolos) { List <int> auxis = new List <int>(); foreach (var item in Transicion) { outRecursive = true; EncontrarPosicion(item, nodo); if (aux.Valor == simb) { var Follow = TablaDeFollows.Find(x => x.Posicion == item); var newList = auxis.Union(Follow.FollowValues); auxis = newList.ToList(); } } if (auxis.Count != 0) { auxis.Sort(); TransicionClass newCell = new TransicionClass(); newCell.Simbolo = simb; string Tran = ""; foreach (var item in auxis) { Tran += item.ToString(); Tran += ","; } if (Tran.EndsWith(",")) { Tran = Tran.TrimEnd(','); } newCell.Transicion = Tran; transicionClasses.Add(newCell); } else { string Tran = "-----"; TransicionClass newCell = new TransicionClass(); newCell.Simbolo = simb; newCell.Transicion = Tran; transicionClasses.Add(newCell); } } TablaDeTransiciones.Add(Transicion, transicionClasses); if (TablaDeTransiciones.Count == 1) { string tran = ""; foreach (var item in Transicion) { tran += item.ToString(); tran += ","; } if (tran.EndsWith(",")) { tran = tran.TrimEnd(','); } var ValuesDic = TablaDeTransiciones[Transicion]; foreach (var item in ValuesDic) { if (!item.Transicion.Equals(tran) && item.Transicion.CompareTo("-----") != 0) { if (!ToDoTransicion.Contains(item.Transicion)) { ToDoTransicion.Enqueue(item.Transicion); TransicionPresente.Add(item.Transicion); } } } } while (ToDoTransicion.Count != 0) { HacerNuevasTransiciones(nodo, ToDoTransicion.Dequeue()); } }