DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH
 

(flex.info.gz) Init and Destroy Functions

Info Catalog (flex.info.gz) Global Replacement (flex.info.gz) Reentrant Detail (flex.info.gz) Accessor Methods
 
 19.4.4 Init and Destroy Functions
 ---------------------------------
 
 `yylex_init' and `yylex_destroy' must be called before and after
 `yylex', respectively.
 
 
          int yylex_init ( yyscan_t * ptr_yy_globals ) ;
          int yylex_init_extra ( YY_EXTRA_TYPE user_defined, yyscan_t * ptr_yy_globals ) ;
          int yylex ( yyscan_t yyscanner ) ;
          int yylex_destroy ( yyscan_t yyscanner ) ;
 
    The function `yylex_init' must be called before calling any other
 function. The argument to `yylex_init' is the address of an
 uninitialized pointer to be filled in by `yylex_init', overwriting any
 previous contents. The function `yylex_init_extra' may be used instead,
 taking as its first argument a variable of type `YY_EXTRA_TYPE'.  See
 the section on yyextra, below, for more details.
 
    The value stored in `ptr_yy_globals' should thereafter be passed to
 `yylex' and `yylex_destroy'.  Flex does not save the argument passed to
 `yylex_init', so it is safe to pass the address of a local pointer to
 `yylex_init' so long as it remains in scope for the duration of all
 calls to the scanner, up to and including the call to `yylex_destroy'.
 
    The function `yylex' should be familiar to you by now. The reentrant
 version takes one argument, which is the value returned (via an
 argument) by `yylex_init'.  Otherwise, it behaves the same as the
 non-reentrant version of `yylex'.
 
    Both `yylex_init' and `yylex_init_extra' returns 0 (zero) on success,
 or non-zero on failure, in which case errno is set to one of the
 following values:
 
    * ENOMEM Memory allocation error.  memory-management.
 
    * EINVAL Invalid argument.
 
    The function `yylex_destroy' should be called to free resources used
 by the scanner. After `yylex_destroy' is called, the contents of
 `yyscanner' should not be used.  Of course, there is no need to destroy
 a scanner if you plan to reuse it.  A `flex' scanner (both reentrant
 and non-reentrant) may be restarted by calling `yyrestart'.
 
    Below is an example of a program that creates a scanner, uses it,
 then destroys it when done:
 
 
          int main ()
          {
              yyscan_t scanner;
              int tok;
 
              yylex_init(&scanner);
 
              while ((tok=yylex()) > 0)
                  printf("tok=%d  yytext=%s\n", tok, yyget_text(scanner));
 
              yylex_destroy(scanner);
              return 0;
          }
 
Info Catalog (flex.info.gz) Global Replacement (flex.info.gz) Reentrant Detail (flex.info.gz) Accessor Methods
automatically generated byinfo2html