示例#1
0
        private void importsPrincipal(string ruta, string nombre, Ejecucion_ manager)
        {
            //1.-Reviso si existe el archivo
            if (!System.IO.File.Exists(System.IO.Path.Combine(ruta, nombre)))
            {
                return;
            }
            //2.-Si existe analizo el archivo
            string texto_analizar = Archivo.abrir(ruta);

            //3.-Primero reviso que el archivo si dio algo
            if (string.IsNullOrEmpty(texto_analizar))
            {
                manager.addError(new Nodo(0, 0, "No se pudo importar:" + nombre + ", el archivo no existe", "<error>"));
                return;
            }
            ParseTree arbol = Analisis.analizar(texto_analizar);

            //4.-Reviso si el analisis fue exitoso
            if (arbol == null)
            {
                //5.-agrego los errores a manager

                //manager.addError(new Nodo(0, 0, "No se pudo importar:" + nombre + ", el archivo no existe", "<error>"));
                return;
            }
            //4.-Si el analisis fue exitoso transformo la raiz y agrego a manager las nuevas variables y funciones
        }
示例#2
0
        private void agregarErroresLS(Ejecucion_ manager, ParseTree arbol)
        {
            int limite = arbol.ParserMessages.Count;

            Irony.LogMessage actual;
            for (int i = 0; i < limite; i++)
            {
                actual = arbol.ParserMessages[i];
                manager.addError(new Nodo(actual.Location.Line, actual.Location.Column, actual.ToString(), "<error>"));
            }
        }
示例#3
0
        private void ejecutar()
        {
            //0.-Limpiamos la consola de salida y de errores
            tbox_consola1.Clear();
            tbox_consola2.Clear();
            string texto = currentTextBox().Text;

            //1.-revisamos que no este vacio el textbox
            if (string.IsNullOrEmpty(texto))
            {
                MessageBox.Show("Por favor, elija un documento que no este vacio", "Advertencia");
                return;
            }
            //2.-Analizamos el texto y obtenemos su raiz
            ParseNode raiz  = null;//raiz modificada
            ParseTree arbol = Analisis.analizar(texto);

            //raiz = Analisis.analizar(texto);

            /*
             * //3.-Generamos un manager pero no inicia a ejecutar aun
             * //antes debemos recuperar imports, ruta de guardado y los otros archivos
             * raiz = new ParseNode(0, 0, "<S>");
             * Analisis.miAST(arbol.Root, raiz);
             * execute_manager = new Ejecucion_(raiz, tbox_consola1);
             * status_label_ejecucion.Text = raiz.ToString();
             */
            //3.-Si la raiz es nula, hay errores sintacticos y lexicos
            if (arbol.Root == null || arbol.ParserMessages.Count > 0)
            {
                //agregamos un mensaje de errores en cosola 2 pendiente
                //tbox_consola2.Text = "Hubo errores lexicos/sintacticos en su programa";//debug
                // agregarErroresLS(execute_manager, arbol);//agregamos los errores a execute_manager

                /*int limite = arbol.ParserMessages.Count;
                 * string error = "";
                 * for (int i = 0; i < limite; i++)
                 * {
                 *  error = arbol.ParserMessages[i].ToString() + " en Linea:" + arbol.ParserMessages[i].Location.Line + " en Columna:" + arbol.ParserMessages[i].Location.Column;
                 *  addErrorText(error);
                 * }*/
                return;
            }


            //4.-Ejecutamos la raiz
            //antes debemos recuperar imports, ruta de guardado y los otros archivos
            raiz = new ParseNode(0, 0, "<S>");
            Analisis.miAST(arbol.Root, raiz);
            execute_manager             = new Ejecucion_(raiz, tbox_consola1);
            status_label_ejecucion.Text = raiz.ToString();
        }
示例#4
0
        //private void setParametrosIniciales()
        #endregion
        #region Auxiliar a Ejecucion
        private void definesImports(ParseNode raiz, Ejecucion_ manager)
        {
            double        incerteza  = 0;
            string        ruta_album = null;
            List <string> imports    = new List <string>();

            //1.-busco en la raiz sus imports y su incerteza
            foreach (ParseNode hijo in raiz.childNodes)
            {
                if ("<IMPORTS>".Equals(hijo.ToString()))
                {
                    //cada import que tenga, agrego a la lista
                    foreach (ParseNode import in hijo.childNodes)
                    {
                        imports.Add(import.ToString() + ".clr");
                    }
                }
                else if ("<DEFINES>".Equals(hijo.ToString()))
                {
                    //cada define que tenga agrego a la lista
                    foreach (ParseNode define in hijo.childNodes)
                    {
                        if ("Cadena".Equals(hijo.Tipo) && ruta_album == null)
                        {
                            ruta_album = hijo.ToString();
                        }
                        else if ("Double".Equals(hijo.Tipo) && incerteza == 0)
                        {
                            incerteza = double.Parse(hijo.ToString());
                        }
                    }
                }
            }
            //2.-Agregamos los parametros de incerteza y ruta a manager
            manager.establecerIncertezaRuta(incerteza, ruta_album);
            //3.-Una vez tenga la incerteza, la ruta album y los imports, procedo a analizar las otras
            //clases recursivamente(porque pueden tener imports por su cuenta) y a setear los parametros en
            //manager
        }