Ejemplo n.º 1
0
        public override void ValidaTipo(List <ElementoTS> tablaSimbolos, Queue <string> errores)
        {
            char tipodato2, tipodato3;//si el tipo dato es '\0' entonces no hay que validar que coincida

            derecha.Ambito   = Ambito;
            derecha.TipoDato = TipoDato;
            derecha.ValidaTipo(tablaSimbolos, errores);
            tipodato3 = derecha.TipoDato;
            if (tipodato3 == 'e')
            {
                if (derecha.Token.Nombre != "Operacion" && derecha.Token.Nombre != "")
                {
                    errores.Enqueue("La variable: " + derecha.Token.Lexema + " no ha sido declarada");
                }
            }
            if (izquierda != null)//tiene izquierda
            {
                izquierda.Ambito   = Ambito;
                izquierda.TipoDato = TipoDato;
                izquierda.ValidaTipo(tablaSimbolos, errores);
                tipodato2 = izquierda.TipoDato;
                if (tipodato2 == 'e')
                {
                    if (izquierda.Token.Nombre != "Operacion" && derecha.Token.Nombre != "")
                    {
                        errores.Enqueue("La variable: " + izquierda.Token.Lexema + " no ha sido declarada");
                    }
                }
                if (tipodato2 == tipodato3 && tipodato2 != 'e')
                {
                    if (Sig != null)
                    {
                        Sig.ValidaTipo(tablaSimbolos, errores);
                    }
                }
                else
                {
                    string der, izq;
                    if (derecha.Token.Nombre != "Operacion" && derecha.Token.Nombre != "")
                    {
                        der = derecha.Token.Lexema;
                    }
                    else
                    {
                        der = "Operacion derecha";
                    }
                    if (izquierda.Token.Nombre != "Operacion" && izquierda.Token.Nombre != "")
                    {
                        izq = izquierda.Token.Lexema;
                    }
                    else
                    {
                        izq = "Operacion izquieda";
                    }
                    errores.Enqueue("Los tipos de datos entre " + izq + " y " + der + " son distintos");
                    tipodato3 = 'e';
                }
            }
            TipoDato = tipodato3;
        }
Ejemplo n.º 2
0
        public override void ValidaTipo(List <ElementoTS> tablaSimbolos, Queue <string> errores)
        {
            TipoDato = BuscarTablaSimbolos(tablaSimbolos, id.Token.Lexema, Ambito);
            char tipo1 = TipoDato;

            if (TipoDato == 'e')
            {
                errores.Enqueue("La variable " + id.Token.Lexema + " no ha sido declarada");
            }
            if (expresion != null)
            {
                expresion.Ambito   = Ambito;
                expresion.TipoDato = tipo1;
                expresion.ValidaTipo(tablaSimbolos, errores);
            }
            char tipo2 = expresion.TipoDato;

            if (tipo1 != tipo2)
            {
                errores.Enqueue("El tipo de dato de " + id.Token.Lexema + " en la funcion " + Ambito + " es diferente de la expresion.");
            }
            if (Sig != null)
            {
                Sig.Ambito = Ambito;
                Sig.ValidaTipo(tablaSimbolos, errores);
            }
        }
Ejemplo n.º 3
0
 public virtual void ValidaTipo(List <ElementoTS> tablaSimbolos, Queue <string> errores)
 {
     if (Sig != null)
     {
         Sig.ValidaTipo(tablaSimbolos, errores);
     }
     if (Token != null)
     {
         if (Token.Nombre != "null")
         {
             if (EsInt(Token.Lexema))
             {
                 TipoDato = 'i';
             }
             else if (EsFloat(Token.Lexema))
             {
                 TipoDato = 'f';
             }
             else
             {
                 TipoDato = BuscarTablaSimbolos(tablaSimbolos, Token.Lexema, Ambito);
             }
         }
     }
 }
Ejemplo n.º 4
0
        public override void ValidaTipo(List <ElementoTS> tablaSimbolos, Queue <string> errores)
        {
            TipoDato = GetTipoDato(tipo);
            string nombre = id.Token.Lexema;

            if (BuscarTablaSimbolos(tablaSimbolos, nombre, Ambito) != 'e')
            {
                errores.Enqueue("La variable: " + nombre + " ya fue declarada");
            }
            else
            {
                tablaSimbolos.Add(new ElementoTS(nombre, TipoDato, Ambito, ""));
            }
            CadenaParametros += tipo[0];
            if (listaParam != null)
            {
                listaParam.Ambito           = Ambito;
                listaParam.CadenaParametros = CadenaParametros;
                listaParam.ValidaTipo(tablaSimbolos, errores);
                CadenaParametros = listaParam.CadenaParametros;
            }
            if (Sig != null)
            {
                Sig.Ambito = Ambito;
                Sig.ValidaTipo(tablaSimbolos, errores);
            }
        }
