(flex.info)Reentrant Uses


Next: Reentrant Overview Prev: Reentrant Up: Reentrant
Enter node , (file) or (file)node

19.1 Uses for Reentrant Scanners
================================

However, there are other uses for a reentrant scanner.  For example, you
could scan two or more files simultaneously to implement a 'diff' at the
token level (i.e., instead of at the character level):

         /* Example of maintaining more than one active scanner. */
     
         do {
             int tok1, tok2;
     
             tok1 = yylex( scanner_1 );
             tok2 = yylex( scanner_2 );
     
             if( tok1 != tok2 )
                 printf("Files are different.");
     
        } while ( tok1 && tok2 );

   Another use for a reentrant scanner is recursion.  (Note that a
recursive scanner can also be created using a non-reentrant scanner and
buffer states.  Note: Multiple Input Buffers.)

   The following crude scanner supports the 'eval' command by invoking
another instance of itself.

         /* Example of recursive invocation. */
     
         %option reentrant
     
         %%
         "eval(".+")"  {
                           yyscan_t scanner;
                           YY_BUFFER_STATE buf;
     
                           yylex_init( &scanner );
                           yytext[yyleng-1] = ' ';
     
                           buf = yy_scan_string( yytext + 5, scanner );
                           yylex( scanner );
     
                           yy_delete_buffer(buf,scanner);
                           yylex_destroy( scanner );
                      }
         ...
         %%


automatically generated by info2www version 1.2.2.9