(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