Есть ли рабочий пример flex + bison с вводом из строки, а не из файла?
Есть ли рабочий пример flex + bison (необходим bison) с вводом из строки, а не из файла?
Я попытался использовать функции YY_BUFFER_STATE ... вместо yyin и получил ошибку "переполнение отсканированного назад сканера". Flex изменяет InputString[1] на 0. Несколько других ответов по SO мало помогают - реальный код будет гораздо более полезным.
2 ответа
Способ сканирования области памяти описан в руководстве по Flex.
Flex изменяет буфер, заданный yy_scan_buffer
, Если вам нужно избежать изменения, yy_scan_bytes
или же yy_scan_string
будет уместно.
Сканирование файла или области памяти не зависит от синтаксического анализатора (бизон).
Если ваш лексер выходит из строя, я бы порекомендовал проверить, не выходит ли он из строя даже при чтении из файла.
Для вашей информации, следующий гибкий код распечатывает ab
а также cd
в моем окружении.
%%
[a-z]+ puts( yytext );
.
\n
%%
int yywrap( void ) { return 1; }
int main() {
yy_scan_string("ab cd");
yylex();
yy_delete_buffer( YY_CURRENT_BUFFER );
}