-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 never2di wrote: > I'm a newbie to Bison + Flex. and I'm having trouble in getting > yy_scan_string to work. I have tried the following > > YY_BUFFER_STATE my_string_buffer = yy_scan_string(my_string); > yyparse(); yy_delete_buffer(my_string_buffer ); > > the parser errors out with a syntax error at the first token. I > have verified that the grammar and the content of 'my_string' works > using yyrestart(yyin) and also with yy_create_buffer() through a > file. > > Is there something special state that I have to set flex in before > I call yyparse()? if not what is that I'm doing wrong and what > needs to be done? > > bison (GNU Bison) 2.4 > > Thanks :handshake: > > >
Hey You might find this useful i do this in my lexer: int parse( FILE* fin ) { int err= 0; if( fin == stdin ) { #ifdef HAVE_LIBREADLINE char *line, *prompt= ">>> "; #else char line[256]; #endif YY_BUFFER_STATE bp; while( 1 ) { #ifdef HAVE_LIBREADLINE line= readline(prompt); #else fgets(line, sizeof(line), stdin); #endif if( line == 0 ) break; else if( strlen(line) > 0) { #ifdef HAVE_READLINE_HISTORY add_history(line); #endif bp= yy_scan_string( line ); yy_switch_to_buffer(bp); err= yyparse(); yy_delete_buffer(bp); } } } else { yyin= fin; err= yyparse(); } return err; } The bit your interested is: bp= yy_scan_string( line ); yy_switch_to_buffer(bp); err= yyparse(); yy_delete_buffer(bp); You need to switch to the buffer you created from the scan string. - --Phil -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iEYEARECAAYFAkrVtyQACgkQAhcOgIaQQ2FudACfUfM1LKEf/RmzmterEOd41Gbz dukAn3x9VI01C4RUc/7M3KKEIedOKahW =GXnJ -----END PGP SIGNATURE----- _______________________________________________ help-bison@gnu.org http://lists.gnu.org/mailman/listinfo/help-bison