diff options
author | Ludovic Pouzenc <ludovic@pouzenc.fr> | 2012-08-01 08:29:21 +0000 |
---|---|---|
committer | Ludovic Pouzenc <ludovic@pouzenc.fr> | 2012-08-01 08:29:21 +0000 |
commit | e73d3ed6011892b053b75419a43317c6a07bc763 (patch) | |
tree | 68f07771560b856e10bd464163c46cbe566df2a1 /tests/test01-parsing/src/php-weave/main.php | |
parent | cfdc1bc2f770341db269279b160d9210cd4b923c (diff) | |
download | 2012-php-weave-e73d3ed6011892b053b75419a43317c6a07bc763.tar.gz 2012-php-weave-e73d3ed6011892b053b75419a43317c6a07bc763.tar.bz2 2012-php-weave-e73d3ed6011892b053b75419a43317c6a07bc763.zip |
Premier commit.
nikic-PHP-Parser est un outil très prometteur.
Le test test01-parsing inclu dans l'AST principal tous les include(<String>) ou string est un chemin relatif facile à résoudre.
git-svn-id: file:///var/svn/2012-php-weave/trunk@2 d972a294-176a-4cf9-8ea1-fcd5b0c30f5c
Diffstat (limited to 'tests/test01-parsing/src/php-weave/main.php')
-rw-r--r-- | tests/test01-parsing/src/php-weave/main.php | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/tests/test01-parsing/src/php-weave/main.php b/tests/test01-parsing/src/php-weave/main.php new file mode 100644 index 0000000..2a4df55 --- /dev/null +++ b/tests/test01-parsing/src/php-weave/main.php @@ -0,0 +1,64 @@ +<?php +require '../vendor/nikic/php-parser/lib/bootstrap.php'; +require './visitors.inc.php'; + +ini_set('xdebug.max_nesting_level', 2000); + +function dbg($indent, $text) { + for($i=0;$i<$indent;$i++) echo "."; + echo "$text\n"; +} + +function recursive_parse($src_filepath, $stmts1_filepath, $stmts2_filepath, $level=0) { + global $parser,$nodeDumper; + + try { + dbg($level,"Parsing '$src_filepath'"); + $stmts = $parser->parse(file_get_contents($src_filepath)); + + if (strlen($stmts1_filepath) > 0 ) { + dbg($level,"Dumping1 '$src_filepath' AST to '$stmts1_filepath'"); + file_put_contents($stmts1_filepath, $nodeDumper->dump($stmts)); + } + + dbg($level,"Transforming '$src_filepath'"); + $traverser = new PHPParser_NodeTraverser; +/* + $traverser->addVisitor(new PHPParser_NodeVisitor_NameResolver); + $traverser->addVisitor(new NodeVisitor_NamespaceConverter); +*/ + // FIXME : getcwd is quick and dirty here + $traverser->addVisitor(new NodeVisitor_PreprocessInclude($level, getcwd(), $src_filepath)); + $stmts = $traverser->traverse($stmts); + $traverser=null; //Destroy + + if (strlen($stmts2_filepath) > 0) { + dbg($level,"Dumping2 '$src_filepath' AST to '$stmts2_filepath'"); + file_put_contents($stmts2_filepath, $nodeDumper->dump($stmts)); + } + + } catch (PHPParser_Error $e) { + echo 'Parse Error: ', $e->getMessage(); + } + return $stmts; +} + + +// Main +$src_filepath = "./main.php"; +#$src_filepath = "./to_parse.php"; +$stmts1_filepath = "out/stmts1.ast"; +$stmts2_filepath = "out/stmts2.ast"; +$dest_filepath = "out/result.php"; + +$parser = new PHPParser_Parser(new PHPParser_Lexer); +$nodeDumper = new PHPParser_NodeDumper; + +$level=0; +$stmts=recursive_parse($src_filepath, $stmts1_filepath, $stmts2_filepath); + +dbg(0,"Outputing '$dest_filepath'"); +$prettyPrinter = new PHPParser_PrettyPrinter_Zend; +file_put_contents($dest_filepath, "<?php\n" . $prettyPrinter->prettyPrint($stmts) . "\n?>"); + +?> |