'Parse a ``;`` separated declaration list.
You may want to use :meth:`parse_declarations_and_at_rules` (or
some other method that uses :func:`parse_declaration` directly)
instead if you have not just declarations in the same context.
:param tokens:
an iterable of tokens. Should stop at (before) the end
of the block, as marked by ``}``.
:return:
a tuple of the list of valid :class:`Declaration` and a list
of :class:`~.parsing.ParseError`'

def parse_declaration_list(self, tokens):

    parts = []
    this_part = []
    for token in tokens:
        if (token.type == u';'):
            parts.append(this_part)
            this_part = []
        else:
            this_part.append(token)
    parts.append(this_part)
    declarations = []
    errors = []
    for tokens in parts:
        tokens = strip_whitespace(tokens)
        if tokens:
            try:
                declarations.append(self.parse_declaration(tokens))
            except ParseError as exc:
                errors.append(exc)
    return (declarations, errors)
