Example #1
0
    def Resolver(expr, ts, Consola, exception):

        if isinstance(expr, Expresion):
            exp1 = Expresion.Resolver(expr.iz, ts, Consola, exception)
            exp2 = Expresion.Resolver(expr.dr, ts, Consola, exception)

            if expr.operador == '=':
                return exp1 == exp2
            elif expr.operador == '*':

                # id = expresion
                # id = (x < 9 )
                if (isinstance(exp1, float) and isinstance(exp2, float)) or (
                        isinstance(exp1, int) and isinstance(exp2, int)) or (
                            isinstance(exp1, float)
                            and isinstance(exp2, int)) or (isinstance(
                                exp1, int) and isinstance(exp2, float)):
                    return exp1 * exp2
                return 'error'
            elif expr.operador == '/':
                if (isinstance(exp1, float) and isinstance(exp2, float)) or (
                        isinstance(exp1, int) and isinstance(exp2, int)) or (
                            isinstance(exp1, float)
                            and isinstance(exp2, int)) or (isinstance(
                                exp1, int) and isinstance(exp2, float)):
                    return exp1 / exp2
                return 'error'
            elif expr.operador == '+':
                if (isinstance(exp1, float) and isinstance(exp2, float)) or (
                        isinstance(exp1, int) and isinstance(exp2, int)) or (
                            isinstance(exp1, float)
                            and isinstance(exp2, int)) or (isinstance(
                                exp1, int) and isinstance(exp2, float)):
                    return exp1 + exp2
                return 'error'
            elif expr.operador == '-':
                if (isinstance(exp1, float) and isinstance(exp2, float)) or (
                        isinstance(exp1, int) and isinstance(exp2, int)) or (
                            isinstance(exp1, float)
                            and isinstance(exp2, int)) or (isinstance(
                                exp1, int) and isinstance(exp2, float)):
                    return exp1 - exp2
                return 'error'
            elif expr.operador == '^':
                if (isinstance(exp1, float) and isinstance(exp2, float)) or (
                        isinstance(exp1, int) and isinstance(exp2, int)) or (
                            isinstance(exp1, float)
                            and isinstance(exp2, int)) or (isinstance(
                                exp1, int) and isinstance(exp2, float)):
                    return exp1**exp2
                return 'error'
            elif expr.operador == '%':
                if (isinstance(exp1, float) and isinstance(exp2, float)) or (
                        isinstance(exp1, int) and isinstance(exp2, int)) or (
                            isinstance(exp1, float)
                            and isinstance(exp2, int)) or (isinstance(
                                exp1, int) and isinstance(exp2, float)):
                    return exp1 % exp2
                return 'error'
            elif expr.operador == '==':  #comparacion---------------------------------------
                boole = exp1 == exp2
                return boole
            elif expr.operador == '<>':
                boole = exp1 != exp2
                return boole
            elif expr.operador == '>':
                boole = exp1 > exp2
                return boole
            elif expr.operador == '<':

                boole = exp1 < exp2
                return boole
            elif expr.operador == '!=':
                boole = exp1 != exp2
                return boole
            elif expr.operador == '>=':
                boole = exp1 >= exp2
                return boole
            elif expr.operador == '<=':
                boole = exp1 <= exp2
                return boole
        elif isinstance(expr, Id):
            if ts.validar_sim(expr.id) == 1:
                return expr.id
            else:
                return 'holamundo'

        elif isinstance(expr, Primitivo):
            return expr.valor
        elif isinstance(expr, Trigonometrica.Trigonometrica):
            return Trigonometrica.Trigonometrica.Resolver(
                expr, ts, Consola, exception)
        elif isinstance(expr, Math.Math_):
            print("estoy llegango")
            return Math.Math_.Resolver(expr, ts, Consola, exception)
        elif isinstance(expr, Time):
            return Time.resolverTime(expr)
        elif isinstance(expr, Binario):
            return Binario.Resolver(expr, ts, Consola, exception)
        elif isinstance(expr, Unario):
            exp1 = Expresion.Resolver(expr.op, ts, Consola, exception)
            if expr.operador == '-':
                if isinstance(exp1, int) or isinstance(exp1, float):
                    return exp1 * -1
            elif expr.operador == '+':
                if isinstance(exp1, int) or isinstance(exp1, float):
                    return exp1
            elif expr.operador == '!':
                return not exp1
