def _build(self, lexer):
        """Build :class:`~ctfile.ctfile.Molfile` instance.

        :return: :class:`~ctfile.ctfile.Molfile` instance.
        :rtype: :class:`~ctfile.ctfile.Molfile`.
        """
        key = ''
        while key != 'EndOfFile':

            token = next(lexer)
            key = token.__class__.__name__

            if key == 'HeaderBlock':
                self[key].update(token._asdict())

            elif key == 'CtabBlockStart':
                ctab = Ctab()
                ctab._build(lexer)
                self['Ctab'] = ctab

            elif key == 'MolfileStart':
                pass

            elif key in ('MolfileEnd', 'EndOfFile'):
                break

            else:
                raise KeyError('Molfile object does not supposed to have any other information: "{}".'.format(key))

        return self