Example #1
0
 /**
  * @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;
 }
Example #4
0
 /**
 * @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;
 }
Example #5
0
 /**
  * @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;
 }
Example #6
0
 /**
  * @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);
 }
Example #7
0
 /**
  * @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;
 }