Есть ли рабочий пример 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 );
}

Вы также можете использовать yy_scan_buffer(char*,size_t)

Другие вопросы по тегам