Любой приличный PHP парсер написан на PHP? [закрытый]


Я много работаю, манипулируя и анализируя PHP-код. Обычно я просто использую токенизатор для этого. Для большинства приложений этого достаточно. Но иногда разбор с использованием лексера просто недостаточно надежен (очевидно).

таким образом, я ищу какой-то PHP парсер, написанный на PHP. Я нашел hnw / PhpParser и kumatch/stagehand-php-parser. Оба создаются путем автоматического преобразования zend_language_parser.г в .y-файл с PHP вместо C(а затем скомпилирован в парсер LALR (1)). Но с этим автоматическим преобразованием просто невозможно работать.

Итак, есть ли приличный PHP парсер, написанный на PHP? (Мне нужен один для PHP 5.2 и один для 5.3. Но только один из них тоже будет хорошей отправной точкой.)

5 77

5 ответов:

после того, как здесь не было найдено полного и стабильного парсера, я решил написать его сам. Вот результат:

PHP-Parser: парсер PHP написан на PHP

проект поддерживает синтаксический анализ кода, написанного для любой версии PHP между PHP 5.2 и PHP 7.1.

помимо самого парсера библиотека предоставляет некоторые связанные компоненты:

  • компиляция АСТ обратно в PHP ("распечатки")
  • инфраструктура для обхода и изменения АСТ
  • сериализация в XML и из XML (а также демпинг в удобочитаемой форме)
  • на документация.

Это не будет отличным вариантом для вас, так как он нарушает ограничение pure-PHP, но:

некоторое время назад люди php-internals решили, что они перейдут на лимон как их технология парсинга. Там есть ветка в PHP svn repo который содержит необходимые изменения.

Они решили не продолжать с этим, как они обнаружили, что их лимонный раствор примерно на 10-15% медленнее. Но ветка все-таки там.

здесь старый лимонный парсер написано как расширение PHP. Вы могли бы работать с ним. Там же эта груша пакет. Там же этот другой пакет лимона (через этой сообщение в блоге о PGN).

конечно, даже если вы получите его работу, я не уверен, что вы будете делать с данными, или то, что данные даже выглядит.

еще один дурацкий вариант будет смотришь на дуб, реализация PHP в Java. Они должны были бы написать парсер, возможно, это стоило бы исследовать.

метрики инструмент PHP Depend содержит код для генерации AST из PHP-источника, написанного полностью на PHP. Однако он использует собственный token_get_all PHP для токенизации.

исходный код доступен на github:https://github.com/manuelpichler/pdepend/tree/master/src/main/php/PHP/Depend

реализация AST для некоторых частей, таких как математические выражения, еще не была завершена в последний раз, когда я проверял, но согласно его автор-это цель.

Ну, это не в PHP, извините, но создание такого рода машин сложно, и PHP не особенно подходит для задачи обработки языка.

наши PHP Front End он обеспечивает полный PHP 4.x и 5.x (EDIT 9/2016: теперь обрабатывает PHP 7) разбор, автоматически строит ASTs со всеми деталями полной грамматики PHP, может генерировать компилируемый исходный текст из ASTs. Это сложнее, чем может показаться, когда вы рассматриваете все странные детали, включая странные строковые литералы, захваченные комментарии, числа с основанием и т. д.

но ASTs едва ли достаточно (вы уже заметили, что токенов даже едва хватает).

фундамент, на котором он построен,DMS Software Reengineering Toolkit обеспечивает поддержку для анализа и arbitary преобразований ASTs. Он также будет читать большие наборы файлов сразу, что позволяет анализировать и преобразования на PHP файлов.

есть порт ANTLR для PHP:http://code.google.com/p/antlrphpruntime/w/list

он заброшен, но я думаю, что он все еще должен работать.