public function compile(ExpressionInterface $expression)
 {
     /** @var $expression \PeterVanDommelen\Parser\Expression\Repeater\RepeaterExpression */
     if ($expression->isLazy() === true) {
         return new LazyRepeaterParser($this->getRecursiveHandler()->compile($expression->getExpression()), $expression->getMinimum(), $expression->getMaximum());
     }
     return new GreedyRepeaterParser($this->getRecursiveHandler()->compile($expression->getExpression()), $expression->getMinimum(), $expression->getMaximum());
 }
 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()));
 }
 public function rewriteExpression(ExpressionInterface $expression)
 {
     /** @var RepeaterExpression $expression */
     $rewritten_inner = $this->getRecursiveHandler()->rewriteExpression($expression->getExpression());
     return new RewrittenExpressionContainer(new RepeaterExpression($rewritten_inner->getExpression(), $expression->isLazy(), $expression->getMinimum(), $expression->getMaximum()), new RepeaterExpressionResultRewriter($rewritten_inner->getResultRewriter()));
 }