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