public AnalizadorSintactico(string path) { gramatica = new Gramatica.Gramatica(path); tabla = gramatica.ArmarTablaAnalisis(); cantElementosCadenaEntrada = Convert.ToInt32(CompiladorGargar.Properties.Resources.CantElementosCadenaEntrada); finArch = false; cantErroresSintacticos = 0; cantParentesisAbiertos = 0; AnalizadorLexico = new AnalizadorLexicografico(); }
public TablaAnalisisGramatica ArmarTablaAnalisis() { try { TablaAnalisisGramatica tabla = new TablaAnalisisGramatica(); List <Terminal> termsPrim = new List <Terminal>(); List <Terminal> termsSig = new List <Terminal>(); foreach (NoTerminal nt in noTerminales) { foreach (Produccion prod in this.ObtenerListaProduccionesParaUnNoTerminal(nt)) { termsPrim = new List <Terminal>(); termsSig = new List <Terminal>(); //if (nt.Nombre == "CONSTANTES") //{ // Debugger.Break(); //} //termsPrim.AddRange(this.Primeros(nt,prod)); RetornoPrimeros rt = this.tablaPrimeros.Primeros(nt, prod, false); termsPrim.AddRange(rt.Terminales); tabla.AgregarPrimeros(nt, termsPrim, prod); bool existeLamba = termsPrim.Exists( delegate(Terminal _t) { if (_t.Componente.Token == ComponenteLexico.TokenType.Ninguno) { return(true); } else { return(false); } } ); if (existeLamba) { termsSig.AddRange(this.Siguientes(nt)); tabla.AgregarSiguientes(nt, termsSig); } } //if (nt.Nombre == "CON") //{ // if (Debugger.IsAttached) // { // Debugger.Break(); // } //} termsSig = new List <Terminal>(); termsSig.AddRange(this.Siguientes(nt)); tabla.AgregarSincronizacion(nt, termsSig); } return(tabla); } catch (Exception ex) { Utils.Log.AddError(ex.Message); throw new Exception("Error al crear la tabla de analisis"); } }