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

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

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


person DSblizzard    schedule 01.05.2011    source источник


Ответы (2)


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

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

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

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

К вашему сведению, следующий гибкий код печатает 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 );
}
person Ise Wisteria    schedule 01.05.2011

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

person Ankur Gautam    schedule 19.02.2015