Remove rules from the set.
        :param rules: Rules to remove.
        :param _validate: True if the rule should be validated before deleting.
        This parameter is only for internal use.
        :raise NotRuleException: If the parameter doesn't inherit from Rule.
        :raise RuleException: If the syntax of the rule is invalid.
        :raise KeyError: If the rule is not in the grammar.

def remove(self, *rules, _validate=True):
        # type: (Iterable[Type[Rule]], bool) -> None
        """
        Remove rules from the set.
        :param rules: Rules to remove.
        :param _validate: True if the rule should be validated before deleting.
        This parameter is only for internal use.
        :raise NotRuleException: If the parameter doesn't inherit from Rule.
        :raise RuleException: If the syntax of the rule is invalid.
        :raise KeyError: If the rule is not in the grammar.
        """
        all_rules = set()
        for rule in rules:
            if _validate:
                self._validate_rule(rule)
            for r in self._split_rules(rule):
                if not self.__contains__(rule, _validate=False):
                    raise KeyError('Rule ' + rule.__name__ + ' is not inside')
                all_rules.add(r)
        for rule in all_rules:
            for side in rule.rule:
                for s in side:
                    self._assign_map[s].discard(rule)
            super().remove(rule)