Параметры матчинга

Issue #125 closed
Oleg Sychev repo owner created an issue

Originally reported on Google Code with ID 125

В классы хендлера и матчера добавлен параметр - опции.
Создан класс опций матчинга, включающий:
1) необходимость генерации продолжения - пока устанавливается по наличию хинта в вопросе;
2) необходимость захвата подмасок;
3) предпочитаемые алфавиты для букв и точки - пока не используются - какие символы
генерировать при продолжении

Валерий, вам необходимо в первую очередь обеспечить выставку опции подмасок в 1 если
есть обратные ссылки - сейчас она устанавливается по нуждам вопроса, а есть еще нужды
выражения. Поэтому назначаю пока на вас.

После этого можно сделать простую оптимизацию, отключив подмаски/генерацию продолжения
если они не нужны.

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

Reported by oasychev on 2012-06-02 07:59:46

Comments (12)

  1. Valeriy Streltsov

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

    Reported by `vostreltsov` on 2012-06-02 13:05:27

  2. Oleg Sychev reporter

    ``` Поле наличия ссылок завести в лексере, а из конструктора матчера проверить его и выставить опцию (она protected в матчере). Только после вызова родительского конструктора конечно... ```

    Reported by `oasychev` on 2012-06-02 14:34:14

  3. Valeriy Streltsov

    ``` Мне кажется, нужно определить еще конструктор по умолчанию для этих $options, в котором будет включен и захват подмасок, и генерация подсказки. Во-первых, юнит-тесты их проверяют в любом случае, а во-вторых - во внутренних функциях удобно брать параметры из гарантированно существующего $options, чем проверять его на null и затем брать из него поля. ```

    Reported by `vostreltsov` on 2012-06-02 17:19:24

  4. Oleg Sychev reporter

    ``` Конструктор по умолчанию не спасет, это вас не Си++. Поля не имеют типов. Для гарантированно существующего $options нужно вставить код в конструктор абстрактного матчера, который сгенерирует объект опций если будет null. С другой стороны конструктор по умолчанию не нужен в данном случае т.к. поля в PHP могут иметь значения по умолчанию. И они там есть и именно такие значения и имеют, если вы мой код видели :)

    А в кросс-тестах по идее этот объект можно в одно место в цикле вписать. Но наличие гарантированного объекта в $options полезно, добавьте в конструктор его создание. ```

    Reported by `oasychev` on 2012-06-02 18:03:17

  5. Valeriy Streltsov

    ``` Получить обратные ссылки из матчера не удастся - лексер создается в функции build_tree хэндлера... Нужно либо добавить поле в хэндлер, либо заполнять поле с обратными ссылками в хэндлере. Второй вариант какой-то нелогичный: хэндлер (родитель) использует этот класс опций, который описан в файле с наследником - матчером... Не логичнее ли вообще весь этот код с опциями деражать в матчере? ```

    Reported by `vostreltsov` on 2012-06-03 05:10:23

  6. Oleg Sychev reporter

    ``` Предлагаю добавить в хэндлер ссылки на объекты лексера и парсера как свойства, тогда всем можно будет обращаться... Иначе замучаемся переписывать их результаты каждое поле в отдельности. Можно тогда и другие параметры оставить в лексере/парсере, которые сейчас перенесены в сам хендлер/матчер.

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

    Код работы с опциями матчера должен быть конечно в матчере. ```

    Reported by `oasychev` on 2012-06-05 08:06:47

  7. Oleg Sychev reporter

    ``` Код с опциями вытолкнут. Теперь надо позаботится чтобы при наличии обратных ссылок опция подмасок обязательно устанавливалась после синтаксического разбора - и можно поправлять матчер на их использование. ```

    Reported by `oasychev` on 2012-07-20 12:00:37 - Labels added: Component-Preg

  8. Valeriy Streltsov

    ``` Заполнение подмасок сделал. Пришлось добавить сеттер для опций, поскольку кросс-тестер теперь использует get_matcher, опции определяются внутри него, а forced-захват подмасок все равно нужен при тестировании.

    На счет алфавита - не знаю как его определять, хоть делать еще одну настройку в вопросе... Если анализировать регекс на то, какие в нем алфавиты - будут дичайшие тормоза. ```

    Reported by `vostreltsov` on 2012-07-28 09:57:25

  9. Oleg Sychev reporter

    ``` Хм. Насчет опций подумаю - как-то аргументов много, добавлять под них еще один неохота...

    Насчет алфавита - да, заполняться будет скорее всего через настройки вопроса. Но не сию секунду, это я на будущее как возможное применение обозначил.

    Прямо сейчас я думаю создать опции хэндлинга, ввести туда параметр совместимости с PCRE, и унаследовать от них опции матчинга... ```

    Reported by `oasychev` on 2012-07-30 07:49:28

  10. Oleg Sychev reporter

    ``` НКА матчер уже уважает опции, в т.ч. про отсутствие необходимости генерировать продолжение. Чего и ДКА желаю. Но прежде всего надо в конструкторе их поймать и передать в конструктор родителя... ```

    Reported by `oasychev` on 2012-08-06 22:08:58

  11. Oleg Sychev reporter
    Вроде сделано?
    

    Reported by oasychev on 2013-05-26 19:20:25 - Status changed: Fixed

  12. Log in to comment