コード例 #1
0
 /*
  * Constructor de la clase padre
  * @ts tabla de simbolos padre
  * @user usuario que esta ejecutando las acciones
  * @baseD string por referencia de que base de datos estamos trabajando
  * @mensajes el output de la ejecucion
  */
 public object ejecutar(TablaDeSimbolos ts, Ambito ambito, TablaDeSimbolos tsT)
 {
     if (condicion == null)
     {
         TablaDeSimbolos ambitoLocal = new TablaDeSimbolos();
         foreach (Simbolo s in ts)
         {
             ambitoLocal.AddLast(s);
         }
         foreach (InstruccionCQL i in cuerpo)
         {
             object r = i.ejecutar(ambitoLocal, ambito, tsT);
             if (r == null)
             {
                 return(r);
             }
         }
         return("");
     }
     else
     {
         Mensaje mensa = new Mensaje();
         object  a     = condicion.ejecutar(ts, ambito, tsT);
         if (a != null)
         {
             if (a.GetType() == typeof(Boolean))
             {
                 flag = (Boolean)a;
                 if ((Boolean)a)
                 {
                     TablaDeSimbolos ambitoLocal = new TablaDeSimbolos();
                     foreach (Simbolo s in ts)
                     {
                         ambitoLocal.AddLast(s);
                     }
                     foreach (InstruccionCQL i in cuerpo)
                     {
                         object r = i.ejecutar(ambitoLocal, ambito, tsT);
                         if (r == null)
                         {
                             return(r);
                         }
                     }
                     return("");
                 }
             }
             else
             {
                 ambito.mensajes.AddLast(mensa.error("La condicion tiene que ser de tipo Bool: " + a.ToString(), l, c, "Semantico"));
                 return(null);
             }
         }
         else
         {
             ambito.mensajes.AddLast(mensa.error("No se aceptan condiciones null ", l, c, "Semantico"));
             return(null);
         }
         return("");
     }
 }
コード例 #2
0
        /*
         * Constructor de la clase
         * @id nombre de la tabla
         * @l linea del id
         * @c columna del id
         */

        public object ejecutar(TablaDeSimbolos ts, Ambito ambito, TablaDeSimbolos tsT)
        {
            Mensaje             mensa    = new Mensaje();
            string              user     = ambito.usuario;
            string              baseD    = ambito.baseD;
            LinkedList <string> mensajes = ambito.mensajes;

            if (user.Equals("admin"))
            {
                Usuario usuario = TablaBaseDeDatos.getUsuario(id);
                if (usuario == null)
                {
                    usuario = new Usuario(id, password, new LinkedList <string>());
                    TablaBaseDeDatos.listaUsuario.AddLast(usuario);
                    mensajes.AddLast(mensa.message("El usuario: " + id + " se creo exitosamente"));
                    return("");
                }
                else
                {
                    ambito.listadoExcepciones.AddLast(new Excepcion("useralreadyexists", "El usuario: " + id + " ya existe"));
                    mensajes.AddLast(mensa.error("El usuario: " + id + " ya existe", l, c, "Semantico"));
                }
            }
            else
            {
                mensajes.AddLast(mensa.error("Solo un admin puede crear usuarios, el usuario: " + user + " no es admin", l, c, "Semantico"));
            }



            return(null);
        }
コード例 #3
0
 public DeclaracionProcedure(TablaDeSimbolos tablaDeSimbolos, Id id, DeclaracionDeParametro[] parametros, ComandoBloque cuerpo)
 {
     this.id = id;
     this.cuerpoDelProcedimiento = cuerpo;
     this.parametros             = parametros;
     this.tablaDeSimbolos        = tablaDeSimbolos;
 }
コード例 #4
0
ファイル: Revoke.cs プロジェクト: AndreeAvalos/CQL
 public object Ejecutar(TablaDeSimbolos ts)
 {
     if (!Program.sistema.tienePermiso(user_actual, id_db))
     {
         salida.Add(Program.buildError(getLine(), getColumn(), "Semantico", "El usuario " + user_actual + " no posee permisos en " + id_db + "."));
     }
     else
     {
         if (Program.sistema.existUser(user))
         {
             foreach (Usuario item in Program.sistema.Usuarios)
             {
                 if (item.Name.ToLower().Equals(user))
                 {
                     if (item.Revoke(id_db))
                     {
                         salida.Add(Program.buildMessage("Permiso revocado existasamente."));
                     }
                     else
                     {
                         salida.Add(Program.buildError(getLine(), getColumn(), "Semantico", "No existe el permiso en la lista de permisos del usuario " + user + "."));
                     }
                     return(null);
                 }
             }
             return(null);
         }
         else
         {
             salida.Add(Program.buildError(getLine(), getColumn(), "Semantico", user + " UserDontExists."));
         }
     }
     return(null);
 }
