public function rewriteExpression(ExpressionInterface $expression)
 {
     /** @var JoinedExpression $expression */
     $rewritten_inner_expression = $this->getRecursiveHandler()->rewriteExpression($expression->getExpression());
     $rewritten_seperator_expression = $this->getRecursiveHandler()->rewriteExpression($expression->getSeperator());
     $repeater_part = new ConcatenatedExpression(array($rewritten_seperator_expression->getExpression(), $rewritten_inner_expression->getExpression()));
     $maximum = $expression->getMaximum();
     if ($maximum !== null) {
         $maximum = $maximum - 1;
     }
     $maybe_part = new ConcatenatedExpression(array($rewritten_inner_expression->getExpression(), new RepeaterExpression($repeater_part, $expression->isLazy(), max(0, $expression->getMinimum() - 1), $maximum)));
     return new RewrittenExpressionContainer(new AlternativeExpression(array($maybe_part, new ConstantExpression(""))), new JoinedExpressionResultRewriter($rewritten_inner_expression->getResultRewriter(), $rewritten_seperator_expression->getResultRewriter()));
 }