code: def parse_lines(self, code):
          
          remove_comments = re.compile(r'^([^;@\n]*);?.*$', re.MULTILINE)
          code = '\n'.join(remove_comments.findall(code))  # TODO can probably do this better
          # TODO labels with spaces between pipes is allowed `|label with space| INST OPER`
          parser = re.compile(r'^(\S*)?[\s]*(\S*)([^\n]*)$', re.MULTILINE)
          res = parser.findall(code)
          # Make all parsing of labels and instructions adhere to all uppercase
          res = [(label.upper(), instruction.upper(), parameters.strip()) for (label, instruction, parameters) in res]
          return res
docs: Return a list of the parsed code
  
          For each line, return a three-tuple containing:
          1. The label
          2. The instruction
          3. Any arguments or parameters
  
          An element in the tuple may be None or '' if it did not find anything
          :param code: The code to parse
          :return: A list of tuples in the form of (label, instruction, parameters)