コード例 #1
0
 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)
コード例 #2
0
 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)
コード例 #3
0
    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()
コード例 #4
0
 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)
コード例 #5
0
 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)
コード例 #6
0
 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)
コード例 #7
0
 def register_program_end(self):
     cuad = Cuadruple('endprogram', None, None, None)
     self.cuadruples.append(cuad)
コード例 #8
0
 def register_end_proc(self):
     cuad = Cuadruple('endproc', None, None, None)
     self.cuadruples.append(cuad)
コード例 #9
0
 def insert_first_cuad(self):
     cuad = Cuadruple('GOTO', None, None, None)
     self.cuadruples.append(cuad)
コード例 #10
0
 def register_function_era(self, header, obj=None):
     cuad = Cuadruple('era', obj, None, str(header))
     self.cuadruples.append(cuad)