Узел для комментариев

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

Сейчас лексер поддерживает \Q...\E последовательность, но нет возможности сгенерировать строку регулярное выражение по дереву, построенному из выражения, содержащего \Q...\E, т.к. узла для этого в дереве нет. Необходимо решить этот вопрос: либо добавить узел в дерево, либо удалить поддержку последовательности \Q...\E?

Comments (8)

  1. Oleg Sychev repo owner

    Сюда бы Стрельцова добавить. Даже в preserveallnodes нет? Я так понимаю недосмотр, нужен бы по логике. Это легко сделать в парсере. Только вот встанет вопрос об отображении этого узла в дереве, графе и описании - надо или игнорировать. Или делать третий режим, где предохраняется все. Григорий, вам какой вариант ближе - совершенствование preserveallnodes или его оставляем для дерева и т.д. а тут вводим третий? Эта проблема также касается комментариев в extended нотации например....

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

    В инструментах автора он по-умолчанию true, в синтаксическом дереве узла нет, отладочная печать так же показывает, что узла нет.

    Думаю что в синтаксическом дереве это узел точно нужен, иначе выражение \Qa\Ea очень странно выглядит в дереве.

  3. Oleg Sychev repo owner

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

  4. Valeriy Streltsov

    Их вообще две версии есть - внутри и вне чарсета. При этом у чарсета дочерних узлов быть не может (там только массив флагов), поэтому на 100% все равно поддержка не получится. Или через костыли какие-нибудь. А вообще, согласен с

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

    ведь \Qa\Ea вполне себе aa

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

    Это хорошо, но пишут я вот так "\Q^a\E[a]", получаю подсказку, убирающую квадратные скобки, применяю ее и получаю в ответ "^aa", что не соответствует исходному выражению.

  6. Valeriy Streltsov

    Каждый символ внутри \Q...\E - это отдельный чарсет. Как он мог превратиться в ассерт? Должно быть \^aa или [^]aa

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

    Потому что в юзеринскрипшн не будет квадратных скобок и для крышки будет просто крышка без слеша. Значит либо узел нужно добавить с \Q...\E, либо добавить проверку на экранирование символа при генерации строки регулярного выражения для чарсета. Олег Александрович, какое решение выбираем?

  8. Oleg Sychev repo owner

    Вот в юзеринскрипшн по идее \Q...\E должно присутствовать. Может быть завести специальный узел с конкатенацией который объединит все находящееся внутри \Q...\E и в юзеринскрипшн которого эти границы будут?

    И Валерий - нам надо серьезно подумать как можно через юзеринскрипшн сохранить особенности написания в расширенной нотации.

  9. Log in to comment