/** * @param Expression $expression * @param HierarchyVisitor $visitor * @return bool */ public function depthFirstHierarchicWalk(Expression $expression, HierarchyVisitor $visitor) { $hierarchicVisitDispatcher = new HierachicalVisitDispatcher($visitor); $walker = new DepthFirstStackBasedWalker(); $walkState = $walker->walk($expression, $hierarchicVisitDispatcher); return $walkState; }
/** * @param Expression $e * @param \Helstern\Nomsky\Grammar\Transformations\EliminateOptionals\OptionalsEliminator $visitor * * @return Expression|null */ public function walkAndVisitExpression(Expression $e, OptionalsEliminator $visitor) { $hierarchicVisitDispatcher = new CompleteVisitDispatcher($visitor); $walker = new DepthFirstStackBasedWalker(); $walker->walk($e, $hierarchicVisitDispatcher); $walkResult = $visitor->getRoot(); return $walkResult; }
public function findFirst(SymbolPredicate $predicate) { $findFirstStateMachine = new FindFirstStateMachine($predicate); $walker = new DepthFirstStackBasedWalker($findFirstStateMachine); $expression = $this->getExpression(); $walker->walk($expression, NoDispatchDispatcher::singletonInstance()); $found = $findFirstStateMachine->getExpression(); return $found; }
/** * @param Expression $e * @param NonTerminalNamingStrategy $namingStrategy * *@return Expression|null */ public function getDepthFirstWalkResult(Expression $e, NonTerminalNamingStrategy $namingStrategy) { $visitor = new OptionalsEliminator($namingStrategy); $hierarchicVisitDispatcher = new CompleteVisitDispatcher($visitor); $walker = new DepthFirstStackBasedWalker(); $walker->walk($e, $hierarchicVisitDispatcher); $walkResult = $visitor->getRoot(); return $walkResult; }
/** * @param Expression $e * * @return Expression|null */ public function getDepthFirstWalkResult(Expression $e) { $visitor = new Visitor(); $hierarchicVisitDispatcher = new CompleteVisitDispatcher($visitor); $walker = new DepthFirstStackBasedWalker(); $walker->walk($e, $hierarchicVisitDispatcher); $walkResult = $visitor->getRoot(); return $walkResult; }
/** * @param Production $production * @return array|Production[] */ public function transform(Production $production) { $expression = $production->getExpression(); $visitor = new Visitor(); $hierarchicVisitDispatcher = new CompleteVisitDispatcher($visitor); $walker = new DepthFirstStackBasedWalker(); $walker->walk($expression, $hierarchicVisitDispatcher); $rootExpression = $visitor->getRoot(); $production = new StandardProduction($production->getNonTerminal(), $rootExpression); return array($production); }
/** * @param Production $initialProduction * @return array|Production[] */ public function transform(Production $initialProduction) { $expression = $initialProduction->getExpression(); $visitor = new OptionalsEliminator($this->nonTerminalNamingStrategy); $hierarchicVisitDispatcher = new CompleteVisitDispatcher($visitor); $walker = new DepthFirstStackBasedWalker(); $walker->walk($expression, $hierarchicVisitDispatcher); $visitRoot = $visitor->getRoot(); $cleanedProduction = new StandardProduction($initialProduction->getNonTerminal(), $visitRoot); $cleanedProductionsList = array($cleanedProduction); $cleanedProductionsList = array_merge($cleanedProductionsList, $visitor->getEpsilonAlternatives()); return $cleanedProductionsList; }
/** * @param Expression $e * * @return Expression|null */ public function getDepthFirstWalkResult(Expression $e) { $visitors = [new EliminateGroups\Visitor(), new EliminateNesting\Visitor()]; $walkResult = $e; foreach ($visitors as $visitor) { $hierarchicVisitDispatcher = new CompleteVisitDispatcher($visitor); $walker = new DepthFirstStackBasedWalker(); $walker->walk($walkResult, $hierarchicVisitDispatcher); if ($visitor instanceof EliminateGroups\Visitor | $visitor instanceof EliminateNesting\Visitor) { $walkResult = $visitor->getRoot(); } } return $walkResult; }