Я хочу проанализировать исходный файл PHP в AST (желательно в виде вложенного массива инструкций).
Я в основном хочу конвертировать
f($a, $b + 1)
во что-то вроде
array( 'function_call', array( array( 'var', '$a' ), array( 'expression', array( array( 'binary_operation', '+', array ('var', '$b'), array( 'int', '1' ) ) ) ) ) )
Есть ли встроенная библиотека PHP или сторонние библиотеки (желательно на PHP), которые позволили бы мне это сделать?
Я реализовал PHP Parser после того, как понял, что существующего парсера нет . Он анализирует PHP-код в дереве узлов.
Хип-хоп
Вы можете использовать HHVM Facebook, чтобы сбросить AST.
apt-get install hhvm # parse specified file and dump the AST hhvm --parse arg
Это сработало для HipHop (старого компилятора PHP на C ++) – еще в 2013 году!
HHVM
Обновление до 2015 года
--parse
не поддерживается.
Вы получите сообщение об ошибке: HHVM The 'parse' command line option is not supported.
Запрос свойства для поддержки опции CLI снова: https://github.com/facebook/hhvm/issues/4615
PHP 7
PHP 7 будет иметь АСТ, см. Соответствующий RFC .
Существует два расширения, которые обеспечивают доступ и предоставляют AST, созданный PHP 7:
Pfff – это библиотека OCaml для анализа и управления PHP-кодом. Подробнее см. Руководство Pfff .
Нет, нет такой встроенной функции. Но вы можете использовать Tokenizer для его создания.
Ну, вы можете посмотреть ответы от Parsing and Printing PHP Code и генерации кода PHP (из токенов Parser) : в основном пакет PEAR's PHP_Beautifier по адресу http://pear.php.net/package/PHP_Beautifier можно расширить, чтобы делать то, что вы хотите , но звучит так, будто это требует некоторой тяжелой работы.
И если вы не ограничены PHP, то http://www.eclipse.org/pdt/articles/ast/PHP_AST.html проведет вас с помощью анализатора АСТ в Eclipse PHP.