Поддержка комментариев и лексем в сканере

Issue #93 closed
Oleg Sychev repo owner created an issue

Originally reported on Google Code with ID 93 ``` Комментарии записываются между (?# и ) - без учета вложенности открывающих скобок внутри, до первой закрывающей. Их надо просто отлавливать лексером и ничего не делать.

Специальные комментарии будут обозначать начало и конец лексем: предлагаю (?#{{) и (?#}}). Если есть лучшие предложения - готов выслушать.

Лексемы должны получать отрицательные номера подмасок. Также в дополнение к maxsubpatt должно быть поле lexemcount. В массивы результатов index_first и length лексемы заносятся по отрицательным индексам. ```

Reported by `oasychev` on 2012-01-18 14:10:56

Comments (6)

  1. Valeriy Streltsov

    ``` Есть небольшая проблема - жадные квантификаторы в jlex'е. У меня пока что не получается сделать правила для поддержки одновременно лексем и простых комментариев. Разбить на несколько правил - лексемы отдельно и комменты отдельно - не получается, т.к. всегда выигрывает длинный коммент, захватывающий все что между началом и концом лексемы. Если сделать одно правило в виде альтернативы, где первые две альтернативы-границы лексемы, а затем - простой комментарий, правило левого совпадения не работает, все равно выигрывает самый длинный вариант. Сложные ассерты, естественно, не поддерживаются... :(

    Есть идеи, как реализовать одновременно поддержку и лексем, и простых комментариев? ```

    Reported by `vostreltsov` on 2012-01-21 14:55:10

  2. Oleg Sychev reporter

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

    Я бы делал примерно так: первым (! важно) правила (отдельные) для начала и конца лексем - так как при равной длине совпадения выигрывает первое правило, потом правило для комментария типа \(\?#[^)]*\) Отрицательный символьный класс не позволяет залезть за пределы комментария. ```

    Reported by `oasychev` on 2012-01-21 16:55:23

  3. Oleg Sychev reporter

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

    Могут быть проблемы с ситуациями типа (ааа(?#)bbb)ccc(?#) Потому как парсер распознает все закрывающие скобки одинаково в вашем подходе.

    Вопрос в допустимости подобных ситуаций. Но даже если они и недопустимы (хотя без квантификатора в примере выше особого криминала нет), необходимо выдавать ошибку. А ваш метод неправильно поймет закрытие скобок, но ошибки не сгенерирует.

    Если закрывающие скобки для лексемы выглядят по другому, они и в парсер должны идти по другому.... ```

    Reported by `oasychev` on 2012-01-21 17:03:09

  4. Oleg Sychev reporter

    ``` Нужно вернуть количество лексем в хэндлер, а через него - и в qtype_preg_matching_results (см. set_source_info). Чтобы там можно было его обрабатывать. ```

    Reported by `oasychev` on 2012-01-25 07:50:20

  5. Oleg Sychev reporter

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

    Reported by `oasychev` on 2012-07-20 09:45:55 - Status changed: `Done`

  6. Log in to comment