示例#1
0
def eval_abs(childs: List[ASTNode]):
    izq = eval_expression(childs[0])
    try:
        return abs(izq)
    except Exception as e:
        ne = globales.CError("Error al operar la abs({})".format(izq),
                             childs[0].line, 0, "semantico")
        globales.lErroresSemanticos.append(ne)
        console_handler('Error de operandos')
示例#2
0
def eval_shift_der(childs: List[ASTNode]):
    izq = eval_expression(childs[0])
    der = eval_expression(childs[1])
    try:
        return izq >> der
    except Exception as e:
        ne = globales.CError("Error al operar la suma", childs[0].line, 0,
                             "semantico")
        globales.lErroresSemanticos.append(ne)
        console_handler('Error de operandos')
示例#3
0
def eval_lte(childs: List[ASTNode]):
    izq = eval_expression(childs[0])
    der = eval_expression(childs[1])
    try:
        return 1 if izq <= der else 0
    except Exception as e:
        ne = globales.CError("Error al operar la LTE", childs[0].line, 0,
                             "semantico")
        globales.lErroresSemanticos.append(ne)
        console_handler('Error de operandos')
示例#4
0
def eval_div(childs: List[ASTNode]):
    izq = eval_expression(childs[0])
    der = eval_expression(childs[1])
    is_number = (isinstance(izq, int) or isinstance(
        izq, float)) and (isinstance(der, int) or isinstance(der, float))
    is_str = isinstance(izq, str) and isinstance(der, str)

    try:
        if is_number:
            resultado = izq / der
            return resultado
        else:
            ne = globales.CError("Error al operar la div", childs[0].line, 0,
                                 "semantico")
            globales.lErroresSemanticos.append(ne)
            console_handler('Error de operandos')
    except:
        ne = globales.CError("Error al operar la div", childs[0].line, 0,
                             "semantico")
        globales.lErroresSemanticos.append(ne)
        console_handler('Error de operandos')
示例#5
0
def eval_unaria(childs: List[ASTNode]):
    izq = childs[0].typee
    der = eval_expression(childs[1])
    try:
        if izq == '!':
            return 0 if der else 1
        elif izq == '-':
            return der * -1
        elif izq == '~':
            return ~der
    except Exception as e:
        ne = globales.CError("Error al operar la -({})".format(izq),
                             childs[0].line, 0, "semantico")
        globales.lErroresSemanticos.append(ne)
        console_handler('Error de operandos')
示例#6
0
def cast_value(childs: List[ASTNode]):
    izq = childs[0].childs[0].childs[0].typee
    der = eval_expression(childs[0].childs[1])
    try:
        if izq == 'float':
            return float(der)
        if izq == 'int':
            try:
                intt = int(der)
                return intt
            except:
                intt = ord(der)
                return intt
        if izq == 'char':
            return chr(der)
    except Exception as e:
        ne = globales.CError("Error al operar casteo ({}) {}".format(izq, der),
                             childs[0].line, 0, "semantico")
        globales.lErroresSemanticos.append(ne)
        console_handler('Error de operandos')