Узел для комментариев
Сейчас лексер поддерживает \Q...\E последовательность, но нет возможности сгенерировать строку регулярное выражение по дереву, построенному из выражения, содержащего \Q...\E, т.к. узла для этого в дереве нет. Необходимо решить этот вопрос: либо добавить узел в дерево, либо удалить поддержку последовательности \Q...\E?
Comments (8)
-
repo owner -
reporter В инструментах автора он по-умолчанию true, в синтаксическом дереве узла нет, отладочная печать так же показывает, что узла нет.
Думаю что в синтаксическом дереве это узел точно нужен, иначе выражение \Qa\Ea очень странно выглядит в дереве.
-
repo owner С другой стороны он не несет синтаксической нагрузки и скрывается на уровне лексера, как и бэкслеши перед служебными символами.
-
Их вообще две версии есть - внутри и вне чарсета. При этом у чарсета дочерних узлов быть не может (там только массив флагов), поэтому на 100% все равно поддержка не получится. Или через костыли какие-нибудь. А вообще, согласен с
С другой стороны он не несет синтаксической нагрузки и скрывается на уровне лексера, как и бэкслеши перед служебными символами.
ведь \Qa\Ea вполне себе aa
-
reporter Это хорошо, но пишут я вот так "\Q^a\E[a]", получаю подсказку, убирающую квадратные скобки, применяю ее и получаю в ответ "^aa", что не соответствует исходному выражению.
-
Каждый символ внутри \Q...\E - это отдельный чарсет. Как он мог превратиться в ассерт? Должно быть \^aa или [^]aa
-
reporter Потому что в юзеринскрипшн не будет квадратных скобок и для крышки будет просто крышка без слеша. Значит либо узел нужно добавить с \Q...\E, либо добавить проверку на экранирование символа при генерации строки регулярного выражения для чарсета. Олег Александрович, какое решение выбираем?
-
repo owner Вот в юзеринскрипшн по идее \Q...\E должно присутствовать. Может быть завести специальный узел с конкатенацией который объединит все находящееся внутри \Q...\E и в юзеринскрипшн которого эти границы будут?
И Валерий - нам надо серьезно подумать как можно через юзеринскрипшн сохранить особенности написания в расширенной нотации.
- Log in to comment
Сюда бы Стрельцова добавить. Даже в preserveallnodes нет? Я так понимаю недосмотр, нужен бы по логике. Это легко сделать в парсере. Только вот встанет вопрос об отображении этого узла в дереве, графе и описании - надо или игнорировать. Или делать третий режим, где предохраняется все. Григорий, вам какой вариант ближе - совершенствование preserveallnodes или его оставляем для дерева и т.д. а тут вводим третий? Эта проблема также касается комментариев в extended нотации например....