Example #1
0
        public void AsignarTemporal()
        {
            Variable variable = Tabla3D.BuscarVariable(Temporal);

            if (variable != null)
            {
                FNodoExpresion valor = this.Valor.ResolverExpresion();
                if (!TitusTools.HayErrores())
                {
                    if (valor.Tipo.Equals(Constante.TEntero) || valor.Tipo.Equals(Constante.TDecimal))
                    {
                        variable.Valor = valor;
                        Console.WriteLine(variable.Nombre + " = " + valor.Cadena);
                    }
                    else
                    {
                        TitusTools.InsertarError(Constante.TErrorSemantico, "Se esperaba un valor numerico.", TitusTools.GetRuta(), this.Valor.Fila, this.Valor.Columna);
                    }
                }
            }
            else
            {
                TitusTools.InsertarError(Constante.TErrorSemantico, "No se encontroo el temporal " + this.Temporal, TitusTools.GetRuta(), this.Valor.Fila, this.Valor.Columna);
            }
        }
Example #2
0
        public void ImprimirDecimal()
        {
            Variable v = Tabla3D.BuscarVariable(Temporal);

            if (v != null)
            {
                if (v.Valor != null)
                {
                    FNodoExpresion valor = (FNodoExpresion)v.Valor;
                    if (valor.Tipo.Equals(Constante.TDecimal))
                    {
                        TitusTools.ImprimirConsola(valor.Decimal.ToString());
                        TitusTools.ImprimirConsola("\n");
                    }
                    else
                    {
                        TitusTools.InsertarError(Constante.TErrorSemantico, "No se puede imprimir un decimal porque el valor no es decimal del temporal " + Temporal, TitusTools.GetRuta(), Padre.Fila, Padre.Columna);
                    }
                }
                else
                {
                    TitusTools.InsertarError(Constante.TErrorSemantico, "No se ha asignado ningun valor al temporal " + Temporal, TitusTools.GetRuta(), Padre.Fila, Padre.Columna);
                }
            }
            else
            {
                TitusTools.InsertarError(Constante.TErrorSemantico, "No existe el temporal " + Temporal, TitusTools.GetRuta(), Padre.Fila, Padre.Columna);
            }
        }
Example #3
0
        public void EjecutarLlamadaMetodo(Simbolo sim)
        {
            FMetodo metodo = Tabla3D.BuscarMetodo(sim.Nombre);

            if (metodo != null)
            {
                metodo.Ejecutar();
            }
            else
            {
                TitusTools.InsertarError(Constante.TErrorSemantico, "No se encontro el metodo " + sim.Nombre, TitusTools.GetRuta(), sim.Fila, sim.Columna);
            }
        }
Example #4
0
        public void AsignarStack()
        {
            FNodoExpresion acceso = this.Acceso.ResolverExpresion();
            FNodoExpresion valor  = this.Valor.ResolverExpresion();

            if (!TitusTools.HayErrores())
            {
                if (acceso.Tipo.Equals(Constante.TEntero))
                {
                    Tabla3D.InsertarStack(acceso.Entero, valor);
                    Console.WriteLine(Acceso.Fila.ToString() + " Stack[" + acceso.Cadena + "] = " + valor.Cadena);
                }
                else
                {
                    TitusTools.InsertarError(Constante.TErrorSemantico, "Se esperaba un valor entero para acceder al heap.", TitusTools.GetRuta(), this.Acceso.Fila, this.Acceso.Columna);
                }
            }
        }
Example #5
0
        public void ImprimirCaracter()
        {
            Variable v = Tabla3D.BuscarVariable(Temporal);

            if (v != null)
            {
                if (v.Valor != null)
                {
                    FNodoExpresion valor = (FNodoExpresion)v.Valor;
                    if (valor.Tipo.Equals(Constante.TEntero))
                    {
                        if (valor.Entero >= 0)
                        {
                            char c = (char)valor.Entero;
                            TitusTools.ImprimirConsola(c.ToString());
                            if (valor.Entero == 0)
                            {
                                TitusTools.ImprimirConsola("\n");
                            }
                        }
                        else
                        {
                            TitusTools.InsertarError(Constante.TErrorSemantico, "No se pueden imprimir un caracter con un ascii negativo en el temporal " + Temporal, TitusTools.GetRuta(), Padre.Fila, Padre.Columna);
                        }
                    }
                    else
                    {
                        TitusTools.InsertarError(Constante.TErrorSemantico, "No se puede imprimir un caracter porque el valor no es entero del temporal " + Temporal, TitusTools.GetRuta(), Padre.Fila, Padre.Columna);
                    }
                }
                else
                {
                    TitusTools.InsertarError(Constante.TErrorSemantico, "No se ha asignado ningun valor al temporal " + Temporal, TitusTools.GetRuta(), Padre.Fila, Padre.Columna);
                }
            }
            else
            {
                TitusTools.InsertarError(Constante.TErrorSemantico, "No existe el temporal " + Temporal, TitusTools.GetRuta(), Padre.Fila, Padre.Columna);
            }
        }
Example #6
0
        /***************************** ejecucion de 3d *****************************/

        public void Ejecutar()
        {
            Tabla3D.InsertarAmbito(this.Ambito);
            if (!TitusTools.HayErrores())
            {
                for (int i = 0; i < this.Ambito.TablaSimbolo.Count && i >= 0; i++)
                {
                    Simbolo sim = Ambito.TablaSimbolo.ElementAt(i);
                    if (!TitusTools.HayErrores())
                    {
                        switch (sim.Rol)
                        {
                        case Constante.LLAMADA_METODO:
                            EjecutarLlamadaMetodo(sim);
                            break;

                        case Constante.TGoto:
                        {
                            int pos = EjecutarGoTo(sim);
                            if (pos != 0)
                            {
                                i += pos - 1;
                            }
                            else
                            {
                                break;
                            }
                        }
                        break;

                        case Constante.TIf:
                        {
                            int pos = EjecutarIf(sim);
                            if (pos != 0)
                            {
                                i += pos - 1;
                            }
                            else
                            {
                                break;
                            }
                        }
                        break;

                        case Constante.ASIGNACION:
                            EjecutarAsignacion(sim);
                            break;

                        case Constante.TPrint:
                            EjecutarPrint(sim);
                            break;

                        case Constante.TError:
                            EjecutarError(sim);
                            break;
                        }
                    }
                    else
                    {
                        break;
                    }
                }
            }
            Tabla3D.SacarAmbito();
        }