[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
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. See section 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 ); } ... %%
This document was generated on November 4, 2011 using texi2html 5.0.