0

Is there working example of flex + bison (bison is necessary) with input from string, not file?

I have tried to use YY_BUFFER_STATE ... functions instead of yyin and got error "flex scanner push-back overflow". Flex changes InputString[1] to 0. Several other answers on SO are of little help - actual code will be much more useful.

Lesmana
  • 25,663
  • 9
  • 82
  • 87
DSblizzard
  • 4,007
  • 7
  • 48
  • 76

2 Answers2

1

The way to scan memory region is described in the Flex manual.

Flex modifies the buffer given by yy_scan_buffer. If you need to avoid to be modified, yy_scan_bytes or yy_scan_string will be appropriate.

Whether scanning a file or memory region is independent of the parser (bison).

If your lexer fails, I'd recommend checking whether it fails too even when reading from a file.

For your information, the following flex code prints ab and cd in my environment.

%%

[a-z]+  puts( yytext );
.
\n

%%

int yywrap( void ) { return 1; }

int main() {
  yy_scan_string("ab cd");
  yylex();
  yy_delete_buffer( YY_CURRENT_BUFFER );
}
rici
  • 234,347
  • 28
  • 237
  • 341
Ise Wisteria
  • 11,259
  • 2
  • 43
  • 26
-1

You can also use yy_scan_buffer(char*,size_t)

Ankur Gautam
  • 1,412
  • 5
  • 15
  • 27