Написание лексера для порционных данных - PullRequest
0 голосов
/ 08 декабря 2011

У меня есть встроенное приложение, которое связывается с сервером RESTful через HTTP. Некоторые службы включают в себя отправку некоторых данных клиенту, которые интерпретируются с использованием очень простого лексера, который я написал, используя flex .

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

Я могу сохранить часть памяти между первым и вторым шагами, передавая фрагментированные данные из HTTP-клиента в подпрограммы zlib. Но мне интересно, возможно ли сделать то же самое между выводом zlib chunked и вводом flex.

В настоящее время я использую только yy_scan_bytes и yylex для анализа ввода. Есть ли у flex какая-либо функция для подачи нескольких порций данных в yylex? Я прочитал документацию о нескольких входных буферах , но безрезультатно.

1 Ответ

0 голосов
/ 09 декабря 2011

YY_INPUT представляется правильным ответом:

Характер того, как [сканер] получает свои входные данные, можно контролировать путем определения макроса YY_INPUT.Последовательность вызова для YY_INPUT () - YY_INPUT (buf, result, max_size).Его действие заключается в размещении до max_size символов в массиве символов buf и возврате в целочисленную переменную результат либо числа прочитанных символов, либо константы YY_NULL (0 в системах Unix) для обозначения `EOF '.

...