示例#1
0
        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);
            }
        }
示例#2
0
        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());
            }
        }
示例#3
0
        //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);
            }
        }
示例#4
0
        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);
                    }
                }
            }
        }
示例#5
0
 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");
         }
     }
 }