public List <string> ValidarActions()
        {
            bool                  concatenacion = true; int count = 0;
            List <string>         listadeNodostemp     = new List <string>();
            List <List <string> > listaexpresionestemp = new List <List <string> >();
            List <string>         listadeNodos         = new List <string>();

            // List<string> listadeNodos = new List<string>{ "(", "(", "a", "|", "b", ")", "+", "|", "c", "*", ")", "+" };
            foreach (var item in TokenDic.Values)
            {
                listadeNodos.Clear();
                listadeNodostemp.Clear();
                foreach (var dato in item)
                {
                    if (dato != "(" && dato != "*" && dato != "?" && dato != "+" && dato != ")" && dato != "|")
                    {
                        if (concatenacion == true)
                        {
                            listadeNodostemp.Clear();
                            listadeNodostemp.AddRange(listadeNodos);
                            listadeNodos.Clear();
                            if (listadeNodostemp.Count > 0)
                            {
                                listadeNodos.Add("(");
                                listadeNodos = listadeNodos.Concat(listadeNodostemp).ToList();
                                listadeNodos.Add(".");
                                listadeNodos.Add(dato);
                                listadeNodos.Add(")");
                            }
                            else
                            {
                                listadeNodos.Add(dato);
                            }
                            concatenacion = true;
                        }
                        else
                        {
                            listadeNodostemp.Clear();
                            listadeNodostemp.AddRange(listadeNodos);
                            listadeNodos.Clear();
                            listadeNodos.Add("(");
                            listadeNodos = listadeNodos.Concat(listadeNodostemp).ToList();
                            listadeNodos.Add(dato);
                            listadeNodos.Add(")");
                            concatenacion = true;
                        }
                    }
                    else if (dato == "|")
                    {
                        listadeNodos.Add(dato);
                        concatenacion = false;
                    }
                    else
                    {
                        listadeNodos.Add(dato);
                    }
                }
                count++;
                if (count <= TokenDic.Values.Count)
                {
                    listadeNodostemp.Clear();
                    listadeNodostemp.AddRange(listadeNodos);
                    listadeNodos.Clear();
                    if (listadeNodostemp.ElementAt(listadeNodostemp.Count - 1) != ")")
                    {
                        listadeNodos.Add("(");
                        listadeNodos.AddRange(listadeNodostemp);
                        listadeNodos.Add(")");
                    }
                    else
                    {
                        listadeNodos.AddRange(listadeNodostemp);
                    }
                    List <string> temp = new List <string>();
                    temp.AddRange(listadeNodos);
                    listaexpresionestemp.Add(temp);
                    concatenacion = true;
                }
            }
            listadeNodos.Clear();
            foreach (var expresion in listaexpresionestemp)
            {
                listadeNodostemp.Clear();
                listadeNodostemp.AddRange(listadeNodos);
                listadeNodos.Clear();
                if (listadeNodostemp.Count > 0)
                {
                    listadeNodos.Add("(");
                    listadeNodos = listadeNodos.Concat(listadeNodostemp).ToList();
                    listadeNodos.Add("|");
                    listadeNodos.AddRange(expresion);
                    listadeNodos.Add(")");
                }
                else
                {
                    listadeNodos.AddRange(expresion);
                }
            }
            //List<string> listadeNodos = new List<string> {  "a" };
            // arbol.prueba();
            graph = arbol.CreateTree(listadeNodos, 0, 0);
            //Asigno first
            vertice graph1 = arbol.AssignFirst(graph, graph.head);
            //Asigno Last
            vertice graph2 = arbol.AssignLast(graph, graph.head);
            int     nt     = arbol.NoTerminales;

            Follows = arbol.AssignFollow(graph);

            foreach (var vertu in graph.vertices)
            {
                List <List <string> > TempData = new List <List <string> >();
                if (vertu.Value.value != "*" && vertu.Value.value != "+" && vertu.Value.value != "?" && vertu.Value.value != "|" && vertu.Value.value != "." && transitions.Keys.Contains(vertu.Value.value) == false)
                {
                    transitions.Add(vertu.Value.value, TempData);
                }
            }


            P.Add(1, graph.vertices.ToList().FirstOrDefault(x => x.Key == 1).Value.First);
            try
            {
                P = arbol.CreateTransitions(graph, transitions, P, 1);
            }
            catch
            {
                string p = string.Empty;
            }
            error.Add("fin");
            return(actions);
        }