Ответ 1
Я реализовал PHP Parser после того, как понял, что там не было уже существующего синтаксического анализатора. Он анализирует PHP-код на дерево node.
Я хочу проанализировать исходный файл 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-код на дерево node.
HipHop
Вы можете использовать Facebook HHVM, чтобы сбросить AST.
apt-get install hhvm
# parse specified file and dump the AST
hhvm --parse arg
Это сработало для HipHop (старого компилятора PHP на С++) - еще в 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 будет иметь AST, см. связанный RFC.
Существует два расширения, которые обеспечивают доступ и предоставляют AST, сгенерированный PHP 7:
Pfff - это библиотека OCaml для синтаксического анализа и управления PHP-кодом. Подробнее см. руководство Pfff.
Нет, нет такой встроенной функции. Но вы можете использовать Tokenizer, чтобы создать его.
Хорошо, вы можете посмотреть ответы Анализ и печать PHP-кода и Создание PHP-кода (из токенов Parser): в основном пакет PEAR PHP_Beautifier на http://pear.php.net/package/PHP_Beautifier можно расширить, чтобы делать то, что вы хотите, но похоже, что для этого требуется тяжелая лифтинг.
И если вы не привязаны к PHP, то http://www.eclipse.org/pdt/articles/ast/PHP_AST.html проведет вас с использованием парсера AST Eclipse PHP.