Exemplo n.º 1
0
 private TipoDeDato FuncionEquivalenciaAsignacion(TipoDeDato tipoValorAsignacion, TipoDeDato tipoValorHijoIzquierdo)
 {
     if (tipoValorHijoIzquierdo != TipoDeDato.Vacio)
     {
         if (tipoValorAsignacion == TipoDeDato.Entero && tipoValorHijoIzquierdo == TipoDeDato.Entero)
         {
             return(TipoDeDato.Entero);
         }
         else if (tipoValorAsignacion == TipoDeDato.Decimal && tipoValorHijoIzquierdo == TipoDeDato.Entero)
         {
             return(TipoDeDato.Decimal);
         }
         else if (tipoValorAsignacion == TipoDeDato.Decimal && tipoValorHijoIzquierdo == TipoDeDato.Decimal)
         {
             return(TipoDeDato.Decimal);
         }
         else if (tipoValorAsignacion == TipoDeDato.Booleano && tipoValorHijoIzquierdo == TipoDeDato.Booleano)
         {
             return(TipoDeDato.Booleano);
         }
         else if (tipoValorAsignacion == TipoDeDato.Cadena && tipoValorHijoIzquierdo == TipoDeDato.Cadena)
         {
             return(TipoDeDato.Cadena);
         }
         else if (tipoValorAsignacion == TipoDeDato.Caracter && tipoValorHijoIzquierdo == TipoDeDato.Caracter)
         {
             return(TipoDeDato.Caracter);
         }
         else
         {
             throw new Exception(string.Format("Error de tipos no se puede realizar la asignación {0} con {1} ", tipoValorAsignacion, tipoValorHijoIzquierdo));
         }
     }
     return(TipoDeDato.Vacio);
 }
Exemplo n.º 2
0
 internal NodoTablaSimbolos(string nom, TipoDeEntrada entrada, TipoDeDato tdato, List <FirmaProc> firma)
 {
     this.nombre              = nom;
     this.tipoEntrada         = entrada;
     this.tipoDato            = tdato;
     this.firma               = new List <FirmaProc>(firma);
     this.contexto            = TipoContexto.Global;
     this.nombreContextoLocal = string.Empty;
     this.valor               = 0;
     this.esDelFramework      = false;
 }
Exemplo n.º 3
0
 internal NodoTablaSimbolos(string nom, TipoDeEntrada entrada, TipoDeDato tdato,
                            bool esConst, TipoContexto cont, string nombreProc)
 {
     this.nombre              = nom;
     this.tipoEntrada         = entrada;
     this.tipoDato            = tdato;
     this.firma               = null;
     this.esConstante         = esConst;
     this.contexto            = cont;
     this.nombreContextoLocal = nombreProc;
     this.valor               = 0;
     this.esDelFramework      = false;
 }
