help-bison@gnu.org
[Top] [All Lists]

Re: yy_scan_string

Subject: Re: yy_scan_string
From: never2di
Date: Wed, 14 Oct 2009 09:56:04 -0700 PDT


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@xxxxxxx 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@xxxxxxx http://lists.gnu.org/mailman/listinfo/help-bison

<Prev in Thread] Current Thread [Next in Thread>