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