docs: 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)