hirthwork 11.11.2012 15:54 mcabber

// на последний тег не смотрите, на нём только мой примёр.
// область применения ограничивается лишь рагелем.
итак, настало время охуительных историй.
как известно, нормальные пацаны (типа Сысоева) вешают на обработки кучи сокетов
всего один поток и делают select. Пришли данные в сокет — просыпается поток,
обрабатывает тот чанк данных что пришёл и снова уходит в select (если в
процессе обработки не выяснилось, что можно уже другому обработчику сокет
передать).
Основная проблема в том, что всякие java.util.Scanner'ы, JFlex'ы и Antlr'ы
захавав поток не вернут вам управление, пока поток им не вернёт EOF и на этом
закончат попытки парсинга и похерят контекст (к чести pcre, он чанками матчить
умеет, хоть и через костыли).
В общем, в пятницу я уже сел было переписывать JFlex, но свершилось чудо!
Случайно я накнулся на Ragel и увидел я, что это хорошо.
Простой пример, который по чанкам получает целые числа разделённые пробелами,
можно найти по ссылке: http://ideone.com/g3oHMe
Пример тривиальный, но на то он и тест.
В общем, пацаны, угорайте по стейт-машинам, не ссыте и генерите код на любимом
языке погроммирования!

Recommended by: @hatred
Do you really want to delete ?