private bool validaCadena(List <string> listTokens) { Stack <PilaASTokens> stack = new Stack <PilaASTokens>(); string accion = ""; PilaASTokens sPila = new PilaASTokens("$", 0, "$0"); bool valido = false; Produccion p; string tabla; int i = 0; listTokens.Add("$"); stack.Push(sPila); while (i < listTokens.Count && valido == false) { sPila = stack.Peek(); accion = this.buscaEnTabla(sPila.numEdo, listTokens.ElementAt(i) /*cadValidar[0].ToString()*/); if (accion != "") { dgvTAcciones.Rows.Add(stack.Peek().pila, listTokens.ElementAt(i), accion); switch (accion[0]) { case 's': //desplazamiento stack.Push(new PilaASTokens(listTokens.ElementAt(i), int.Parse(accion.Substring(1)), stack.Peek().pila + listTokens.ElementAt(i) + accion.Remove(0, 1))); i++; break; case 'r': //reduccion p = this.afd.buscaProduccion(int.Parse(accion.Substring(1).ToString())); for (int j = 0; j < p.listProd.Count; j++) { stack.Pop(); } tabla = p.nT.token + int.Parse(this.buscaEnTabla(stack.Peek().numEdo, p.nT.token)); stack.Push(new PilaASTokens(p.nT.token, int.Parse(this.buscaEnTabla(stack.Peek().numEdo, p.nT.token)), stack.Peek().pila + tabla)); break; case 'A': //aceptar case 'a': valido = true; break; } } else { break; } } return(valido); }
private bool validaCadena(List<string> listTokens) { Stack<PilaASTokens> stack = new Stack<PilaASTokens>(); string accion=""; PilaASTokens sPila = new PilaASTokens("$",0,"$0"); bool valido = false; Produccion p; string tabla; int i = 0; listTokens.Add("$"); stack.Push(sPila); while(i<listTokens.Count && valido == false) { sPila = stack.Peek(); accion = this.buscaEnTabla(sPila.numEdo, listTokens.ElementAt(i)/*cadValidar[0].ToString()*/); if (accion != "") { dgvTAcciones.Rows.Add(stack.Peek().pila, listTokens.ElementAt(i), accion); switch (accion[0]) { case 's' : //desplazamiento stack.Push(new PilaASTokens(listTokens.ElementAt(i), int.Parse(accion.Substring(1)),stack.Peek().pila+ listTokens.ElementAt(i) + accion.Remove(0,1))); i++; break; case 'r' : //reduccion p = this.afd.buscaProduccion(int.Parse(accion.Substring(1).ToString())); for(int j =0;j<p.listProd.Count;j++) { stack.Pop(); } tabla = p.nT.token + int.Parse(this.buscaEnTabla(stack.Peek().numEdo, p.nT.token)); stack.Push(new PilaASTokens(p.nT.token, int.Parse(this.buscaEnTabla(stack.Peek().numEdo, p.nT.token)),stack.Peek().pila+tabla)); break; case 'A' ://aceptar case 'a' : valido = true; break; } } else { break; } } return valido; }