CSE

Issue #372 new
Григорий Терехов created an issue

Необходимо адаптировать алгоритм CSE для регулярных выражений

Comments (19)

  1. Григорий Терехов reporter

    Добавить проверку для трех и более подряд идущих повторяющихся выражений, например ababab => (?:ab){3}, а не как сейчас ababab => (?:ab){2}ab

  2. Григорий Терехов reporter

    Добавлено. При поиске игнорировать группировки. Например a(?:b)ab => (?:ab){2}, ab(?:ab)ab => (?:ab){3}.

  3. Григорий Терехов reporter

    Добавлена сортировка операндов для альтернативы. Теперь (?:a|bc)(?:bc|a) => (?:a|bc){2}

  4. Григорий Терехов reporter

    Есть несколько спорных моментов относительно применения нормализации в результате работы модуля. 1) рассмотрим выражение: "a(?:)a", которое может быть преобразовано вот так: "a{2}" (отмечу, что группировка удалена). 2) рассмотрим следующее выражение: "(?:a(?:)a)(?:a(?:)a)", которое может быть преобразовано вот так: "(?:a(?:)a){2}" или сразу вот так "a{4}". 3) рассмотрим следующее выражение: "[a]bab", которое может быть преобразовано вот так: "(?:[a]b){2}" или вот так: "(?:ab){2}".

    Во всех этих вариантах конечный вариант является наиболее оптимальным и коротким, но может сбить пользователя с толку, куда же делось то, что он писал (например автоматическое удаление пустой группировки в 1 и 2 примере). Давать сначала пользователю возможность (путем генерации подсказок) решить подобные проблемы, а только после их решения говорить о повторяющихся подвыражениях или генерировать подсказки как для решения мелких проблем (например удаления пустой группировки) так и сразу для преобразования с автоматическим решением проблем?

  5. Григорий Терехов reporter

    Добавлен учет общих подвыражений в альтернативе. Например теперь "ab|ab|ab" => "ab"

  6. Григорий Терехов reporter

    Добавлен поиск повторяющегося подвыражения, если оно частично находится в подмаске. Теперь "abab(?:abc)" => "(?:ab){3}c".

  7. Oleg Sychev repo owner

    1) Главнейшая недоработка в квантификаторах = это то, что создаются только квантификаторы с фиксированным числом повторений. На самом деле выражение типа aaa?a? должно приводить к a{2,4} а не к a{2}a?{2} как это сейчас. Аналогично a?a?a? должно быть a{,3} или a{0,3}

    2) Ситуация с эквивалентностью альтернатив по одному символу и символьному классу CSE не распознается и применяется только после применения правила преобразования к символьному классу

  8. Oleg Sychev repo owner

    3) Очень странный глюк в CSE - a{2}ba{2}b преобразуется в (?:a{2}){2} - куда b то подевались??

  9. Oleg Sychev repo owner

    Пример для 2) посложнее - (?:[abc])(?:[ac]|b)[abc]? - никаких правил не срабатывает

  10. Oleg Sychev repo owner

    Подтверждаю. Только до конфы два дня, а 1) не исправлено и презентацию я не видел.

    С презентацией боюсь уже не смогу помочь - температура поднялась, так что я только самые простые работы сейчас могу делать :(

  11. Григорий Терехов reporter

    За презентацию не беспокойтесь, мы с вами ее хорошо отработали. Работаю над самим докладом и завтра еще доработаю.

    Над 1) работаю сейчас, там не все так просто...

    Выздоравливайте!

  12. Григорий Терехов reporter

    1) готово, но без учета группировок. их в ближайшее время доделаю. но вот a?a?a уже преобразуется в a{1,3}

  13. Oleg Sychev repo owner

    4) (?:(?:a+|b?)c|c+d|ef)? - очень странно выделяет c|c+ и заменяет их на c+ без всякой альтернативы...

  14. Oleg Sychev repo owner

    Выше проблемы форматирования - пропали звездочки

    (?:(?:a+|b?)c*|c+d|ef)?
    
  15. Oleg Sychev repo owner

    5) (?:a{2,3}){2,} почему-то реагирует "повторяющееся подвыражение", добавляя {2} и ничего не меняя

  16. Oleg Sychev repo owner

    5) да, там что-то хитрее - возможно перевод строки попался или что-то еще, потому что {2} добавилось на новой строке. А вот 4) точно глюк...

  17. Григорий Терехов reporter

    Вообще некорректно работает для альтернативы - перепроверю

  18. Log in to comment