public override object ejecutarSinposicion(ZContenedor e) { var sim = i1.ejecutar(e); if (sim is Simbolo s1) { var val = Utilidades.desenvolver(s1); if (val is ZNumero n1) { ZNumero novo = new ZNumero(n1.obtenerValor() - 1); s1.definirValor(novo); return(new ZNumero(n1.obtenerValor())); } if (val is ZDecimal n2) { ZDecimal novo = new ZDecimal(n2.obtenerValor() - 1); s1.definirValor(novo); return(new ZDecimal(n2.obtenerValor()));; } throw new SemanticError("error en exp--; tipos no compatbiles"); } throw new SemanticError("el lado izquierdo no es un simbolo exp--"); }
public override object ejecutarSinposicion(ZContenedor e) { var sim = i1.ejecutar(e); if (sim is Simbolo s1) { var valor1 = Utilidades.desenvolver(s1); var algo2 = i2.ejecutar(e); var valor2 = Utilidades.desenvolver(algo2); if (valor1 is ZNumero n1 && valor2 is ZNumero n2) { NodoDivision.isZero(n2.obtenerValor()); ZNumero novo = new ZNumero(n1.obtenerValor() / n2.obtenerValor()); s1.definirValor(novo); return(novo); } if (valor1 is ZDecimal n11 && valor2 is ZDecimal n12) { NodoDivision.isZero(n12.obtenerValor()); ZDecimal novo = new ZDecimal(n11.obtenerValor() / n12.obtenerValor()); s1.definirValor(novo); return(novo); } if (valor1 is ZNumero n111 && valor2 is ZDecimal n122) { throw new SemanticError("tipos no compatibles"); } if (valor1 is ZDecimal n11a && valor2 is ZNumero n12b) { NodoDivision.isZero(n12b.obtenerValor()); ZDecimal novo = new ZDecimal(n11a.obtenerValor() / n12b.obtenerValor()); s1.definirValor(novo); return(novo); } throw new SemanticError("tipos no compatiples exp-="); } throw new SemanticError("el lado izquierdo no es un simbolo exp-=exp"); }