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
Build :class:`~ctfile.ctfile.SDfile` instance.

        :return: :class:`~ctfile.ctfile.SDfile` instance.
        :rtype: :class:`~ctfile.ctfile.SDfile`.