<?php use PhpParser\ParserFactory; require __DIR__ . "/vendor/autoload.php"; $graphviz = false; list($fileName, $code) = getCode($argc, $argv); $parser = new PHPCfg\Parser((new ParserFactory())->create(ParserFactory::PREFER_PHP7)); $declarations = new PHPCfg\Visitor\DeclarationFinder(); $calls = new PHPCfg\Visitor\CallFinder(); $variables = new PHPCfg\Visitor\VariableFinder(); $traverser = new PHPCfg\Traverser(); $traverser->addVisitor($declarations); $traverser->addVisitor($calls); $traverser->addVisitor(new PHPCfg\Visitor\Simplifier()); $traverser->addVisitor($variables); $script = $parser->parse($code, __FILE__); $traverser->traverse($script); if ($graphviz) { $dumper = new PHPCfg\Printer\GraphViz(); echo $dumper->printScript($script); } else { $dumper = new PHPCfg\Printer\Text(); echo $dumper->printScript($script); } function getCode($argc, $argv) { if ($argc >= 2) { if (strpos($argv[1], '<?php') === 0) { return ['command line code', $argv[1]]; } else { return [$argv[1], file_get_contents($argv[1])];
* @var string */ public $string; /** * @var double */ public $double; } EOF; require 'vendor/autoload.php'; $astTraverser = new PhpParser\NodeTraverser(); $astTraverser->addVisitor(new PhpParser\NodeVisitor\NameResolver()); $parser = new PHPCfg\Parser((new ParserFactory())->create(ParserFactory::PREFER_PHP7), $astTraverser); $traverser = new PHPCfg\Traverser(); $traverser->addVisitor(new PHPCfg\Visitor\Simplifier()); $typeReconstructor = new PHPTypes\TypeReconstructor(); $dumper = new PHPCfg\Printer\Text(); $block = $parser->parse($code, __FILE__); $traverser->traverse($block); $state = new PHPTypes\State([$block]); $typeReconstructor->resolve($state); $blocks = $state->blocks; $optimizer = new PHPOptimizer\Optimizer(); //$blocks = $optimizer->optimize($blocks); function rmdir_recursive($dir) { $it = new RecursiveDirectoryIterator($dir); $it = new RecursiveIteratorIterator($it, RecursiveIteratorIterator::CHILD_FIRST); foreach ($it as $file) { if ('.' === $file->getBasename() || '..' === $file->getBasename()) {