コード例 #5
0
        /*
         * Metodo de la implementacion
         * @ts tabla de simbolos global
         * @user usuario que ejecuta la accion
         * @baseD base de datos donde estamos ejecutando todo
         * @mensajes linkedlist con la salida deseada
         */
        public object ejecutar(TablaDeSimbolos ts, Ambito ambito, TablaDeSimbolos tsT)
        {
            GuardarArchivo archivo = new GuardarArchivo();

            archivo.guardarArchivo("Principal");
            return("");
        }
コード例 #6
0
 public NuevaInstancia(List <Type> libraries, TablaDeSimbolos tablaDeSimbolos, Id clase, Expresion[] argumentos)
 {
     this.tablaDeSimbolos = tablaDeSimbolos;
     this.clase_Renamed   = clase.Valor;
     this.argumentos      = argumentos;
     this.libraries       = libraries;
 }
コード例 #7
0
 public ComandoEval(Assembly assembly, TablaDeSimbolos tablaDeSimbolos, Salida salida, Expresion expresion)
 {
     this.expresion       = expresion;
     this.tablaDeSimbolos = tablaDeSimbolos;
     this.salida          = salida;
     this.assembly        = assembly;
 }
コード例 #8
0
        /*
         * Metodo que ejecutara las acciones
         * @ts tabla de simbolos
         * @user usuario que ejecuta la accion
         * return Mensaje LUP de Correcta accion o Incorrecta
         */

        public object ejecutar(TablaDeSimbolos ts, Ambito ambito, TablaDeSimbolos tsT)
        {
            Mensaje     mensa = new Mensaje();
            BaseDeDatos db    = TablaBaseDeDatos.getBase(bd);

            if (db == null)
            {
                ambito.mensajes.AddLast(mensa.error("La base de datos: " + bd + " no existe ", linea, columna, "Semantico"));
                ambito.listadoExcepciones.AddLast(new Excepcion("bddontexists", "La base de datos: " + bd + " no existe "));
                return(null);
            }
            if (TablaBaseDeDatos.getEnUso(bd, ambito.usuario))
            {
                ambito.mensajes.AddLast(mensa.error("La base de datos: " + bd + " esta siendo utilizada por otro usuario ", linea, columna, "Semantico"));
                return(null);
            }
            Usuario usu = TablaBaseDeDatos.getUsuario(ambito.usuario);

            if (usu == null && !ambito.usuario.Equals("admin"))
            {
                ambito.mensajes.AddLast(mensa.error("El usuario: " + ambito.usuario + " no existe ", linea, columna, "Semantico"));
                return(null);
            }
            ambito.baseD = bd;
            USO newU = new USO(ambito.baseD, ambito.usuario);

            TablaBaseDeDatos.deleteMine(ambito.usuario);
            TablaBaseDeDatos.listaEnUso.AddLast(newU);
            ambito.mensajes.AddLast(mensa.message("Se esta utilizando la base " + ambito.baseD + " exitosamente"));
            return("");
        }
コード例 #9
0
 /*
  * Metodo que se encargara de guardar los valores como variables temporales
  * @atributos es la data a guardar
  * @tsT es la tabla temporal
  */
 private void guardarTemp(LinkedList <Atributo> atributos, TablaDeSimbolos tsT)
 {
     foreach (Atributo atributo in atributos)
     {
         tsT.AddLast(new Simbolo(atributo.tipo, atributo.nombre));
         tsT.setValor(atributo.nombre, atributo.valor);
     }
 }
コード例 #10
0
 public Parser(Assembly assembly, TablaDeSimbolos tablaDeSimbolos, Salida salida)
 {
     libraries            = LoadTypesFromLibrary(assembly);
     this.tablaDeSimbolos = tablaDeSimbolos;
     this.salida          = salida;
     this.assembly        = assembly;
     lexer = new Lexer(" \f");
 }
コード例 #11
0
 /*
  * Metodo que se encargara de guardar los valores como variables temporales
  * @atributos es la data a guardar
  * @tsT es la tabla temporal
  */
 private void setColumnas(LinkedList <Columna> atributos, TablaDeSimbolos tsT)
 {
     foreach (Columna atributo in atributos)
     {
         tsT.AddLast(new Simbolo(atributo.tipo, atributo.name));
         tsT.setValor(atributo.name, atributo.name);
     }
 }
コード例 #12
0
 public ComandoFor(Salida salida, TablaDeSimbolos tablaDeSimbolos, string variable, Expresion expresion, Comando cuerpo)
 {
     this.salida          = salida;
     this.tablaDeSimbolos = tablaDeSimbolos;
     this.variable        = variable;
     this.expresion       = expresion;
     this.cuerpo          = cuerpo;
 }
コード例 #13
0
 /*
  * Constructor de la clase que asigna valores a una id en especifico
  * @id el nombre de la varibale
  * @l linea del nombre de la variable
  * @c columna del nombre de la variable
  * @a valor a guardar
  * @operacion que se realizara
  */
 public Asignacion(string id, int l, int c, Expresion a, string operacion)
 {
     this.id        = id;
     this.l         = l;
     this.c         = c;
     this.a         = a;
     this.operacion = operacion;
     this.tPadre    = null;
 }
コード例 #14
0
        /*
         * Constructor de la clase padre
         * @ts tabla de simbolos padre
         * @user usuario que esta ejecutando las acciones
         * @baseD string por referencia de que base de datos estamos trabajando
         * @mensajes el output de la ejecucion
         */

        public object ejecutar(TablaDeSimbolos ts, Ambito ambito, TablaDeSimbolos tsT)
        {
            object res   = (condicion == null) ? null : condicion.ejecutar(ts, ambito, tsT);
            object condi = verificarCondicion(res, ambito.mensajes);

            if (condi != null)
            {
                TablaDeSimbolos nuevoAmbito = new TablaDeSimbolos();
                foreach (Simbolo s in ts)
                {
                    nuevoAmbito.AddLast(s);
                }
                foreach (InstruccionCQL i in cuerpo)
                {
                    object resultado = i.ejecutar(nuevoAmbito, ambito, tsT);
                    if (resultado == null)
                    {
                        return(null);
                    }
                }
                while ((Boolean)condi)
                {
                    nuevoAmbito = new TablaDeSimbolos();
                    foreach (Simbolo s in ts)
                    {
                        nuevoAmbito.AddLast(s);
                    }
                    //------------------------------------------------------------ INSTRUCCIONES DO WHILE ------------------------------------------
                    foreach (InstruccionCQL i in cuerpo)
                    {
                        object resultado = i.ejecutar(nuevoAmbito, ambito, tsT);
                        if (resultado == null)
                        {
                            return(null);
                        }
                        else if (resultado.GetType() == typeof(Retorno))
                        {
                            return((Retorno)resultado);
                        }
                        else if (i.GetType() == typeof(Continue) || resultado.GetType() == typeof(Continue))
                        {
                            break;
                        }
                    }


                    res   = (condicion == null) ? null : condicion.ejecutar(nuevoAmbito, ambito, tsT);
                    condi = verificarCondicion(res, ambito.mensajes);
                    if (condi == null)
                    {
                        return(null);
                    }
                }
                return("");
            }
            return(null);
        }
コード例 #15
0
        /*
         * Metodo de la implementacion
         * @ts tabla de simbolos global
         * @user usuario que ejecuta la accion
         * @baseD base de datos donde estamos ejecutando todo
         * @mensajes linkedlist con la salida deseada
         */
        public object ejecutar(TablaDeSimbolos ts, Ambito ambito, TablaDeSimbolos tsT)
        {
            Mensaje ms = new Mensaje();
            object  r  = expresion.ejecutar(ts, ambito, tsT);

            if (r != null)
            {
                ambito.mensajes.AddLast(ms.message(r.ToString()));
            }
            return("");
        }
