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
  • 24,114
  • 8
  • 78
  • 84
DSblizzard
  • 3,757
  • 7
  • 45
  • 74

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
  • 219,119
  • 25
  • 219
  • 314
Ise Wisteria
  • 10,779
  • 2
  • 41
  • 26
-1

You can also use yy_scan_buffer(char*,size_t)

Ankur Gautam
  • 1,374
  • 5
  • 14
  • 26