|
phpParseTree
The Parse_Tree extension generates an XML parse tree from a php code.
Phase-Implementation, Phase-Deploy, Featured IntroductionThe Parse_Tree extension generates an XML parse tree from a php source code. For example: <?php
if (!extension_loaded('parse_tree')) {
$prefix = (PHP_SHLIB_SUFFIX === 'dll') ? 'php_' : '';
dl($prefix . 'parse_tree.' . PHP_SHLIB_SUFFIX);
}
echo generate_parse_tree(__FILE__);
?>Will output something very ugly like: <yaxx:T_IF id="4">if</yaxx:T_IF> <yaxx:CHAR40 id="6">(</yaxx:CHAR40> <yaxx:expr id="28"> <yaxx:expr_without_variable id="27"> <yaxx:CHAR33 id="8">!</yaxx:CHAR33> <yaxx:expr id="24"> <yaxx:r_variable id="23"> <yaxx:variable id="20"> <yaxx:base_variable_with_function_calls id="1d"> <yaxx:function_call id="1c"> <yaxx:T_STRING id="a">extension_loaded</yaxx:T_STRING> <yaxx:CHAR40 id="c">(</yaxx:CHAR40> etc... This extension also provides an XSLT stylesheet able to output a php source code from an XML parse tree. define('XML_OPTIONS', LIBXML_DTDLOAD | LIBXML_NOENT | LIBXML_DTDATTR | LIBXML_NOCDATA);
$source = parse_tree_from_file('source/order.php');
/*
Tree modifications...
*/
$xml = new DOMDocument;
$xml->loadXML($source, XML_OPTIONS);
$xsl = new DOMDocument;
$xsl->load('toWrite.xsl', XML_OPTIONS);
$proc = new XSLTProcessor;
$proc->importStyleSheet($xsl);
file_put_contents('target/order.php', $proc->transformToXML($xml));So now you just have to create your own XSLT stylesheet to perform any operations you want (code optimization, code obfuscation, whatever...). The parse tree generatorIf you want, you can try this extension without installing it: http://phpaspect.org/ast ContactsYou can join the googlegroups about this pecl extension: php_parse_tree@googlegroups.com, see the archives. If you have any specific question, you can e-mail me directly: wcandillon@elv.telecom-lille1.eu. |
► Sign in to add a comment
With newer versions of parse_tre, this example should use
parse_tree_from_file
instead of
generate_parse_tree
(tested on PHP 5.3.0-dev, with parse_tree-0.1.4).
the demo at http://phpaspect.org/ast doesn't work:
"The parse generator is currently not working, I need to put this application somewhere else, please come back soon."
then the link here might be disabled as well.
What is this? Just a tokenizer!?
symmetricobjects: Exactly, it looks only like plain tokenizer with ability to export the token list to the XML. (This is not much more, what one could gain from the token_get_all() output.
However, there is one promising image in the extension's source code repository, which looks like the parser's output. I do not know how author made this picture and if the Parse_Tree? extension was used for it.