Validate one side of the rule.
        :param side: Iterable side of the rule.
        :param grammar: Grammar on which to validate.
        :raise RuleSyntaxException: If invalid syntax is use.
        :raise UselessEpsilonException: If useless epsilon is used.
        :raise TerminalDoesNotExistsException: If terminal does not exists in the grammar.
        :raise NonterminalDoesNotExistsException: If nonterminal does not exists in the grammar.

def _controlSide(cls, side, grammar):
        # type: (_MetaRule, List[object], Grammar) -> None
        """
        Validate one side of the rule.
        :param side: Iterable side of the rule.
        :param grammar: Grammar on which to validate.
        :raise RuleSyntaxException: If invalid syntax is use.
        :raise UselessEpsilonException: If useless epsilon is used.
        :raise TerminalDoesNotExistsException: If terminal does not exists in the grammar.
        :raise NonterminalDoesNotExistsException: If nonterminal does not exists in the grammar.
        """
        if not isinstance(side, list):
            raise RuleSyntaxException(cls, 'One side of rule is not enclose by list', side)
        if len(side) == 0:
            raise RuleSyntaxException(cls, 'One side of rule is not define', side)
        if EPS in side and len(side) > 1:
            raise UselessEpsilonException(cls)
        for symb in side:
            if isclass(symb) and issubclass(symb, Nonterminal):
                if symb not in grammar.nonterminals:
                    raise NonterminalDoesNotExistsException(cls, symb, grammar)
            elif symb is EPS:
                continue
            elif symb not in grammar.terminals:
                raise TerminalDoesNotExistsException(cls, symb, grammar)