def register_goto(self): cuads = self.program_engine.cuadruples cuad = Cuadruple('GOTO', None, None, None) last_gotof = self.program_engine.jump_stack.pop() self.program_engine.send_cuad(cuad) self.program_engine.cuadruples[last_gotof].result = len(cuads) self.goto_stack.append(len(cuads) - 1)
def fill_gotof(self): cuads = self.program_engine.cuadruples gotof = self.program_engine.jump_stack.pop() while_cuad = cuads[gotof] while_cuad.result = len(cuads) + 1 while_start = self.program_engine.jump_stack.pop() cuad = Cuadruple('GOTO', None, None, while_start) self.program_engine.send_cuad(cuad)
def register_return(self, function_name, return_variable, return_type): function = self.current_context.parent.function_directory.functions.get( function_name) function_return_type = function.get("return_type") if function_return_type == return_type: cuad = Cuadruple('return', None, None, return_variable) self.cuadruples.append(cuad) else: print("Return value type in " + function_name + " does not match, received " + return_type + " expected: " + function_return_type) sys.exit()
def register_conditional(self): cuads = self.program_engine.cuadruples cuad = Cuadruple('GOTOF', self.operation_system.identifier_stack.pop(), None, None) self.program_engine.send_cuad(cuad) self.program_engine.jump_stack.append(len(cuads) - 1)
def generate_cuad(self, operation, left_side=None, right_side=None, result=None): cuad = Cuadruple(operation, left_side, right_side, result) self.program_engine.send_cuad(cuad)
def remove_global_enviroment(self): self.memory_direction -= 100000 cuad = Cuadruple('GOTO', None, None, None) self.global_goto = len(self.cuadruples) self.cuadruples.append(cuad)
def register_program_end(self): cuad = Cuadruple('endprogram', None, None, None) self.cuadruples.append(cuad)
def register_end_proc(self): cuad = Cuadruple('endproc', None, None, None) self.cuadruples.append(cuad)
def insert_first_cuad(self): cuad = Cuadruple('GOTO', None, None, None) self.cuadruples.append(cuad)
def register_function_era(self, header, obj=None): cuad = Cuadruple('era', obj, None, str(header)) self.cuadruples.append(cuad)