Как стать автором
Обновить

Для чего нужен PHP парсер?

Привет! Я пишу php-parser на Go, и самый часто задаваемый вопрос: “А зачем это нужно?”

PHP парсер это библиотека которая разбивает текст на лексемы, а затем по грамматическим правилам, описанным в форме Бэкуса-Наура, собирает AST(Абстрактное синтаксическое дерево) с которым уже можно работать в языке программирования.

Я собрал несколько примеров где это используется.

1. Компиляторы, интерпретаторы


Парсер в PHP7 был существенно переписан и теперь он парсит исходники в AST. К синтаксическому дереву можно получить доступ установив расширение nikic/php-ast

2. Статические анализаторы


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

Вот небольшой список статических анализаторов использующих PHP-Parser:
hphpstan/phpstan
vimeo/psalm
phan/phan

В большинстве случаев для более глубокого анализа может потребоваться дополнительная информация, например о типах переменных или потоке управления, для этого нам понадобятся SSA и CFG которые собираются на основе AST.

3. Расширения для редакторов


felixfbecker/php-language-server использует Microsoft/tolerant-php-parser для расширения возможностей редактора VSCode

4. Рефакторинг


Большую часть рутинных задач по рефакторингу можно автоматизировать, в чем нам могут помочь утилиты вроде QafooLabs/php-refactoring-browser.

5. Метрики


Сбор метрик также не обойдется без использования парсера,
конечно если эти метрики посложнее чем подсчет количество строк кода.
Например phpmetrics/PhpMetrics может подсчитать цикломатическую сложность.

6. Транспиллеры


Транспиллеры — это утилиты которые переводят исходный код из одного языка программирования в другой, либо в другую версию того же языка.

jaytaph/Transphpile переводит код PHP 7 в PHP 5.6
wata727/pahout поможет вам заменить старые конструкции языка более новыми.

Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.