コード例 #1
0
def p_primitivo(t):
    '''
    literal :   ENTERO
              | CADENA
              | CARACTER
              | TEMPORAL
              | ID 
              | NAME
              | NONE 
    '''
    t[0] = Literal('None', t.lexer.lineno) if t[1] == 'NONE' else Literal(t[1], t.lexer.lineno)
コード例 #2
0
def optimizacion_dieciseis(instrucciones, arbol):
    for inst in instrucciones:
        if isinstance(inst, Def):
            def_instructions = inst.instrucciones
            for def_inst in def_instructions:
                if isinstance(def_inst, Asignacion) and isinstance(
                        def_inst.derecha, Operacion):
                    operacion = def_inst.derecha
                    if def_inst.izquierda.toString(
                    ) != operacion.izquierda.toString(
                    ) and operacion.operador == '*' and operacion.derecha and operacion.derecha.toString(
                    ) == '2':
                        dic = {
                            'type': 'Tipo 16',
                            'before': f"{def_inst.toString()}",
                            'opt':
                            f"{def_inst.izquierda.toString()} = {operacion.izquierda.toString()} + {operacion.izquierda.toString()}",
                            'line': f"{def_inst.linea}",
                        }
                        arbol.addOpt(dic)
                        literal = Literal(operacion.izquierda.toString(),
                                          operacion.linea)
                        nueva_operacion = Operacion(literal, '+', literal,
                                                    operacion.linea)
                        index = def_instructions.index(def_inst)
                        def_instructions[index] = nueva_operacion
コード例 #3
0
def optimizacion_dieciocho(instrucciones, arbol):
    for inst in instrucciones:
        if isinstance(inst, Def):
            def_instructions = inst.instrucciones
            for def_inst in def_instructions:
                if isinstance(def_inst, Asignacion) and isinstance(
                        def_inst.derecha, Operacion):
                    operacion = def_inst.derecha
                    if def_inst.izquierda.toString(
                    ) != operacion.derecha.toString(
                    ) and operacion.operador == '/' and operacion.derecha and operacion.izquierda.toString(
                    ) == '0':
                        dic = {
                            'type': 'Tipo 18',
                            'before': f"{def_inst.toString()}",
                            'opt':
                            f"{def_inst.izquierda.toString()} = {operacion.izquierda.toString()}",
                            'line': f"{def_inst.linea}",
                        }
                        arbol.addOpt(dic)
                        literal = Literal(0, operacion.linea)
                        def_inst.derecha = literal