Сгенерировать AST исходного файла PHP

Я хочу проанализировать исходный файл 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.

См. https://github.com/facebook/hhvm/blob/c494c3a145008f65d349611eb2d09d0c33f1ab23/hphp/runtime/base/program_functions.cpp#L1111.

Запрос свойства для поддержки опции 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.