lex и буфер

sergey_m

Неужели lexом удобно парсить только потоки типа FILE *? Не могу найти способа брать входные данные из статического буфера типа char *. К стандартным приёмам переопределения входных данных относится только переопределение yyin, в другой FILE *. Менее стандартный способ - переопределить YY_INPUT. Однако он пытается читать по одному символу. Придётся писать странную процедуру, которая будет возвращать по одному символу из буфера.

Ivan8209

Почему сразу "странную"?
Кстати, есть погнутная библиотека, где FILE представляет собой буфер памяти.
Правда, это может быть уже частью glibc.
---
...Я работаю антинаучным аферистом...

sergey_m

Да, похоже такая процедура - единственное решение.

Marinavo_0507

Временный файл ещё можно создать

vall

то что он просит по одному символу это наверно особенность конкретной грамматики.

vall

хм. а yy_scan_string yy_scan_bytes и yy_scan_buffer для чего?

sergey_m

Он иногда просит по одному символу

vall

и что с того, если он будет их брать пачками это ничего не ускорит - просто буфферизация будет где-то у него, ну не к чему этому автомату куча символов за раз.
гнутые open_memstream\fmemopen пожалуй простейшее решение

a10063

+1 за yy_scan_string
а что за проблема с посимвольным чтением? буфер char * в памяти уже лежит...
Оставить комментарий
Имя или ник:
Комментарий: