예제 #1
0
        public void LlenarGlobal()
        {
            //metemos las variables globales a la tabla y los metodos del primer archivo
            foreach (Simbolo global in Inicio.Global.TablaSimbolo)
            {
                switch (global.Rol)
                {
                case Constante.DECLARACION:
                    if (!TablaVariables.BuscarNombre(global.Nombre))
                    {
                        EjecutarDeclaracion(global);
                    }
                    else
                    {
                        TabError error = new TabError();
                        error.InsertarFila(Constante.ErroEjecucion, "Ya hay declarado un metodo o variable con el nombre " + global.Nombre, global.RutaArchivo, global.Fila.ToString(), global.Columna.ToString());
                        TitusNotifiaciones.setDatosErrores(error);
                    }
                    break;

                case Constante.TPrincipal:
                    if (TablaVariables.Tabla[0].Nombre != Constante.TPrincipal)
                    {
                        TablaVariables.Tabla[0] = new Variables(Constante.TPrincipal, Constante.TPrincipal, Constante.TPrincipal, global.Objeto, global.Ambito, global.Fila, global.Columna);
                    }
                    else
                    {
                        TabError error = new TabError();
                        error.InsertarFila(Constante.ErroEjecucion, "Ya hay declarado un metodo principal", global.RutaArchivo, global.Fila.ToString(), global.Columna.ToString());
                        TitusNotifiaciones.setDatosErrores(error);
                    }

                    break;

                case Constante.FUNCION:
                    if (TablaVariables.BuscarVariable(global.Nombre) == null)
                    {
                        if (TablaVariables.BuscarMetodo(global.Nombre, (FFuncion)global.Objeto) == false)
                        {
                            TablaVariables.Tabla.Add(new Variables(global.Tipo, global.Nombre, Constante.TMetodo, global.Objeto, global.Ambito, global.Fila, global.Columna));
                        }
                        else
                        {
                            TabError error = new TabError();
                            error.InsertarFila(Constante.ErroEjecucion, "Ya hay declarado un metodo con el nombre " + global.Nombre + " y los mismos parametros", global.RutaArchivo, global.Fila.ToString(), global.Columna.ToString());
                            TitusNotifiaciones.setDatosErrores(error);
                        }
                    }
                    else
                    {
                        TabError error = new TabError();
                        error.InsertarFila(Constante.ErroEjecucion, "Ya hay declarada una variable con el metodo " + global.Nombre, global.RutaArchivo, global.Fila.ToString(), global.Columna.ToString());
                        TitusNotifiaciones.setDatosErrores(error);
                    }
                    break;
                }
            }
        }
예제 #2
0
        public void EjecutarAsignacion(Simbolo global)
        {
            FExpresion expresion = (FExpresion)global.Objeto;

            if (expresion != null)
            {
                NodoExpresion valor = expresion.ResolverExpresion(expresion.Incerteza, expresion.RutaArchivo);
                Variables     aux   = TablaVariables.BuscarVariable(global.Nombre);
                if (TitusNotifiaciones.ContarErrores() == 0)
                {
                    if (aux != null)
                    {
                        if (aux.Tipo == Constante.TString)
                        {
                            if (valor.Tipo == Constante.TString || valor.Tipo == Constante.TNumber || valor.Tipo == Constante.TBool)
                            {
                                valor.Tipo = valor.Tipo;
                                aux.Valor  = new NodoExpresion(valor);
                            }
                            else
                            {
                                TabError error = new TabError();
                                error.InsertarFila(Constante.ErroEjecucion, "No se puede asignar una variable de tipo " + global.Tipo + " un valor " + valor.Tipo, global.RutaArchivo, global.Fila.ToString(), global.Columna.ToString());
                                TitusNotifiaciones.setDatosErrores(error);
                            }
                        }
                        else if (aux.Tipo == Constante.TNumber)
                        {
                            if (valor.Tipo == Constante.TNumber || valor.Tipo == Constante.TBool)
                            {
                                valor.Tipo = valor.Tipo;
                                aux.Valor  = new NodoExpresion(valor);
                            }
                            else
                            {
                                TabError error = new TabError();
                                error.InsertarFila(Constante.ErroEjecucion, "No se puede asignar una variable de tipo " + global.Tipo + " un valor " + valor.Tipo, global.RutaArchivo, global.Fila.ToString(), global.Columna.ToString());
                                TitusNotifiaciones.setDatosErrores(error);
                            }
                        }
                        else if (aux.Tipo == Constante.TBool)
                        {
                            if (valor.Tipo == Constante.TBool)
                            {
                                valor.Tipo = valor.Tipo;
                                aux.Valor  = new NodoExpresion(valor);
                            }
                            else
                            {
                                TabError error = new TabError();
                                error.InsertarFila(Constante.ErroEjecucion, "No se puede asignar una variable de tipo " + global.Tipo + " un valor " + valor.Tipo, global.RutaArchivo, global.Fila.ToString(), global.Columna.ToString());
                                TitusNotifiaciones.setDatosErrores(error);
                            }
                        }
                    }
                    else
                    {
                        TabError error = new TabError();
                        error.InsertarFila(Constante.ErroEjecucion, "Variable no declarada: " + global.Nombre, global.RutaArchivo, global.Fila.ToString(), global.Columna.ToString());
                        TitusNotifiaciones.setDatosErrores(error);
                    }
                }
            }
        }