Пример #1
0
        public void buscarTipo(string cadena, Entorno entorno)
        {
            switch (cadena)
            {
            case "string":
                tipo = Simbolo.EnumTipo.cadena;
                break;

            case "integer":
                tipo = Simbolo.EnumTipo.entero;
                break;

            case "real":
                tipo = Simbolo.EnumTipo.real;
                break;

            case "boolean":
                tipo = Simbolo.EnumTipo.boleano;
                break;

            default:
                Simbolo sim = entorno.buscar(cadena);
                if (sim.tipo == Simbolo.EnumTipo.arreglo || sim.tipo == Simbolo.EnumTipo.objeto)
                {
                    tipo = sim.tipo;
                    break;
                }
                tipo = Simbolo.EnumTipo.error;
                break;
            }
            retorno.tipo = this.tipo;
        }
Пример #2
0
 public SubPrograma(ParseTreeNode root, Entorno entorno)
 {
     this.root             = root;
     parametrosValor       = new Dictionary <string, Simbolo>();
     parametrosVariable    = new Dictionary <string, Simbolo>();
     correlacionParametros = new Dictionary <string, string>();
     retorno            = new Simbolo(Simbolo.EnumTipo.nulo, "");
     tipo               = Simbolo.EnumTipo.nulo;
     this.entorno       = entorno;
     ordenParametros    = new ArrayList();
     correlacionIndices = new Dictionary <string, int>();
 }
Пример #3
0
        public Objeto(Objeto objeto)
        {
            Simbolo sim;

            this.nombre     = objeto.nombre;
            this.nombreTipo = objeto.nombreTipo;
            this.parametros = new Dictionary <string, Simbolo>();
            foreach (KeyValuePair <string, Simbolo> parametro in objeto.parametros)
            {
                this.parametros.Add(parametro.Key, parametro.Value);
            }
            this.tipo = objeto.tipo;
            if (!(objeto.arreglo is null))
            {
                this.arreglo = objeto.arreglo;
            }
        }
Пример #4
0
        private static void ejecutarDeclaracion(ParseTreeNode raiz, Entorno ent)
        {
            ParseTreeNode[]  hijos        = raiz.ChildNodes.ToArray();
            Simbolo.EnumTipo tipoVariable = obtenerTipo(hijos[0].ToString().Replace(" (Keyword)", ""));
            String           id           = hijos[1].Token.ValueString;

            if (hijos.Length > 2)
            {
                Expresion resultado = resolverExpresion(hijos[3], ent);
                if (tipoVariable != resultado.tipo)
                {
                    Program.ventanaPrincipal.richConsola.AppendText("El tipo que se le quiere asignar a la variable '" + id + "' no es permitido. '" + tipoVariable + "' != '" + resultado.tipo + "'. Línea: " + (hijos[3].Token.Location.Line + 1) + " Columna: " + (hijos[3].Token.Location.Column + 1) + "\n");
                    return;
                }
                Simbolo nuevo = new Simbolo(tipoVariable, resultado.valor);
                ent.insertar(id, nuevo, hijos[1].Token.Location.Line + 1, hijos[1].Token.Location.Column + 1);
            }
            else
            {
                ent.insertar(id, new Simbolo(), hijos[1].Token.Location.Line + 1, hijos[1].Token.Location.Column + 1);
            }
        }
Пример #5
0
 public Expresion(Simbolo.EnumTipo tipo, Object valor)
 {
     this.tipo  = tipo;
     this.valor = valor;
 }
Пример #6
0
 public Expresion(Simbolo.EnumTipo tipo, Object valor, String error)
 {
     this.tipo  = tipo;
     this.valor = valor;
     this.error = error;
 }