Resident234
@Resident234
Back-End . PHP . Bitrix

PHP. Как распарсить PHP файл?

Добрый день.
Есть php файл с примерным содержанием:
/**
 * перед добавлением инфоблока
 *
 * даем права на инфоблоки на чтение по умолчанию
 */


AddEventHandler("iblock", "OnBeforeIBlockAdd", "iblock_OnBeforeIBlockAdd_FixIBlockPermissions");
function iblock_OnBeforeIBlockAdd_FixIBlockPermissions(&$arFields) {
    Bitrix\Main\Diag\Debug::writeToFile("iblock_OnBeforeIBlockAdd_FixIBlockPermissions", "", "iblock_OnBeforeIBlockAdd_FixIBlockPermissions.txt");
    $rsGroups = CGroup::GetList(($by = "c_sort"), ($order = "desc"), $filter);
    while ($arGroup = $rsGroups->Fetch()) {
        if ($arGroup['ANONYMOUS'] == 'Y') {
            $group_id = $arGroup['ID'];
            break;
        }
    }
    $arFields['GROUP_ID'][$group_id] = "R";
}

мне нужно средствами PHP получить:
1) комментарий
/**
 * перед добавлением инфоблока
 *
 * даем права на инфоблоки на чтение по умолчанию
 */


2) Название функции
iblock_OnBeforeIBlockAdd_FixIBlockPermissions

Существует ли библиотека, при помощи которой это можно сделать ?
  • Вопрос задан
  • 290 просмотров
Решения вопроса 1
27cm
@27cm
TODO: Написать статус
Есть встроенная функция token_get_all(), которая позволяет распарсить PHP файл на токены:
php.net/manual/en/function.token-get-all.php

Пример: https://3v4l.org/em0It
Коды токенов: php.net/manual/en/tokens.php
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
miraage
@miraage
Старый прогер
От одного из core-разработчиков PHP: https://github.com/nikic/php-parser
Ответ написан
Комментировать
SerafimArts
@SerafimArts
Senior Notepad Reader
Два варианта выше вполне годятся. Ну или написать свою EBNF грамматику, воспользовавшись:
1) Hoa LL(1)/LL(k): https://github.com/hoaproject/Compiler (Пример выше nikic от Mikhail Osher использует LALR парсер на основе Yacc)
2) Или моим форком: https://github.com/railt/compiler (возможности грамматики почти те же, но исправлено несколько ошибок, переписаны исходники и ускорен лексический анализ в 140 раз).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы