public function rewriteExpression(ExpressionInterface $expression)
 {
     /** @var ConcatenatedExpression $expression */
     $part_expressions = array();
     $mapping = array();
     foreach ($expression->getParts() as $key => $part) {
         if ($part instanceof ConcatenatedExpression === true && $part !== $expression) {
             /** @var ConcatenatedExpression $part */
             //                $rewritten_inner_parts = array_map(function (ExpressionInterface $inner_part) {
             //                    return $this->getRecursiveHandler()->rewriteExpression($inner_part);
             //                }, array_values($part->getParts()));
             //
             //                $rewritten_inner_part_expressions = array_map(function (RewrittenExpressionContainer $rewritten) {
             //                    return $rewritten->getExpression();
             //                }, $rewritten_inner_parts);
             $part_expressions = array_merge($part_expressions, array_values($part->getParts()));
             //                $rewritten_part_expressions = array_map(function (RewrittenExpressionContainer $rewritten) {
             //                    return $rewritten->getExpression();
             //                }, $rewritten_parts);
             $mapping[] = array($key, array_keys($part->getParts()));
         } else {
             $part_expressions[] = $part;
             $mapping[] = $key;
         }
     }
     return new RewrittenExpressionContainer(new ConcatenatedExpression($part_expressions), new ConcatenatedResultFlattenSimplifier($mapping));
 }
 public function flattenExpression(ExpressionInterface $expression)
 {
     /** @var $expression \PeterVanDommelen\Parser\Expression\Concatenated\ConcatenatedExpression */
     $expressions = array($expression);
     foreach ($expression->getParts() as $part) {
         $expressions = array_merge($expressions, $this->getRecursiveHandler()->flattenExpression($part));
     }
     return array_unique($expressions, SORT_REGULAR);
 }
 public function rewriteExpression(ExpressionInterface $expression)
 {
     /** @var ConcatenatedExpression $expression */
     $parts = $expression->getParts();
     $key = key($parts);
     $part = current($parts);
     $rewritten_part = $this->getRecursiveHandler()->rewriteExpression($part);
     return new RewrittenExpressionContainer($rewritten_part->getExpression(), new ConcatenatedResultSimplifier($key, $rewritten_part->getResultRewriter()));
 }
 public function isPotentiallyEmpty(ExpressionInterface $expression)
 {
     /** @var $expression ConcatenatedExpression */
     foreach ($expression->getParts() as $part) {
         if ($this->getRecursiveHandler()->isPotentiallyEmpty($part) === false) {
             return false;
         }
     }
     return true;
 }
 public function rewriteExpression(ExpressionInterface $expression)
 {
     /** @var ConcatenatedExpression $expression */
     $rewritten_parts = array_map(array($this->getRecursiveHandler(), "rewriteExpression"), $expression->getParts());
     $rewritten_part_expressions = array_map(function (RewrittenExpressionContainer $rewritten) {
         return $rewritten->getExpression();
     }, $rewritten_parts);
     $rewritten_part_result_rewriters = array_map(function (RewrittenExpressionContainer $rewritten) {
         return $rewritten->getResultRewriter();
     }, $rewritten_parts);
     return new RewrittenExpressionContainer(new ConcatenatedExpression($rewritten_part_expressions), new ConcatenatedExpressionResultRewriter($rewritten_part_result_rewriters));
 }
 public function compile(ExpressionInterface $expression)
 {
     /** @var $expression \PeterVanDommelen\Parser\Expression\Concatenated\ConcatenatedExpression */
     return new ConcatenatedParser(array_map(array($this->getRecursiveHandler(), "compile"), $expression->getParts()));
 }