docs: def _build(self, lexer):
          """Build :class:`~ctfile.ctfile.SDfile` instance.
  
          :return: :class:`~ctfile.ctfile.SDfile` instance.
          :rtype: :class:`~ctfile.ctfile.SDfile`.
          """
          current_entry_id = 0
  
          while True:
              token = next(lexer)
              key = token.__class__.__name__
  
              if key == 'MolfileStart':
                  current_entry_id += 1
                  molfile = Molfile()
                  molfile._build(lexer)
                  self[str(current_entry_id)] = OrderedDict(molfile=molfile, data=OrderedDict())
  
              elif key == 'DataBlockStart':
                  data_block = self._build_data_block(lexer)
                  self[str(current_entry_id)]['data'].update(data_block)
  
              elif key == 'EndOfFile':
                  break
  
              else:
                  raise KeyError('SDfile does not supposed to have any other information: "{}".'.format(key))
  
          return self