Есть ли рабочий пример flex + bison с вводом из строки, а не из файла? - PullRequest
0 голосов
/ 01 мая 2011

Есть ли рабочий пример flex + bison (необходим bison) с вводом из строки, а не из файла?

Я попытался использовать функции YY_BUFFER_STATE ... вместо yyin и получил ошибку "переполнение при отжиме назад во флекс сканере". Flex изменяет InputString [1] на 0. Несколько других ответов по SO мало помогают - реальный код будет гораздо полезнее.

Ответы [ 2 ]

1 голос
/ 01 мая 2011

Способ сканирования области памяти описан в руководстве по Flex .

Flex изменяет буфер, заданный yy_scan_buffer.Если вам необходимо избежать изменения, подойдет yy_scan_bytes или yy_scan_string.

Независимо от того, выполняется ли сканирование файла или области памяти независимо от синтаксического анализатора (бизона).

Если вашСбой lexer, я бы порекомендовал проверить, не выходит ли он из строя даже при чтении из файла.

Для вашей информации, следующий гибкий код печатает 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 );
}
0 голосов
/ 19 февраля 2015

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

...