private void btnAnalizar_Click(object sender, EventArgs e) { this.cbxExpresion.Items.Clear(); this.richConsola.Text = ""; CreatePage page = new CreatePage(); AnalizadorLexico analizadorLexico = new AnalizadorLexico(); ListaTk = analizadorLexico.analizar(tab.searchTxt()); //Optenemos la lista de tokens ListaErr = analizadorLexico.getListErr(); //Optenemos la lista de erros if (ListaErr.Count == 0) //En dado caso la lista de errores este vacia, podremos imprimir la lista de tokens { // xml.Tokens(ListaTk); page.pageTokens(ListaTk); AnalizarTokens analizarTK = new AnalizarTokens(ListaTk); analizarTK.analizarTokens(); foreach (var item in analizarTK.LstThompson) { Graficador graficador = new Graficador(); //* Gra gra = new Gra(); //* gra.graficar(item.Raiz.dot(), item.NameEr); //Mandamos el contenido del dot y el nombre que contendra el archivo(sera el mismo de la expresion) //* gra.abrirGrafo(); graficador.graficar(item.Raiz.dot(), item.NameEr); //Mandamos el contenido del dot y el nombre que contendra el archivo(sera el mismo de la expresion) // graficador.abrirGrafo(); graficador.graficar(item.Transiciones.dot(), item.NameEr + "-table"); // graficador.abrirGrafo(); graficador.graficar(item.Transiciones.dotAFD(), item.NameEr + "-AFD"); // graficador.abrirGrafo graficador.graficar(item.Transiciones.dotTableC(), item.NameEr + "-tableC"); File.WriteAllText(item.NameEr + ".xml", "Reporete Tokens de la expresion regular: " + item.NameEr + " \n \n"); this.cbxExpresion.Items.Add(item.NameEr); this.cbxExpresion.SelectedIndex = 0; } foreach (var item in analizarTK.LstLexamas) { richConsola.Text += "Lexema: " + item.Cadena + " de la expresion: " + item.ExpresionName + " es: " + item.Valido.ToString() + "\n"; xml.Tokens(item.LstToken, " Tokens de lexema \"" + item.Cadena + "\" \n", item.ExpresionName); xml.Errores(item.LstErrores, " Errores de lexema \"" + item.Cadena + "\" \n", item.ExpresionName); } MessageBox.Show("Analicis Correcto"); } else //de lo contrario imprimeremos la lista de errores { page.pageError(ListaErr); //xml.Errores(ListaErr); } }
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 static LinkedList<Background> lista_background = new LinkedList<Background>(); //private static LinkedList<Figure> lista_figure = new LinkedList<Figure>(); //private static LinkedList<Design> lista_design = new LinkedList<Design>(); public static bool analizar1(String entrada) { Gramatica1 gramatica = new Gramatica1(); LanguageData lenguaje = new LanguageData(gramatica); Parser parser = new Parser(lenguaje); ParseTree arbol = parser.Parse(entrada); ParseTreeNode raiz = arbol.Root; if (arbol.Root == null) { Analizadores.Error error; for (int i = 0; i < arbol.ParserMessages.Count(); i++) { String tipo; String mensaje = arbol.ParserMessages.ElementAt(i).Message; int line = arbol.ParserMessages.ElementAt(i).Location.Line;; int column = arbol.ParserMessages.ElementAt(i).Location.Column; if (arbol.ParserMessages.ElementAt(i).Message.Contains("Invalid")) { tipo = "Lexico"; error = new Error(tipo, mensaje, line, column); Form1.LErrores.Add(error); } else { tipo = "Sintactico"; error = new Error(tipo, mensaje, line, column); Form1.LErrores.Add(error); } } return(false); } else { Analizadores.Error error; for (int i = 0; i < arbol.ParserMessages.Count(); i++) { String tipo; String mensaje = arbol.ParserMessages.ElementAt(i).Message; int line = arbol.ParserMessages.ElementAt(i).Location.Line;; int column = arbol.ParserMessages.ElementAt(i).Location.Column;; if (arbol.ParserMessages.ElementAt(i).Message.Contains("Invalid")) { tipo = "Lexico"; error = new Error(tipo, mensaje, line, column); Form1.LErrores.Add(error); } else { tipo = "Sintactico"; error = new Error(tipo, mensaje, line, column); Form1.LErrores.Add(error); } } Graficador r = new Graficador(); r.graficar(arbol); recorrer(arbol.Root); //r.GraficarFlujo(); //Ejecucion.Ejecutor ejecutor = new Ejecucion.Ejecutor(); //ejecutor.ejecutarAST(arbol.Root); // ya tenes lo de consola //Form1 form = new Form1(); //String consola = ejecutor.salida.ToString(); return(true); } }
private void button1_Click(object sender, System.EventArgs e) { if (!TextArea.Text.Equals(string.Empty)) { Consola.Text = ""; Gramatica grammar = new Gramatica(); LanguageData lenguaje = new LanguageData(grammar); Parser parser = new Parser(lenguaje); ParseTree arbol = parser.Parse(TextArea.Text); if (arbol.ParserMessages.Count != 0) { MessageBox.Show("Se han encontrado errores", "Errores", MessageBoxButtons.OK, MessageBoxIcon.Error); List <LogMessage> errores = arbol.ParserMessages; foreach (LogMessage error in errores) { if (error.Message.Contains("Sintax")) { Consola.AppendText("Error Sintactico, " + error.Message + " Linea: " + error.Location.Line + ", Columna: " + error.Location.Column); } else { Consola.AppendText("Error Lexico, " + error.Message + " Linea: " + error.Location.Line + ", Columna: " + error.Location.Column); } } } else { GeneradorAST generadorAST = new GeneradorAST(arbol); AST ast = generadorAST.arbol; Entorno ent = new Entorno(null); if (ast != null) { foreach (Instruccion ins in ast.Instrucciones) { ins.ejecutar(ent, ast); } if (ast.existeFuncion("main")) { Funcion main = ast.getFuncion("main"); foreach (Instruccion ins in main.instrucciones) { ins.ejecutar(ent, ast); } } else { MessageBox.Show("No se encontró la funcion main!!", "Errores", MessageBoxButtons.OK, MessageBoxIcon.Error); } Graficador j = new Graficador(); j.graficar(arbol.Root); } else { MessageBox.Show("Error generando el AST", "Errores", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } }
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"); } } }