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 isPotentiallyEmpty(ExpressionInterface $expression) { /** @var $expression RepeaterExpression */ //because this method is also used to detect left recursion we always need to access the inner expression $inner_expression_empty = $this->getRecursiveHandler()->isPotentiallyEmpty($expression->getExpression()); if ($expression->getMinimum() === 0) { return true; } if ($inner_expression_empty === true) { return true; } return false; }
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())); }
public function compile(ExpressionInterface $expression) { /** @var $expression NotExpression */ return new NotParser($this->getRecursiveHandler()->compile($expression->getExpression()), $this->encoding); }
public function flattenExpression(ExpressionInterface $expression) { /** @var $expression \PeterVanDommelen\Parser\Expression\Repeater\RepeaterExpression */ return array_unique(array_merge(array($expression), $this->getRecursiveHandler()->flattenExpression($expression->getExpression())), SORT_REGULAR); }
public function rewriteExpression(ExpressionInterface $expression) { /** @var NotExpression $expression */ $inner = $this->getRecursiveHandler()->rewriteExpression($expression->getExpression()); return new RewrittenExpressionContainer(new NotExpression($inner->getExpression()), new TerminateExpressionResultRewriter()); }
public function flattenExpression(ExpressionInterface $expression) { /** @var $expression NotExpression */ return array_unique(array_merge(array($expression), $this->getRecursiveHandler()->flattenExpression($expression->getExpression())), SORT_REGULAR); }