DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH PRINT BOOK
 

(flex.info.gz) Reentrant Uses

Info Catalog (flex.info.gz) Reentrant (flex.info.gz) Reentrant (flex.info.gz) Reentrant Overview
 
 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.  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 );
                       }
          ...
          %%
 
Info Catalog (flex.info.gz) Reentrant (flex.info.gz) Reentrant (flex.info.gz) Reentrant Overview
automatically generated byinfo2html