Example #2
0
def ResolverReturn(expr, ts, entornoFuncion, Consola, exception):
        if isinstance(expr, Expresion):
            exp1 = ResolverReturn(expr.iz, ts, entornoFuncion, Consola, exception)
            exp2 = ResolverReturn(expr.dr, ts, entornoFuncion, Consola, exception)
            if expr.operador == '=':
                return exp1 == exp2
            elif expr.operador == '*':
                # id = expresion
                # id = (x < 9)
                if (isinstance(exp1, float) and isinstance(exp2, float)) or (
                        isinstance(exp1, int) and isinstance(exp2, int)) or (
                        isinstance(exp1, float) and isinstance(exp2, int)) or (
                        isinstance(exp1, int) and isinstance(exp2, float)):
                    return exp1 * exp2
                return 'error'
            elif expr.operador == '/':
                if (isinstance(exp1, float) and isinstance(exp2, float)) or (
                        isinstance(exp1, int) and isinstance(exp2, int)) or (
                        isinstance(exp1, float) and isinstance(exp2, int)) or (
                        isinstance(exp1, int) and isinstance(exp2, float)):
                    return exp1 / exp2
                return 'error'
            elif expr.operador == '+':
                if (isinstance(exp1, float) and isinstance(exp2, float)) or (
                        isinstance(exp1, int) and isinstance(exp2, int)) or (
                        isinstance(exp1, float) and isinstance(exp2, int)) or (
                        isinstance(exp1, int) and isinstance(exp2, float)):
                    return exp1 + exp2
                return 'error'
            elif expr.operador == '-':
                if (isinstance(exp1, float) and isinstance(exp2, float)) or (
                        isinstance(exp1, int) and isinstance(exp2, int)) or (
                        isinstance(exp1, float) and isinstance(exp2, int)) or (
                        isinstance(exp1, int) and isinstance(exp2, float)):
                    return exp1 - exp2
                return 'error'
            elif expr.operador == '^':
                if (isinstance(exp1, float) and isinstance(exp2, float)) or (
                        isinstance(exp1, int) and isinstance(exp2, int)) or (
                        isinstance(exp1, float) and isinstance(exp2, int)) or (
                        isinstance(exp1, int) and isinstance(exp2, float)):
                    return exp1 ** exp2
                return 'error'
            elif expr.operador == '%':
                if (isinstance(exp1, float) and isinstance(exp2, float)) or (
                        isinstance(exp1, int) and isinstance(exp2, int)) or (
                        isinstance(exp1, float) and isinstance(exp2, int)) or (
                        isinstance(exp1, int) and isinstance(exp2, float)):
                    return exp1 % exp2
                return 'error'
            elif expr.operador == '==':  # comparacion---------------------------------------
                boole = exp1 == exp2
                return boole
            elif expr.operador == '<>':
                boole = exp1 != exp2
                return boole
            elif expr.operador == '>':
                boole = exp1 > exp2
                return boole
            elif expr.operador == '<':
                boole = exp1 < exp2
                return boole
            elif expr.operador == '!=':
                boole = exp1 != exp2
                return boole
            elif expr.operador == '>=':
                boole = exp1 >= exp2
                return boole
            elif expr.operador == '<=':
                boole = exp1 <= exp2
                return boole
        elif isinstance(expr, Id):
            #VERIFICAMOS SI ES UNA VARIABLE DE LA FUNCION
            if ts.validar_sim(expr.id) == 1:
                simbolo = ts.buscar_sim(expr.id)
                return simbolo.valor
            else:
                if entornoFuncion.validar_sim(expr.id) == 1:
                    simbolo = entornoFuncion.buscar_sim(expr.id)
                    return simbolo.valor
        elif isinstance(expr, Primitivo):
            if expr.valor == 'TRUE':
                return True
            elif expr.valor == 'FALSE':
                return False
            else:
                return expr.valor
        elif isinstance(expr, Trigonometrica.Trigonometrica):
            return Trigonometrica.Trigonometrica.Resolver(expr, ts, Consola, exception)
        elif isinstance(expr, Math.Math_):
            # print("estoy llegango")
            return Math.Math_.Resolver(expr, ts, Consola, exception)
        elif isinstance(expr, Time):
            return Time.resolverTime(expr)
        elif isinstance(expr, Binario):
            return Binario.Resolver(expr, ts, Consola, exception)
        elif isinstance(expr, Unario):
            exp1 = Expresion.Resolver(expr.op, ts, Consola, exception)
            if expr.operador == '-':
                if isinstance(exp1, int) or isinstance(exp1, float):
                    return exp1 * -1
            elif expr.operador == '+':
                if isinstance(exp1, int) or isinstance(exp1, float):
                    return exp1
            elif expr.operador == '!':
                return not exp1
