Поддержка комментариев и лексем в сканере
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)
-
-
reporter ``` Нужно подробнее охарактеризовать проблему и используемые регулярные выражения.
Я бы делал примерно так: первым (! важно) правила (отдельные) для начала и конца лексем - так как при равной длине совпадения выигрывает первое правило, потом правило для комментария типа \(\?#[^)]*\) Отрицательный символьный класс не позволяет залезть за пределы комментария. ```
Reported by `oasychev` on 2012-01-21 16:55:23
-
reporter ``` Нужно еще разобраться с допустимостью использования тех же возвращаемых из сканера лексем, что и для обычных скобок.
Могут быть проблемы с ситуациями типа (ааа(?#
) Потому как парсер распознает все закрывающие скобки одинаково в вашем подходе.
Вопрос в допустимости подобных ситуаций. Но даже если они и недопустимы (хотя без квантификатора в примере выше особого криминала нет), необходимо выдавать ошибку. А ваш метод неправильно поймет закрытие скобок, но ошибки не сгенерирует.
Если закрывающие скобки для лексемы выглядят по другому, они и в парсер должны идти по другому.... ```
Reported by `oasychev` on 2012-01-21 17:03:09
-
reporter ``` Нужно вернуть количество лексем в хэндлер, а через него - и в qtype_preg_matching_results (см. set_source_info). Чтобы там можно было его обрабатывать. ```
Reported by `oasychev` on 2012-01-25 07:50:20
-
Reported by `vostreltsov` on 2012-01-25 08:21:39 - Status changed: `Fixed`
-
reporter ``` Было принято решение использовать сканер языка чтобы меньше напрягать учителя, поэтому лексемы . Комментарии должны лексером съедаться и ингорироваться... ```
Reported by `oasychev` on 2012-07-20 09:45:55 - Status changed: `Done`
- Log in to comment
``` Есть небольшая проблема - жадные квантификаторы в jlex'е. У меня пока что не получается сделать правила для поддержки одновременно лексем и простых комментариев. Разбить на несколько правил - лексемы отдельно и комменты отдельно - не получается, т.к. всегда выигрывает длинный коммент, захватывающий все что между началом и концом лексемы. Если сделать одно правило в виде альтернативы, где первые две альтернативы-границы лексемы, а затем - простой комментарий, правило левого совпадения не работает, все равно выигрывает самый длинный вариант. Сложные ассерты, естественно, не поддерживаются... :(
Есть идеи, как реализовать одновременно поддержку и лексем, и простых комментариев? ```
Reported by `vostreltsov` on 2012-01-21 14:55:10