예제 #1
0
        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--");
        }
예제 #2
0
        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");
        }