public function traverse(array $nodes)
{
foreach ($this->visitors as $visitor) {
if (null !== ($return = $visitor->beforeTraverse($nodes))) {
$nodes = $return;
}
}
$nodes = $this->traverseArray($nodes);
foreach ($this->visitors as $visitor) {
if (null !== ($return = $visitor->afterTraverse($nodes))) {
$nodes = $return;
}
}
return $nodes;
}
public static function parse($code) { $lexer = new \PHPParser_Lexer($code); $parser = new \PHPParser_Parser(); $ast = $parser->parse($lexer); $traverser = new \PHPParser_NodeTraverser(); $traverser->addVisitor(new NormalizingNodeVisitor()); $traverser->addVisitor(new \PHPParser_NodeVisitor_NameResolver()); $ast = $traverser->traverse($ast); switch (count($ast)) { case 0: $ast = new BlockNode(array()); break; case 1: $ast = $ast[0]; break; default: $ast = new BlockNode($ast); } // This is currently only available when using the schmittjoh/PHP-Parser fork. if (class_exists('PHPParser_NodeVisitor_NodeConnector')) { $traverser = new \PHPParser_NodeTraverser(); $traverser->addVisitor(new \PHPParser_NodeVisitor_NodeConnector()); $traverser->traverse(array($ast)); } return $ast; }