public function reverseRewriteExpressionResult(ExpressionResultInterface $result) { /** @var \PeterVanDommelen\Parser\Expression\Alternative\AlternativeExpressionResult $result */ $key = $result->getKey(); $original_result = $this->alternative_rewriters[$key]->reverseRewriteExpressionResult($result->getResult()); return new AlternativeExpressionResult($original_result, $key); }
public function parseInputStreamWithBacktracking(InputStreamInterface $input, ExpressionResultInterface $previous_result = null) { /** @var AlternativeExpressionResult $previous_result */ if ($previous_result !== null && $previous_result instanceof AlternativeExpressionResult === false) { throw new \Exception("Expected " . AlternativeExpressionResult::class); } $alternatives = $this->alternatives; /** @var BacktrackingStreamingParserInterface|false $current_alternative */ $current_alternative = reset($alternatives); $active = $previous_result === null; while ($active === false) { $active = key($alternatives) === $previous_result->getKey(); if ($active === true) { $alternative_result = $current_alternative->parseInputStreamWithBacktracking($input, $previous_result->getResult()); if ($alternative_result !== null) { return new AlternativeExpressionResult($alternative_result, key($alternatives)); } } $current_alternative = next($alternatives); } while ($current_alternative !== false) { $current_alternative = current($alternatives); $alternative_result = $current_alternative->parseInputStreamWithBacktracking($input); if ($alternative_result !== null) { if ($previous_result !== null && $previous_result->getLength() === $alternative_result->getLength()) { return null; } return new AlternativeExpressionResult($alternative_result, key($alternatives)); } $current_alternative = next($alternatives); } return null; }
public function reverseRewriteExpressionResult(ExpressionResultInterface $result) { /** @var ConcatenatedExpressionResult $result */ $rewritten_parts = array(); foreach ($result->getParts() as $key => $result) { $rewritten_parts[$key] = $this->part_rewriters[$key]->reverseRewriteExpressionResult($result); } return new ConcatenatedExpressionResult($rewritten_parts); }
public function reverseRewriteExpressionResult(ExpressionResultInterface $result) { /** @var ConcatenatedExpressionResult $result */ $parts = array(); $current_index = 0; foreach ($this->mapping as $item) { if (is_array($item) === true) { $subparts = array(); foreach ($item[1] as $subitem) { $subparts[$subitem] = $result->getPart($current_index); $current_index += 1; } $parts[$item[0]] = new ConcatenatedExpressionResult($subparts); } else { $parts[$item] = $result->getPart($current_index); $current_index += 1; } } return new ConcatenatedExpressionResult($parts); }
public function reverseRewriteExpressionResult(ExpressionResultInterface $result) { /** @var AlternativeExpressionResult $result */ if ($result->getKey() === 1) { //empty return new JoinedExpressionResult(array(), array()); } /** @var \PeterVanDommelen\Parser\Expression\Concatenated\ConcatenatedExpressionResult $maybe_part */ $maybe_part = $result->getResult(); /** @var \PeterVanDommelen\Parser\Expression\Repeater\RepeaterExpressionResult $repeater_part */ $repeater_part = $maybe_part->getPart(1); $results = array($this->inner_result_rewriter->reverseRewriteExpressionResult($maybe_part->getPart(0))); $seperators = array(); foreach ($repeater_part->getResults() as $repeater_part_part) { /** @var \PeterVanDommelen\Parser\Expression\Concatenated\ConcatenatedExpressionResult $repeater_part_part */ $seperators[] = $this->seperator_result_rewriter->reverseRewriteExpressionResult($repeater_part_part->getPart(0)); $results[] = $this->inner_result_rewriter->reverseRewriteExpressionResult($repeater_part_part->getPart(1)); } return new JoinedExpressionResult($results, $seperators); }
public function parseInputStreamWithBacktracking(InputStreamInterface $input, ExpressionResultInterface $previous_result = null) { if ($previous_result !== null && $previous_result instanceof ConcatenatedExpressionResult === false) { throw new \Exception("Expected " . ConcatenatedExpressionResult::class); } /** @var ConcatenatedExpressionResult|null $previous_result */ $position = 0; if ($previous_result !== null) { $part_results = array_values($previous_result->getParts()); $index = count($this->parts) - 1; for ($i = 0; $i < count($this->parts); $i += 1) { $position += $part_results[$i]->getLength(); } $input->move($position); } else { $part_results = array_fill(0, count($this->parts), null); $index = 0; } for (; $index < count($this->parts);) { $part = $this->parts[$index]; if ($part_results[$index] !== null) { $input->move(-$part_results[$index]->getLength()); $position -= $part_results[$index]->getLength(); } $part_result = $part->parseInputStreamWithBacktracking($input, $part_results[$index]); if ($part_result === null) { if ($index === 0) { $input->move(-$position); return null; } $part_results[$index] = $part_result; $index -= 1; } else { $position += $part_result->getLength(); $part_results[$index] = $part_result; $index += 1; } } $corrected_part_results = array_combine($this->key_to_index, $part_results); return new ConcatenatedExpressionResult($corrected_part_results); }
public function reverseRewriteExpressionResult(ExpressionResultInterface $result) { /** @var RepeaterExpressionResult $result */ return new RepeaterExpressionResult(new \ArrayIterator(array_map(array($this->inner_rewriter, "reverseRewriteExpressionResult"), iterator_to_array($result->getResults())))); }
public function getString() { return $this->part_result->getString(); }