private bool Optimizar(List <string> pila) { int terminales = 0; for (int i = 0; i < pila.Count; i++) { for (int j = 0; j < gramatica.GetTerminales().Count; j++) { if (pila[i].Equals(gramatica.GetTerminales()[j])) { ++terminales; if (cadena.Length < terminales) { return(false); } break; } } } for (int i = 0; i < listaTerminales.Count; i++) { int conteo = 0; for (int j = 0; j < cadena.Length; j++) { if (cadena[j].ToString().Equals(listaTerminales[i])) { conteo++; } } if (conteo > listaNumeroTerminales[i]) { return(false); } } return(true); }
public void ConvertirGramaticaAutomata() { List <string> noTerminales = gramatica.GetNoTerminales(); List <string> terminales = gramatica.GetTerminales(); string noTerminalActual = ""; Regla regla = new Regla("q0", "#", "Z", "q1", gramatica.GetSimboloInicial() + "Z"); reglas.Add(regla); for (int i = 0; i < gramatica.GetNoTerminales().Count; i++) { noTerminalActual = noTerminales[i].ToString(); //Para cada regla variable con no terminales for (int j = 0; j < gramatica.GetProducciones().Count; j++) { if (noTerminalActual.Equals(gramatica.GetProducciones()[j].GetLadoIzquierdo().ToString())) { regla = new Regla("q1", "#", noTerminalActual, "q1", gramatica.GetProducciones()[j].GetLadoDerecho().ToString()); reglas.Add(regla); } else { continue; } } } //Para cada terminal for (int i = 0; i < terminales.Count; i++) { regla = new Regla("q1", terminales[i].ToString(), terminales[i].ToString(), "q1", "#"); reglas.Add(regla); } regla = new Regla("q1", "#", "Z", "q2", "Z"); reglas.Add(regla); }