Example #1
0
        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);
                }
            }
        }
Example #2
0
        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());
            }
        }