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

в 18:25, , рубрики: Go, 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 поможет вам заменить старые конструкции языка более новыми.

Автор: рыцарь со стволом

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js