def remove(self, *nonterminals):
        # type: (Iterable[Type[Nonterminal]]) -> None
        """
        Remove nonterminals from the set.
        Removes also rules using this nonterminal.
        Set start symbol to None if deleting nonterminal is start symbol at the same time.
        :param nonterminals: Nonterminals to remove.
        """
        for nonterm in set(nonterminals):
            _NonterminalSet._control_nonterminal(nonterm)
            if nonterm not in self:
                raise KeyError('Nonterminal ' + nonterm.__name__ + ' is not inside')
            self._grammar.rules.remove(*self._assign_map[nonterm], _validate=False)
            del self._assign_map[nonterm]
            if self._grammar.start is nonterm:
                del self._grammar.start
            super().remove(nonterm)