Режим полного соответсвия лексинга/парсинга с PCRE

Issue #72 closed
Oleg Sychev repo owner created an issue

Originally reported on Google Code with ID 72 ``` На данный момент не удаляются плейсхолдеры при использовании preg_php_matcher, в случае если отсутствуют совпадения с последними подмасками.

Проблема в том, что мы не знаем точное количество подмасок. preg_xxx функции не возвращают его, а применять собственный парсер нельзя т.к. он не поддерживает полный PCRE синтаксис. Подсчитать подмаски без парсинга тоже затруднительно. ```

Reported by `oasychev` on 2011-11-29 22:03:57

Comments (8)

  1. Oleg Sychev reporter

    ``` Исправлено использованием сканера из вопроса. Но теперь если найдутся несоответствия сканера с PCRE придется фиксить....

    И точно нужен режим соответствия сканинга/парсинга с PCRE. Сейчас различия по крайней мере в пустых скобках: для PCRE это скобки с пустотой, для нас - ошибка... ```

    Reported by `oasychev` on 2012-07-30 06:53:34

  2. Oleg Sychev reporter

    ``` Я думаю можно сделать включение такого режима через опции. Тогда PHP preg матчер будет использовать этот режим, а наши - собственный... ```

    Reported by `oasychev` on 2012-07-30 06:55:41

  3. Valeriy Streltsov

    ``` У меня вопрос - зачем вообще нужна тогда наша нотация, если она кидает ошибки на пустые скобки и это единственное отличие от PCRE (добавление / в начало и конец регекса не в счет)? Не легче ли создать правило в парсере OPENBRACK CLOSEBRACK и оставить нотации pcre и mdlshortanswer? ```

    Reported by `vostreltsov` on 2012-08-02 11:09:17

  4. Oleg Sychev reporter

    ``` Надо будет думать: во-первых, наша все-таки раньше кидала ошибки - вопрос совместимости; во-вторых, с парсером надо поэкспериментировать - там может оказаться не все так просто; отлов ошибок в LR-парсере задача не из легких; не очень хочу связываться с этим перед релизом; в-третьих, пока нет уверенности в отсутствии других различий. ```

    Reported by `oasychev` on 2012-08-03 07:48:10

  5. Valeriy Streltsov

    ``` У меня небольшое замечание и результат эксперимента. 1) нужно делать $emptynode->set_user_info(B->indlast, B->indlast); в парсере для корректного отображения ошибок неправильных скобок.

    2) я сделал правило expr(A) ::= OPENBRACK(B) CLOSEBRACK. и убрал проверки на пустые скобки внутри правил для отлова ошибок. Всё чудесным образом работает, в том числе и в случае вложенных пустых скобок. Регексы матчатся, следующие символы\лексемы подсказываются.

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

    Reported by `vostreltsov` on 2012-08-03 13:07:59

  6. Oleg Sychev reporter

    ``` Я так понимаю, что нотацию про PCRE теперь надо убрать? ```

    Reported by `oasychev` on 2012-08-06 22:03:38

  7. Oleg Sychev reporter

    ``` Спасибо. ```

    Reported by `oasychev` on 2012-09-03 16:06:48 - Status changed: `Done`

  8. Log in to comment