コード例 #16
0
ファイル: Sentencia_Switch.cs プロジェクト: AndreeAvalos/CQL
        public object Ejecutar(TablaDeSimbolos ts)
        {
            string opcion = instruccion_switch.Expresion.Ejecutar(ts).ToString();

            TablaDeSimbolos tabla_local = new TablaDeSimbolos();

            tabla_local.addPadre(ts);
            bool encontrado = false;

            foreach (Tipo_Case caso in instruccion_switch.Casos)
            {
                if (opcion.ToLower().Equals(caso.Expresion.ToLower()) || encontrado)
                {
                    encontrado = true;
                    foreach (Instruccion item in caso.Instrucciones)
                    {
                        if (item.getType() == Tipo.BREAK)
                        {
                            return(null);
                        }
                        if (item.getType() == Tipo.USER_TYPES || item.getType() == Tipo.FUNCION || item.getType() == Tipo.METODO || item.getType() == Tipo.PROCEDURE)
                        {
                            salida.Add(Program.buildError(item.getLine(), item.getColumn(), "Semantico", "No puede venir instruccion del tipo: " + item.getType() + " en un ambito local."));
                        }
                        else
                        {
                            item.Ejecutar(tabla_local);
                            salida.AddRange(item.getSalida());
                        }
                    }
                }
            }
            foreach (Instruccion item in instruccion_switch.Instrucciones_default)
            {
                if (item.getType() == Tipo.BREAK)
                {
                    break;
                }
                if (item.getType() == Tipo.USER_TYPES || item.getType() == Tipo.FUNCION || item.getType() == Tipo.METODO || item.getType() == Tipo.PROCEDURE)
                {
                    salida.Add(Program.buildError(item.getLine(), item.getColumn(), "Semantico", "No puede venir instruccion del tipo: " + item.getType() + " en un ambito local."));
                }
                else
                {
                    item.Ejecutar(tabla_local);
                    salida.AddRange(item.getSalida());
                }
            }


            return(null);
        }
コード例 #17
0
 public void destruirTS()
 {
     if (tablaLocalActiva)
     {
         tsl = null;
         tablaLocalActiva = false;
     }
     else
     {
         tsg.ImprimirTS();
         tsg = null;
     }
 }
コード例 #18
0
ファイル: Actor.cs プロジェクト: NcuboIdeas/EventSourcing
        public Actor(String persona)
        {
            if (String.IsNullOrEmpty(persona))
            {
                throw new ArgumentNullException(nameof(persona));
            }
            Assembly library = this.GetType().Assembly;

            tablaDeSimbolos = new TablaDeSimbolos();
            salida          = new Salida();
            parser          = new Parser(library, tablaDeSimbolos, salida);
            this.persona    = persona;
        }
コード例 #19
0
        /*
         * Constructor de la clase padre
         * @ts tabla de simbolos padre
         * @user usuario que esta ejecutando las acciones
         * @baseD string por referencia de que base de datos estamos trabajando
         * @mensajes el output de la ejecucion
         */

        public object ejecutar(TablaDeSimbolos ts, Ambito ambito, TablaDeSimbolos tsT)
        {
            Mensaje ms    = new Mensaje();
            object  res   = (condicion == null) ? null : condicion.ejecutar(ts, ambito, tsT);
            object  condi = verificarCondicion(res, ambito.mensajes);

            if (condi != null)
            {
                while ((Boolean)condi)
                {
                    TablaDeSimbolos nuevoAmbito = new TablaDeSimbolos();
                    foreach (Simbolo s in ts)
                    {
                        nuevoAmbito.AddLast(s);
                    }
                    //--------------------------------------------------- INSTRUCCIONES DENTRO DEL WHILE------------------------------------
                    foreach (InstruccionCQL i in cuerpo)
                    {
                        object resultado = i.ejecutar(nuevoAmbito, ambito, tsT);
                        if (resultado == null)
                        {
                            System.Diagnostics.Debug.WriteLine("TIPOWHILE: " + i.GetType());
                            return(null);
                        }
                        else if (resultado.GetType() == typeof(Retorno))
                        {
                            return((Retorno)resultado);
                        }
                        else if (i.GetType() == typeof(Continue) || resultado.GetType() == typeof(Continue))
                        {
                            break;
                        }
                    }


                    res   = (condicion == null) ? null : condicion.ejecutar(nuevoAmbito, ambito, tsT);
                    condi = verificarCondicion(res, ambito.mensajes);
                    if (condi == null)
                    {
                        return(null);
                    }
                }
                return("");
            }
            else
            {
                ambito.listadoExcepciones.AddLast(new Excepcion("exception", "La coindicion no puede ser null"));
                ambito.mensajes.AddLast(ms.error("La coindicion no puede ser null", l, c, "Semantico"));
            }
            return(null);
        }
コード例 #20
0
        /*
         * METODO DEVOLVERA  Todas las columnas
         * @param lista: Todas las columnas de la tabla
         * @param ts: lista de simbolos del padre
         * @param user : usuario que ejecuta las acciones
         * @param baseD : nombre de la base de datos se pasa por referencia
         * @param mensajes: output de salida
         */

        private LinkedList <Data> getAllData(Tabla t, TablaDeSimbolos ts, Ambito ambito, LinkedList <Columna> cabeceras)
        {
            Mensaje             mensa    = new Mensaje();
            LinkedList <Data>   listaR   = new LinkedList <Data>();
            LinkedList <string> mensajes = ambito.mensajes;

            foreach (Data data in t.datos)
            {
                TablaDeSimbolos tsT = new TablaDeSimbolos();
                guardarTemp(data.valores, tsT);
                int i = 0;
                if (operacion.Equals("none"))
                {
                    listaR.AddLast(new Data(data.valores));
                }
                else
                {
                    if (operacion.Contains("a"))
                    {
                        object condi = (condicion == null) ? null : condicion.ejecutar(ts, ambito, tsT);

                        if (condi != null)
                        {
                            if (condi.GetType() == typeof(Boolean))
                            {
                                if ((Boolean)condi)
                                {
                                    listaR.AddLast(new Data(data.valores));
                                }
                            }
                            else
                            {
                                mensajes.AddLast(mensa.error("La condicion tiene que ser un valor booleano no se reconoce: " + condi, l, c, "Semantico"));
                                return(null);
                            }
                        }
                        else
                        {
                            mensajes.AddLast(mensa.error("No se aceptan columnas null", l, c, "Semantico"));
                            return(null);
                        }
                    }
                    else
                    {
                        listaR.AddLast(new Data(data.valores));
                    }
                }
            }
            return(listaR);
        }
コード例 #21
0
 public TablaDeSimbolos crearTS(bool global)
 {
     numeroTS++;
     if (global)
     {
         tsg          = new TablaDeSimbolos(true);
         tsg.NumeroTs = numeroTS;
         return(tsg);
     }
     tsl = new TablaDeSimbolos(false);
     tablaLocalActiva = true;
     tsl.NumeroTs     = numeroTS;
     return(tsl);
 }
コード例 #22
0
        public object Ejecutar(TablaDeSimbolos ts)
        {
            if (!Program.sistema.tienePermiso(user_actual, id_db))
            {
                salida.Add(Program.buildError(getLine(), getColumn(), "Semantico", "El usuario " + user_actual + " no posee permisos en " + id_db + "."));
            }
            else
            {
                if (Program.sistema.existUser(user))
                {
                    if (!Program.sistema.existPermission(user, id_db))
                    {
                        if (Program.sistema.existDataBase(id_db))
                        {
                            string bd_correct = "";

                            foreach (Database item in Program.sistema.Databases)
                            {
                                if (item.Name.ToLower().Equals(id_db))
                                {
                                    bd_correct = item.Name;
                                }
                            }
                            Permiso new_permiso = new Permiso(bd_correct);
                            if (Program.sistema.setPermission(user, new_permiso))
                            {
                                salida.Add(Program.buildMessage("Permisos concedidos a " + user + " para base de datos " + id_db + "."));
                            }
                            else
                            {
                                salida.Add(Program.buildMessage("Error interno del sistema."));
                            }
                        }
                        else
                        {
                            salida.Add(Program.buildError(getLine(), getColumn(), "Semantico", id_db + " BDDontExists."));
                        }
                    }
                    else
                    {
                        salida.Add(Program.buildError(getLine(), getColumn(), "Semantico", "El usuario " + user + " ya tiene permiso sobre " + id_db + "."));
                    }
                }
                else
                {
                    salida.Add(Program.buildError(getLine(), getColumn(), "Semantico", user + " UserDontExists."));
                }
            }
            return(null);
        }