Example #3
0
 def Resolver(expr,ts,Consola,exception):
     if isinstance(expr,Expresion):
         exp1 = Expresion.Resolver(expr.iz,ts,Consola,exception)
         exp2 = Expresion.Resolver(expr.dr,ts,Consola,exception)
         if expr.operador == '=':
             return exp1 == exp2
         elif expr.operador == '*':
             # id = expresion
             # id = (x < 9 )
             if (isinstance(exp1,float) and isinstance(exp2,float)) or (isinstance(exp1,int) and isinstance(exp2,int)) or (isinstance(exp1,float) and isinstance(exp2,int))  or (isinstance(exp1,int) and isinstance(exp2,float)) :
                 return exp1 * exp2
             return 'error'
         elif expr.operador == '/':
             if (isinstance(exp1,float) and isinstance(exp2,float)) or (isinstance(exp1,int) and isinstance(exp2,int)) or (isinstance(exp1,float) and isinstance(exp2,int))  or (isinstance(exp1,int) and isinstance(exp2,float)) :
                 return exp1 /  exp2
             return 'error'
         elif expr.operador == '+':
             if (isinstance(exp1,float) and isinstance(exp2,float)) or (isinstance(exp1,int) and isinstance(exp2,int)) or (isinstance(exp1,float) and isinstance(exp2,int))  or (isinstance(exp1,int) and isinstance(exp2,float)):
                 return exp1 +  exp2
             return 'error'
         elif expr.operador == '-':
             if (isinstance(exp1,float) and isinstance(exp2,float)) or (isinstance(exp1,int) and isinstance(exp2,int)) or (isinstance(exp1,float) and isinstance(exp2,int))  or (isinstance(exp1,int) and isinstance(exp2,float)):
                 return exp1 -  exp2
             return 'error'
         elif expr.operador == '^':
             if (isinstance(exp1,float) and isinstance(exp2,float)) or (isinstance(exp1,int) and isinstance(exp2,int)) or (isinstance(exp1,float) and isinstance(exp2,int))  or (isinstance(exp1,int) and isinstance(exp2,float)):
                 return exp1 **  exp2
             return 'error'
         elif expr.operador == '%':
             if (isinstance(exp1,float) and isinstance(exp2,float)) or (isinstance(exp1,int) and isinstance(exp2,int)) or (isinstance(exp1,float) and isinstance(exp2,int))  or (isinstance(exp1,int) and isinstance(exp2,float)):
                 return exp1 %  exp2
             return 'error'
         elif expr.operador == '==':
             boole= exp1 == exp2
             return  boole
         elif expr.operador == '<>':
             boole = exp1 != exp2
             return boole
         elif expr.operador == '>':
             boole = exp1 > exp2
             return boole
         elif expr.operador == '<':
             boole = exp1 < exp2
             return boole
         elif expr.operador == '!=':
             boole = exp1 != exp2
             return boole
         elif expr.operador == '>=':
             boole = exp1 >= exp2
             return boole
         elif expr.operador == '<=':
             boole = exp1 <= exp2
             return boole
     elif isinstance(expr,Id):
         if ts.validar_sim(expr.id) == 1:
             simvariable = ts.buscar_sim(expr.id)
             return simvariable.valor
         else:
             return 'holamundo' #No deberia de pasar
     elif isinstance(expr, Primitivo):
         if expr.valor == 'TRUE':
             return True
         elif expr.valor == 'FALSE':
             return False
         else:
             return expr.valor
     elif isinstance(expr, Trigonometrica.Trigonometrica):
         return Trigonometrica.Trigonometrica.Resolver(expr,ts,Consola,exception)
     elif isinstance(expr, Math.Math_):
         return  Math.Math_.Resolver(expr,ts,Consola,exception)
     elif isinstance(expr,Time):
         return Time.resolverTime(expr)
     elif isinstance(expr,Binario):
         return Binario.Resolver(expr,ts,Consola,exception)
     elif isinstance(expr, Unario):
         exp1 = Expresion.Resolver(expr.op,ts,Consola,exception)
         if expr.operador == '-':
             if isinstance(exp1, int) or isinstance(exp1, float):
                 return exp1 * -1
         elif expr.operador == '+':
             if isinstance(exp1, int) or isinstance(exp1, float):
                 return exp1
         elif expr.operador == '!':
                 return not exp1