public function testVisitExpressionTreeOfOneLeaf()
 {
     $expression = ExpressionSymbol::createAdapterForTerminal('a');
     $eliminator = new Visitor();
     $eliminator->visitExpression($expression);
     $actual = $eliminator->getRoot();
     $this->assertEquals($expression, $actual);
 }
Beispiel #2
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;
 }
Beispiel #3
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);
 }