コード例 #23
0
        /*
         * Metodo de la implementacion
         * @ts tabla de simbolos global
         * @user usuario que ejecuta la accion
         * @baseD base de datos donde estamos ejecutando todo
         * @mensajes linkedlist con la salida deseada
         */
        public object ejecutar(TablaDeSimbolos ts, Ambito ambito, TablaDeSimbolos tsT)
        {
            Mensaje             ms       = new Mensaje();
            object              valores  = (expresion == null) ? null : expresion.ejecutar(ts, ambito, tsT);
            LinkedList <string> mensajes = ambito.mensajes;

            if (valores != null)
            {
                if (valores.GetType() == typeof(LinkedList <object>))
                {
                    LinkedList <object> lista = (LinkedList <object>)valores;
                    if (lista.Count() == listaId.Count())
                    {
                        for (int i = 0; i < lista.Count(); i++)
                        {
                            string tipo = ts.getTipo(listaId.ElementAt(i)).ToLower().TrimEnd().TrimStart();
                            if (!tipo.Equals("none"))
                            {
                                object res = checkValues(lista.ElementAt(i), tipo, mensajes, ts, listaId.ElementAt(i));
                                if (res == null)
                                {
                                    return(null);
                                }
                            }
                            else
                            {
                                mensajes.AddLast(ms.error("La variable: " + listaId.ElementAt(i) + " no existe en este ambito", l, c, "Semantico"));
                                return(null);
                            }
                        }
                        return("");
                    }
                    else
                    {
                        mensajes.AddLast(ms.error("No coincide la cantidad de valores con la cantidad de variables", l, c, "Semantico"));
                    }
                }
                else
                {
                    mensajes.AddLast(ms.error("No se puede asignar este valor: " + valores + " a la lista de ID'S", l, c, "Semantico"));
                }
            }
            else
            {
                mensajes.AddLast(ms.error("No se puede asignar un valor null a la lista de ID's", l, c, "Semantico"));
            }
            return(null);
        }
コード例 #24
0
ファイル: Create_User.cs プロジェクト: AndreeAvalos/CQL
        public object Ejecutar(TablaDeSimbolos ts)
        {
            if (Program.sistema.existUser(user))
            {
                salida.Add(Program.buildError(getLine(), getColumn(), "Semantico", user + " UserAlreadyExists."));
            }
            else
            {
                Usuario new_user = new Usuario {
                    Name = user, Password = password
                };
                Program.sistema.Usuarios.Add(new_user);
                salida.Add(Program.buildMessage("Usuario creado exitosamente."));
            }

            return(null);
        }
コード例 #25
0
        /*
         * METODO que aplica el limit
         * @param lista: Todas las columnas de la tabla
         * @param ts: lista de simbolos del padre
         * @param user : usuario que ejecuta las acciones
         * @param baseD : nombre de la base de datos se pasa por referencia
         * @param mensajes: output de salida
         */
        private LinkedList <Data> limitar(LinkedList <Data> datos, TablaDeSimbolos ts, Ambito ambito, TablaDeSimbolos tsT)
        {
            LinkedList <Data>   limiData = new LinkedList <Data>();
            LinkedList <string> mensajes = ambito.mensajes;
            Mensaje             mensa    = new Mensaje();
            object res = (condicion2 == null) ? null : condicion2.ejecutar(ts, ambito, tsT);

            if (res != null)
            {
                if (res.GetType() == typeof(int))
                {
                    int limit = (int)res;
                    if (limit > 0)
                    {
                        int i = 0;

                        foreach (Data data in datos)
                        {
                            if (i < limit)
                            {
                                limiData.AddLast(data);
                            }
                            i++;
                        }
                    }
                    else
                    {
                        mensajes.AddLast(mensa.error("Limit tiene que ser entero mayor a cero no se reconoce: " + res, l, c, "Semantico"));
                        return(null);
                    }
                }
                else
                {
                    mensajes.AddLast(mensa.error("Limit tiene que ser entero no se reconoce: " + res, l, c, "Semantico"));
                    return(null);
                }
            }
            else
            {
                mensajes.AddLast(mensa.error("No se acepta un limit null", l, c, "Semantico"));
                return(null);
            }


            return(limiData);
        }
