Pull to refresh

Для чего нужен 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 поможет вам заменить старые конструкции языка более новыми.

Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.