Пример #1
0
        public static void Ejecutar()
        {
            Log.Clear();
            Errores.Clear();
            Respuesta.Clear();

            if (Master.GetUsuario("admin") == null)
            {
                Master.AddUsuario("admin", "admin");
            }

            AnalizadorLUP analizador = new AnalizadorLUP();

            if (analizador.AnalizarEntrada(Entrada))
            {
                ASTLUP ast = (ASTLUP)analizador.GenerarArbol(analizador.Raiz.Root);

                if (ast != null)
                {
                    ast.Ejecutar(Log, Errores, Respuesta, Master);
                }
                else
                {
                    Respuesta.AddLast(new Salida(1, "[+MESSAGE]\n\tError en Paquete LUP.\n[-MESSAGE]"));
                }
            }
            else
            {
                Respuesta.AddLast(new Salida(1, "[+MESSAGE]\n\tError en Paquete LUP.\n[-MESSAGE]"));
            }

            //Agregar error en archivo a errores

            /*
             * AnalizadorCQL analizador = new AnalizadorCQL();
             *
             * if (analizador.AnalizarEntrada(Entrada))
             * {
             *  ASTCQL ast = (ASTCQL)analizador.GenerarArbol(analizador.Raiz.Root);
             *
             *  if (ast != null)
             *  {
             *      ast.Ejecutar(Log, Errores, Master);
             *  }
             * }
             */
        }
Пример #2
0
        public void Ejecutar(LinkedList <Salida> log, LinkedList <Error> errores)
        {
            MasterBD master = new MasterBD(); //aqui iran todas las tablas

            master.AddUsuario("admin", "admin");

            Entorno global = new Entorno(null);

            global.Global = global;
            global.Master = master;

            object obj;

            foreach (NodoASTCQL stmt in Sentencias)
            {
                if (stmt is FuncionDef fun)
                {
                    obj = fun.Ejecutar(global, false, false, false, false, log, errores);

                    if (obj is Throw th)
                    {
                        errores.AddLast(new Error("Semántico", "Excepción no Controlada: " + th.Id + ".", th.Linea, th.Columna));
                    }
                }
            }

            foreach (NodoASTCQL stmt in Sentencias)
            {
                if (stmt is Instruccion instr)
                {
                    if (!(stmt is FuncionDef))
                    {
                        obj = instr.Ejecutar(global, false, false, false, false, log, errores);

                        if (obj != null)
                        {
                            if (obj is Throw th)
                            {
                                errores.AddLast(new Error("Semántico", "Excepción no Controlada: " + th.Id + ".", th.Linea, th.Columna));
                            }
                            else if (obj is Break bk)
                            {
                                errores.AddLast(new Error("Semántico", "Sentencia break no se encuentra dentro de un switch o ciclo.", bk.Linea, bk.Columna));
                            }
                            else if (obj is Continue co)
                            {
                                errores.AddLast(new Error("Semántico", "Sentencia continue no se encuentra dentro de un ciclo.", co.Linea, co.Columna));
                            }
                            else if (obj is Return re)
                            {
                                errores.AddLast(new Error("Semántico", "Sentencia return no se encuentra dentro de una función o procedimiento.", re.Linea, re.Columna));
                            }
                        }
                    }
                }
                else if (stmt is Expresion expr)
                {
                    if (expr is FuncionCall fun)
                    {
                        fun.IsExpresion = false;
                    }

                    obj = expr.GetValor(global, log, errores);

                    if (obj is Throw th)
                    {
                        errores.AddLast(new Error("Semántico", "Excepción no Controlada: " + th.Id + ".", th.Linea, th.Columna));
                    }
                }
            }
        }