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