Ejemplo n.º 5
0
 public override void ValidaTipo(List <ElementoTS> tablaSimbolos, Queue <string> errores)
 {
     if (expresion != null)
     {
         expresion.Ambito = Ambito;
         expresion.ValidaTipo(tablaSimbolos, errores);
     }
     if (Bloque != null)
     {
         Bloque.Ambito = Ambito;
         Bloque.ValidaTipo(tablaSimbolos, errores);
     }
     if (Sig != null)
     {
         Sig.Ambito = Ambito;
         Sig.ValidaTipo(tablaSimbolos, errores);
     }
 }
Ejemplo n.º 6
0
        public override void ValidaTipo(List <ElementoTS> tablaSimbolos, Queue <string> errores)
        {
            Nodo aux = argumentos;

            TipoDato = BuscarTablaSimbolos(tablaSimbolos, id.Token.Lexema);
            string cadenaParametros = "";

            if (aux.Token != null)
            {
                while (aux != null)
                {
                    if (aux.Token.Nombre != "null")
                    {
                        if (EsInt(aux.Token.Lexema))
                        {
                            cadenaParametros += 'i';
                        }
                        else if (EsFloat(aux.Token.Lexema))
                        {
                            cadenaParametros += 'f';
                        }
                        else
                        {
                            cadenaParametros += BuscarTablaSimbolos(tablaSimbolos, aux.Token.Lexema, Ambito);
                        }
                    }
                    aux = aux.Sig;
                }
            }
            if (existefunc(tablaSimbolos, new ElementoTS(id.Token.Lexema, '\0', Ambito, cadenaParametros), errores))
            {
                id.Ambito = Ambito;
                id.ValidaTipo(tablaSimbolos, errores);
            }
            if (Sig != null)
            {
                Sig.Ambito = Ambito;
                Sig.ValidaTipo(tablaSimbolos, errores);
            }
        }
Ejemplo n.º 7
0
 public override void ValidaTipo(List <ElementoTS> tablaSimbolos, Queue <string> errores)
 {
     if (BuscarTablaSimbolos(tablaSimbolos, id.Token.Lexema, Ambito) != 'e')
     {
         errores.Enqueue("La variable: " + id.Token.Lexema + " en: " + Ambito + " ya esta declarada");
     }
     else
     {
         tablaSimbolos.Add(new ElementoTS(id.Token.Lexema, TipoDato, Ambito, ""));
     }
     if (listavar != null)
     {
         listavar.Ambito   = Ambito;
         listavar.TipoDato = TipoDato;
         listavar.ValidaTipo(tablaSimbolos, errores);
     }
     if (Sig != null)
     {
         Sig.Ambito = Ambito;
         Sig.ValidaTipo(tablaSimbolos, errores);
     }
 }
Ejemplo n.º 8
0
        public override void ValidaTipo(List <ElementoTS> tablaSimbolos, Queue <string> errores)
        {
            TipoDato = GetTipoDato(tipo);
            char   TipoDtemp = TipoDato;
            string nombre    = id.Token.Lexema;

            Ambito = nombre;
            if (parametros != null)
            {
                parametros.Ambito = Ambito;
                parametros.ValidaTipo(tablaSimbolos, errores);
                CadenaParametros = parametros.CadenaParametros;
            }

            if (BuscarTablaSimbolos(tablaSimbolos, nombre, "global") != 'e')
            {
                errores.Enqueue(" La funcion: " + nombre + " ya existe.");
            }
            else
            {
                tablaSimbolos.Add(new ElementoTS(nombre, TipoDtemp, "global", CadenaParametros));
            }

            CadenaParametros = "";
            if (BloqFunc != null)
            {
                BloqFunc.Ambito = Ambito;
                BloqFunc.ValidaTipo(tablaSimbolos, errores);
            }
            Ambito = "";
            if (Sig != null)
            {
                Sig.Ambito = Ambito;
                Sig.ValidaTipo(tablaSimbolos, errores);
            }
        }