LINUX.ORG.RU

парсер на bison vs строка текста


0

0

С переменным успехом бизоню bison. Всё в нём замечательно, если не считать функции yyparse. Она читает stdin и парсит всё что туда попало. Но что делать если у меня stdin читает, например, readline? Или мне просто нужно разобрать строчку текста (которая уже лежит в памяти)?

★★★★★

делаеш что-то вроде

char buffer[BUFSIZ];

int
yylex(void)
{
        static char *s = buffer;

        if (!*s)
                return 0;

        yylval = *s++;

        return yylval;
}
за правильность не ручаюсь — давненько уже с lex/yacc не возился

beastie ★★★★★
()
Ответ на: комментарий от beastie

Хм... Тогда я неправильно сформулировал задачу. Стандартный вход читает yylex (созданный flex'ом). Как передать строчку flex'у?

KblCb ★★★★★
() автор топика
Ответ на: комментарий от SV0L0CH

Хм... Спасибо хотя бы за утверждение «решение есть».

KblCb ★★★★★
() автор топика

Давно не пользовался, но, afair, смотреть в сторону yy_create_buffer()/yy_switch_to_buffer() и далее по ссылкам. В info должна быть информация.

kemm
()

Вы пишете на С или на С++? Для С++ флекс генерирует класс, который принимает входящий поток (istream*) как параметр конструктора.

ddos3
()
Ответ на: комментарий от Reset

Только не yy_delete_buffer(buf_state), а yylex_destroy().

KblCb ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.