private void analizar_Click(object sender, EventArgs e) { try { string text = System.IO.File.ReadAllText(@"entrada.txt"); Gramatica grammar = new Gramatica(); LanguageData lenguaje = new LanguageData(grammar); Parser parser = new Parser(lenguaje); ParseTree arbol = parser.Parse(text); ParseTreeNode raiz = arbol.Root; ConstructorAST builder = new ConstructorAST(); if (arbol.ParserMessages.Count == 0) { Graficador j = new Graficador(); j.graficar(arbol.Root); ConstructorAST an = new ConstructorAST(); AST auxArbol = an.Analizar(arbol.Root); if (auxArbol != null) { auxArbol.ejecutar(); } else { MessageBox.Show("No gener bien mi arbol aux en form1"); } } else { for (int i = 0; i < arbol.ParserMessages.Count; i++) { int fila = arbol.ParserMessages.ElementAt(i).Location.Line + 1; MessageBox.Show("USL-Mensaje: " + arbol.ParserMessages.ElementAt(i).Message + " Linea: " + fila + " Columna: " + arbol.ParserMessages.ElementAt(i).Location.Column); } MessageBox.Show("Hay errores lexicos o sintacticos\n El arbol de Irony no se construyo. Cadena invalida!\n"); } } catch (Exception ex) { MessageBox.Show(ex.Message + " " + ex.Source + " " + ex.ToString()); } }
private void Analizar() { if (!txtEntrada.Text.Equals(string.Empty)) { Gramatica grammar = new Gramatica(); LanguageData lenguaje = new LanguageData(grammar); Parser parser = new Parser(lenguaje); ParseTree arbol = parser.Parse(txtEntrada.Text); if (arbol.ParserMessages.Count == 0) { MessageBox.Show("Cadena valida"); Grafica j = new Grafica(); j.graficar(arbol.Root); ConstructorAST constructorAST = new ConstructorAST(); AST ast = constructorAST.Analizar(arbol.Root); if (ast != null) { Entorno global = new Entorno(); foreach (INodoAST ins in ast.instrucciones) { if (ins is IInstruccion) { ((IInstruccion)ins).Ejecutar(global); } } } else { MessageBox.Show("No se logro construir el AST :("); } } else { MessageBox.Show("Existen errores en la entrada"); } } }
private void btnInterpretar_Click(object sender, EventArgs e) { if (!txtEntrada.Text.Equals(string.Empty)) { Gramatica grammar = new Gramatica(); LanguageData lenguaje = new LanguageData(grammar); Parser parser = new Parser(lenguaje); ParseTree arbol = parser.Parse(txtEntrada.Text); if (arbol.ParserMessages.Count == 0) { Graficador j = new Graficador(); j.graficar(arbol.Root); ConstructorAST an = new ConstructorAST(); AST auxArbol = an.Analizar(arbol.Root); Entorno global = new Entorno(null); try { if (auxArbol != null) { foreach (Instruccion ins in auxArbol.Instrucciones) { if (ins is Funcion) { Funcion funcion = (Funcion)ins; global.agregar(funcion.Identificador, funcion); foreach (NodoAST instruccion in funcion.Instrucciones) { if (instruccion is DefinicionStruct) { DefinicionStruct crear = (DefinicionStruct)instruccion; crear.ejecutar(global, auxArbol); } } } if (ins is Declaracion) { Declaracion declaracion = (Declaracion)ins; declaracion.ejecutar(global, auxArbol); } if (ins is DefinicionStruct) { DefinicionStruct crear = (DefinicionStruct)ins; crear.ejecutar(global, auxArbol); } } foreach (Instruccion ins in auxArbol.Instrucciones) { if (ins is Main) { Main main = (Main)ins; foreach (NodoAST instruccion in main.Instrucciones) { if (instruccion is DefinicionStruct) { DefinicionStruct crear = (DefinicionStruct)instruccion; crear.ejecutar(global, auxArbol); } } Entorno local = new Entorno(global); main.ejecutar(local, auxArbol); } } } else { MessageBox.Show("El arbol de Irony no se construyo. Cadena invalida!\n"); } } catch (Exception ex) { MessageBox.Show(ex.ToString()); } } else { // Aca deben gestionar esos errores :) MessageBox.Show("Hay errores lexicos o sintacticos\n El arbol de Irony no se construyo. Cadena invalida!\n"); } } }