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)
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
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