Philip Herron wrote:
>
> -----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
>
>
Hi Phil
Thanks for the reply.
The documentation for yy_scan_string says that the switching of the buffer
will be done by yy_scan_string itself and I verified that same in the code.
http://flex.sourceforge.net/manual/Multiple-Input-Buffers.html#index-yy_005fscan_005fstring-210
I though if it works for you then why not give it a try but unfortunately it
didn't work. I read some where that I will have to set the initial state for
the lexer, not sure what that means.
Thanks
--
View this message in context:
http://www.nabble.com/yy_scan_string-tp25887754p25894969.html
Sent from the Gnu - Bison - Help mailing list archive at Nabble.com.
_______________________________________________
help-bison@gnu.org http://lists.gnu.org/mailman/listinfo/help-bison