Exemplo n.º 4
0
        private TipoDeDato FuncionEquivalenciaDeDatos(TipoDeDato tipoValorHijoIzquierdo, TipoDeDato tipoValorHijoDerecho, OperacionCondicional soyOperacion)
        {
            switch (soyOperacion)
            {
            //artimeticas
            case OperacionCondicional.Suma:
                if (tipoValorHijoIzquierdo == TipoDeDato.Entero && tipoValorHijoDerecho == TipoDeDato.Entero)
                {
                    return(TipoDeDato.Entero);
                }
                else if (tipoValorHijoIzquierdo == TipoDeDato.Entero && tipoValorHijoDerecho == TipoDeDato.Decimal)
                {
                    return(TipoDeDato.Decimal);
                }
                else if (tipoValorHijoIzquierdo == TipoDeDato.Decimal && tipoValorHijoDerecho == TipoDeDato.Entero)
                {
                    return(TipoDeDato.Decimal);
                }

                else if (tipoValorHijoIzquierdo == TipoDeDato.Cadena && tipoValorHijoDerecho == TipoDeDato.Cadena)
                {
                    return(TipoDeDato.Cadena);
                }
                else if (tipoValorHijoIzquierdo == TipoDeDato.Cadena && tipoValorHijoDerecho == TipoDeDato.Entero)
                {
                    return(TipoDeDato.Cadena);
                }
                else if (tipoValorHijoIzquierdo == TipoDeDato.Entero && tipoValorHijoDerecho == TipoDeDato.Cadena)
                {
                    return(TipoDeDato.Cadena);
                }
                else if (tipoValorHijoIzquierdo == TipoDeDato.Cadena && tipoValorHijoDerecho == TipoDeDato.Decimal)
                {
                    return(TipoDeDato.Cadena);
                }
                else if (tipoValorHijoIzquierdo == TipoDeDato.Decimal && tipoValorHijoDerecho == TipoDeDato.Cadena)
                {
                    return(TipoDeDato.Cadena);
                }
                else if (tipoValorHijoIzquierdo == TipoDeDato.Cadena && tipoValorHijoDerecho == TipoDeDato.Decimal)
                {
                    return(TipoDeDato.Cadena);
                }
                else if (tipoValorHijoIzquierdo == TipoDeDato.Caracter && tipoValorHijoDerecho == TipoDeDato.Cadena)
                {
                    return(TipoDeDato.Cadena);
                }
                else
                {
                    ErrorSemanticoDGV error = new ErrorSemanticoDGV();
                    error.Mensaje = "No se puede sumar un " + tipoValorHijoIzquierdo.ToString() + " con un " + tipoValorHijoDerecho.ToString();
                    TablaSimbolos.ListaErroresSemanticos.Add(error);
                    return(TipoDeDato.Error);
                }

            /*throw new Exception(string.Format("Error de tipos no se puede realizar la operacion {0} con {1} y {2}",
             *  soyOperacion, tipoValorHijoIzquierdo, tipoValorHijoDerecho));*/
            case OperacionCondicional.Resta:
                if (tipoValorHijoIzquierdo == TipoDeDato.Entero && tipoValorHijoDerecho == TipoDeDato.Entero)
                {
                    return(TipoDeDato.Entero);
                }
                else if (tipoValorHijoIzquierdo == TipoDeDato.Entero && tipoValorHijoDerecho == TipoDeDato.Decimal)
                {
                    return(TipoDeDato.Decimal);
                }
                else if (tipoValorHijoIzquierdo == TipoDeDato.Decimal && tipoValorHijoDerecho == TipoDeDato.Entero)
                {
                    return(TipoDeDato.Decimal);
                }
                else
                {
                    ErrorSemanticoDGV error = new ErrorSemanticoDGV();
                    error.Mensaje = "No se puede restar un " + tipoValorHijoIzquierdo.ToString() + " con un " + tipoValorHijoDerecho.ToString();
                    TablaSimbolos.ListaErroresSemanticos.Add(error);
                    return(TipoDeDato.Error);
                }

            /*else
             *  throw new Exception(string.Format("Error de tipos no se puede realizar la operacion {0} con {1} y {2}",
             *      soyOperacion, tipoValorHijoIzquierdo, tipoValorHijoDerecho));*/

            case OperacionCondicional.Multiplicacion:
                if (tipoValorHijoIzquierdo == TipoDeDato.Entero && tipoValorHijoDerecho == TipoDeDato.Entero)
                {
                    return(TipoDeDato.Entero);
                }
                else if (tipoValorHijoIzquierdo == TipoDeDato.Entero && tipoValorHijoDerecho == TipoDeDato.Decimal)
                {
                    return(TipoDeDato.Decimal);
                }
                else if (tipoValorHijoIzquierdo == TipoDeDato.Decimal && tipoValorHijoDerecho == TipoDeDato.Entero)
                {
                    return(TipoDeDato.Decimal);
                }
                else
                {
                    ErrorSemanticoDGV error = new ErrorSemanticoDGV();
                    error.Mensaje = "No se puede multiplicar un " + tipoValorHijoIzquierdo.ToString() + " con un " + tipoValorHijoDerecho.ToString();
                    TablaSimbolos.ListaErroresSemanticos.Add(error);
                    return(TipoDeDato.Error);
                }

            /*else
             *  throw new Exception(string.Format("Error de tipos no se puede realizar la operacion {0} con {1} y {2}",
             *      soyOperacion, tipoValorHijoIzquierdo, tipoValorHijoDerecho));*/

            case OperacionCondicional.Division:
                if (tipoValorHijoIzquierdo == TipoDeDato.Entero && tipoValorHijoDerecho == TipoDeDato.Entero)
                {
                    return(TipoDeDato.Decimal);
                }
                else if (tipoValorHijoIzquierdo == TipoDeDato.Entero && tipoValorHijoDerecho == TipoDeDato.Decimal)
                {
                    return(TipoDeDato.Decimal);
                }
                else if (tipoValorHijoIzquierdo == TipoDeDato.Decimal && tipoValorHijoDerecho == TipoDeDato.Entero)
                {
                    return(TipoDeDato.Decimal);
                }
                else
                {
                    ErrorSemanticoDGV error = new ErrorSemanticoDGV();
                    error.Mensaje = "No se puede dividir un " + tipoValorHijoIzquierdo.ToString() + " con un " + tipoValorHijoDerecho.ToString();
                    TablaSimbolos.ListaErroresSemanticos.Add(error);
                    return(TipoDeDato.Error);
                }

            /*throw new Exception(string.Format("Error de tipos no se puede realizar la operacion {0} con {1} y {2}",
             *      soyOperacion, tipoValorHijoIzquierdo, tipoValorHijoDerecho));
             * break;*/


            //logicas
            case OperacionCondicional.IgualIgual:
                if (tipoValorHijoIzquierdo == TipoDeDato.Entero && tipoValorHijoDerecho == TipoDeDato.Entero)
                {
                    return(TipoDeDato.Booleano);
                }
                else if (tipoValorHijoIzquierdo == TipoDeDato.Entero && tipoValorHijoDerecho == TipoDeDato.Decimal)
                {
                    return(TipoDeDato.Booleano);
                }
                else if (tipoValorHijoIzquierdo == TipoDeDato.Decimal && tipoValorHijoDerecho == TipoDeDato.Entero)
                {
                    return(TipoDeDato.Booleano);
                }
                else if (tipoValorHijoIzquierdo == TipoDeDato.Cadena && tipoValorHijoDerecho == TipoDeDato.Cadena)
                {
                    return(TipoDeDato.Booleano);
                }
                else if (tipoValorHijoIzquierdo == TipoDeDato.Booleano && tipoValorHijoDerecho == TipoDeDato.Booleano)
                {
                    return(TipoDeDato.Booleano);
                }
                else if (tipoValorHijoIzquierdo == TipoDeDato.Caracter && tipoValorHijoDerecho == TipoDeDato.Caracter)
                {
                    return(TipoDeDato.Booleano);
                }
                else
                {
                    ErrorSemanticoDGV error = new ErrorSemanticoDGV();
                    error.Mensaje = "No se puede comparar si un " + tipoValorHijoIzquierdo.ToString() + " es igual que " + tipoValorHijoDerecho.ToString();
                    TablaSimbolos.ListaErroresSemanticos.Add(error);
                    return(TipoDeDato.Error);
                }

            /*throw new Exception(string.Format("Error de tipos no se puede realizar la operacion {0} con {1} y {2}",
             *      soyOperacion, tipoValorHijoIzquierdo, tipoValorHijoDerecho));
             * break;*/
            case OperacionCondicional.Diferente:
                if (tipoValorHijoIzquierdo == TipoDeDato.Entero && tipoValorHijoDerecho == TipoDeDato.Entero)
                {
                    return(TipoDeDato.Booleano);
                }
                else if (tipoValorHijoIzquierdo == TipoDeDato.Entero && tipoValorHijoDerecho == TipoDeDato.Decimal)
                {
                    return(TipoDeDato.Booleano);
                }
                else if (tipoValorHijoIzquierdo == TipoDeDato.Decimal && tipoValorHijoDerecho == TipoDeDato.Entero)
                {
                    return(TipoDeDato.Booleano);
                }
                else if (tipoValorHijoIzquierdo == TipoDeDato.Cadena && tipoValorHijoDerecho == TipoDeDato.Cadena)
                {
                    return(TipoDeDato.Booleano);
                }
                else if (tipoValorHijoIzquierdo == TipoDeDato.Booleano && tipoValorHijoDerecho == TipoDeDato.Booleano)
                {
                    return(TipoDeDato.Booleano);
                }
                else if (tipoValorHijoIzquierdo == TipoDeDato.Caracter && tipoValorHijoDerecho == TipoDeDato.Caracter)
                {
                    return(TipoDeDato.Booleano);
                }
                else
                {
                    ErrorSemanticoDGV error = new ErrorSemanticoDGV();
                    error.Mensaje = "No se puede comparar si un " + tipoValorHijoIzquierdo.ToString() + " es diferente que " + tipoValorHijoDerecho.ToString();
                    TablaSimbolos.ListaErroresSemanticos.Add(error);
                    return(TipoDeDato.Error);
                }

            /*throw new Exception(string.Format("Error de tipos no se puede realizar la operacion {0} con {1} y {2}",
             *      soyOperacion, tipoValorHijoIzquierdo, tipoValorHijoDerecho));
             * break;*/
            case OperacionCondicional.MayorQue:
                if (tipoValorHijoIzquierdo == TipoDeDato.Entero && tipoValorHijoDerecho == TipoDeDato.Entero)
                {
                    return(TipoDeDato.Booleano);
                }
                else if (tipoValorHijoIzquierdo == TipoDeDato.Entero && tipoValorHijoDerecho == TipoDeDato.Decimal)
                {
                    return(TipoDeDato.Booleano);
                }
                else if (tipoValorHijoIzquierdo == TipoDeDato.Decimal && tipoValorHijoDerecho == TipoDeDato.Entero)
                {
                    return(TipoDeDato.Booleano);
                }
                else
                {
                    ErrorSemanticoDGV error = new ErrorSemanticoDGV();
                    error.Mensaje = "No se puede comparar un " + tipoValorHijoIzquierdo.ToString() + " si es mayor que " + tipoValorHijoDerecho.ToString();
                    TablaSimbolos.ListaErroresSemanticos.Add(error);
                    return(TipoDeDato.Error);
                }

            /*throw new Exception(string.Format("Error de tipos no se puede realizar la operacion {0} con {1} y {2}",
             *      soyOperacion, tipoValorHijoIzquierdo, tipoValorHijoDerecho));
             * break;*/
            case OperacionCondicional.MayorIgualQue:
                if (tipoValorHijoIzquierdo == TipoDeDato.Entero && tipoValorHijoDerecho == TipoDeDato.Entero)
                {
                    return(TipoDeDato.Booleano);
                }
                else if (tipoValorHijoIzquierdo == TipoDeDato.Entero && tipoValorHijoDerecho == TipoDeDato.Decimal)
                {
                    return(TipoDeDato.Booleano);
                }
                else if (tipoValorHijoIzquierdo == TipoDeDato.Decimal && tipoValorHijoDerecho == TipoDeDato.Entero)
                {
                    return(TipoDeDato.Booleano);
                }
                else
                {
                    ErrorSemanticoDGV error = new ErrorSemanticoDGV();
                    error.Mensaje = "No se puede comparar si un " + tipoValorHijoIzquierdo.ToString() + " es mayor o igual que " + tipoValorHijoDerecho.ToString();
                    TablaSimbolos.ListaErroresSemanticos.Add(error);
                    return(TipoDeDato.Error);
                }

            /*throw new Exception(string.Format("Error de tipos no se puede realizar la operacion {0} con {1} y {2}",
             *      soyOperacion, tipoValorHijoIzquierdo, tipoValorHijoDerecho));
             * break;*/
            case OperacionCondicional.MenorQue:
                if (tipoValorHijoIzquierdo == TipoDeDato.Entero && tipoValorHijoDerecho == TipoDeDato.Entero)
                {
                    return(TipoDeDato.Booleano);
                }
                else if (tipoValorHijoIzquierdo == TipoDeDato.Entero && tipoValorHijoDerecho == TipoDeDato.Decimal)
                {
                    return(TipoDeDato.Booleano);
                }
                else if (tipoValorHijoIzquierdo == TipoDeDato.Decimal && tipoValorHijoDerecho == TipoDeDato.Entero)
                {
                    return(TipoDeDato.Booleano);
                }
                else
                {
                    ErrorSemanticoDGV error = new ErrorSemanticoDGV();
                    error.Mensaje = "No se puede comparar si un " + tipoValorHijoIzquierdo.ToString() + " es menor que " + tipoValorHijoDerecho.ToString();
                    TablaSimbolos.ListaErroresSemanticos.Add(error);
                    return(TipoDeDato.Error);
                }

            /*throw new Exception(string.Format("Error de tipos no se puede realizar la operacion {0} con {1} y {2}",
             *      soyOperacion, tipoValorHijoIzquierdo, tipoValorHijoDerecho));
             * break;*/
            case OperacionCondicional.MenorIgualQue:
                if (tipoValorHijoIzquierdo == TipoDeDato.Entero && tipoValorHijoDerecho == TipoDeDato.Entero)
                {
                    return(TipoDeDato.Booleano);
                }
                else if (tipoValorHijoIzquierdo == TipoDeDato.Entero && tipoValorHijoDerecho == TipoDeDato.Decimal)
                {
                    return(TipoDeDato.Booleano);
                }
                else if (tipoValorHijoIzquierdo == TipoDeDato.Decimal && tipoValorHijoDerecho == TipoDeDato.Entero)
                {
                    return(TipoDeDato.Booleano);
                }
                else
                {
                    ErrorSemanticoDGV error = new ErrorSemanticoDGV();
                    error.Mensaje = "No se puede comparar si un " + tipoValorHijoIzquierdo.ToString() + " es menor o igual que " + tipoValorHijoDerecho.ToString();
                    TablaSimbolos.ListaErroresSemanticos.Add(error);
                    return(TipoDeDato.Error);
                }

                /*throw new Exception(string.Format("Error de tipos no se puede realizar la operacion {0} con {1} y {2}",
                 *      soyOperacion, tipoValorHijoIzquierdo, tipoValorHijoDerecho));
                 * break;*/
            }
            return(TipoDeDato.Vacio);
        }
Exemplo n.º 5
0
 public TexboxSelect()
 {
     this.tipo = TipoDeDato.Ninguno;
 }