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); }
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; }
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; }
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); }
public TexboxSelect() { this.tipo = TipoDeDato.Ninguno; }