コード例 #26
0
        public void analizar(String cadena)
        {
            Gramatica     gramatica = new Gramatica();
            LanguageData  lenguaje  = new LanguageData(gramatica);
            Parser        parser    = new Parser(lenguaje);
            ParseTree     arbol     = parser.Parse(cadena);
            ParseTreeNode raiz      = arbol.Root;

            LinkedList <Instruccion> AST = instrucciones(raiz.ChildNodes.ElementAt(0));

            TablaDeSimbolos global = new TablaDeSimbolos();

            foreach (Instruccion ins in AST)
            {
                ins.ejecutar(global);
            }
        }
コード例 #27
0
 /*
  * Metodo de la implementacion
  * @ts tabla de simbolos global
  * @user usuario que ejecuta la accion
  * @baseD base de datos donde estamos ejecutando todo
  * @mensajes linkedlist con la salida deseada
  */
 public object ejecutar(TablaDeSimbolos ts, Ambito ambito, TablaDeSimbolos tsT)
 {
     if (valor != null)
     {
         if (valor.GetType() == typeof(Expresion))
         {
             object res = (valor == null) ? null : ((Expresion)valor).ejecutar(ts, ambito, tsT);
             return(new Retorno(res));
         }
         LinkedList <Expresion> listaExpresiones = (LinkedList <Expresion>)valor;
         LinkedList <object>    valoresReturn    = new LinkedList <object>();
         foreach (Expresion e in listaExpresiones)
         {
             object res = (e == null) ? null : e.ejecutar(ts, ambito, tsT);
             valoresReturn.AddLast(res);
         }
         return(new Retorno(valoresReturn));
     }
     return(new Retorno(null));
 }
コード例 #28
0
 public object Ejecutar(TablaDeSimbolos ts)
 {
     if (Program.sistema.En_uso())
     {
         if (Program.sistema.existeObjeto(name))
         {
             Program.sistema.deleteObjeto(name.ToLower());
         }
         else
         {
             salida.Add(Program.buildError(getLine(), getColumn(), "Semantico", name + " TypeDontExists."));
         }
     }
     else
     {
         //no hay ninguna base de datos seleccionada.
         salida.Add(Program.buildError(getLine(), getColumn(), "Semantico", "No existe ninguna base de datos en uso."));
     }
     return(null);
 }
コード例 #29
0
        /*
         * Metodo de la implementacion de la clase InstruccionCQL
         * @ts Tabla de simbolos global
         * @user usuario que ejecuta la accion
         * @baseD base de datos en la que se realizara la accion, es pasada por referencia
         */

        public object ejecutar(TablaDeSimbolos ts, Ambito ambito, TablaDeSimbolos tsT)
        {
            Mensaje        ms      = new Mensaje();
            GuardarArchivo guardar = new GuardarArchivo();

            guardar.guardarArchivo("Principal2");

            foreach (InstruccionCQL ins in cuerpo)
            {
                object respuesta = ins.ejecutar(ts, ambito, tsT);
                if (respuesta == null)
                {
                    ambito.listadoExcepciones.AddLast(new Excepcion("batchexception", "Hubo un error en la ejecucion del batch, Linea: " + l + " Columna: " + c));
                    ambito.mensajes.AddLast(ms.error("Hubo un error en la ejecucion del batch", l, c, "Semantico"));
                    LeerArchivo leer = new LeerArchivo("Principal2.chison");
                    return(null);
                }
            }

            return("");
        }
コード例 #30
0
        /*
         * Constructor de la clase padre
         * @ts tabla de simbolos padre
         * @user usuario que esta ejecutando las acciones
         * @baseD string por referencia de que base de datos estamos trabajando
         * @mensajes el output de la ejecucion
         */
        public object ejecutar(TablaDeSimbolos ts, Ambito ambito, TablaDeSimbolos tsT)
        {
            Boolean ejecutar = false;

            foreach (Case c in listado)
            {
                if ((c.isDefault && !ejecutar) || (!c.isDefault))
                {
                    object res = c.ejecutar(ts, ambito, tsT);
                    if (res == null)
                    {
                        return(null);
                    }
                }

                if (c.flag && !ejecutar)
                {
                    ejecutar = c.flag;
                }
            }
            return("");
        }