docs: def parse_top_level(self):
          """The top level parser will do a loop where it looks for a single
          contact parse and then eats all whitespace until there is no more
          input left or another contact is found to be parsed and stores them.
          """
          contacts = []
          while not self.eos:
              contact = self.parse_contact()  # match a contact expression.
              if not contact:  # There was no contact so end file.
                  break  # This would be a nice place to put other expressions.
              contacts.append(contact)
              # skip all whitespace between the end of the last contact and the
              # next non whitespace character, ie until something interesting.
              self.parse_whitespace()
          output = {}
          for key, value in contacts:
              output[key] = value
          return output