public ObtenerObjeto(Expresion nombre, Expresion parametro) { this.nombre = nombre; this.parametro = parametro; }
public override Simbolo evaluar(Entorno entorno, Reporte reporte) { Tipo tipo = new Tipo(Tipos.BOOLEAN, null); Simbolo izquierda = null; if (llamada == null) { izquierda = this.izquierda.evaluar(entorno, reporte); } else { object retornoLlamada = this.llamada.ejecutar(entorno, reporte); if (retornoLlamada == null) { throw new util.ErrorPascal(0, 0, "La llamada no retorno ningun valor", "semantico", reporte); } izquierda = (Simbolo)retornoLlamada; } //Simbolo izquierda = this.izquierda.evaluar(entorno,reporte); if (this.derecha == null) { return(getValor(izquierda)); } Simbolo derecha = this.derecha.evaluar(entorno, reporte); Tipos tipoResultante = util.TablaTipos.getTipo(izquierda.tipo, derecha.tipo); if (tipoResultante == Tipos.NULLL) { throw new util.ErrorPascal(0, 0, "Tipos De Dato Incorrectos", "Semantico", reporte); } switch (tipoOperacion) { case "=": if (izquierda.tipo.tipo == Tipos.STRING || izquierda.tipo.tipo == Tipos.STRING) { return(new Simbolo(izquierda.ToString() == derecha.ToString(), tipo, null)); } return(new Simbolo(double.Parse(izquierda.ToString()) == double.Parse(derecha.ToString()), tipo, null)); case "<>": return(new Simbolo(double.Parse(izquierda.ToString()) != double.Parse(derecha.ToString()), tipo, null)); case ">=": return(new Simbolo(double.Parse(izquierda.ToString()) >= double.Parse(derecha.ToString()), tipo, null)); case ">": return(new Simbolo(double.Parse(izquierda.ToString()) > double.Parse(derecha.ToString()), tipo, null)); case "<=": return(new Simbolo(double.Parse(izquierda.ToString()) <= double.Parse(derecha.ToString()), tipo, null)); case "<": return(new Simbolo(double.Parse(izquierda.ToString()) < double.Parse(derecha.ToString()), tipo, null)); default: return(null); } Simbolo getValor(Simbolo izquierda) { if (izquierda.tipo.tipo != Tipos.BOOLEAN) { throw new util.ErrorPascal(0, 0, "La entrada no es de tipo booleano", "semántico", reporte); } return(new Simbolo(bool.Parse(izquierda.ToString()) == true, tipo, null)); } }
public Aritmetica(Expresion izquierda, Expresion derecha, char tipo) { this.izquierda = izquierda; this.derecha = derecha; this.tipo = tipo; }
public Relacional(Expresion izquierda, Expresion derecha, string tipoOperacion) { this.izquierda = izquierda; this.derecha = derecha; this.tipoOperacion = tipoOperacion; }
public Not(Expresion expresion) { this.expresion = expresion; }