flex: Code-Level And API Options

 
 16.3 Code-Level And API Options
 ===============================
 
 '--ansi-definitions, '%option ansi-definitions''
      Deprecated, ignored
 
 '--ansi-prototypes, '%option ansi-prototypes''
      Deprecated, ignored
 
 '--bison-bridge, '%option bison-bridge''
      instructs flex to generate a C scanner that is meant to be called
      by a 'GNU bison' parser.  The scanner has minor API changes for
      'bison' compatibility.  In particular, the declaration of 'yylex'
      is modified to take an additional parameter, 'yylval'.  ⇒Bison
      Bridge.
 
 '--bison-locations, '%option bison-locations''
      instruct flex that 'GNU bison' '%locations' are being used.  This
      means 'yylex' will be passed an additional parameter, 'yylloc'.
      This option implies '%option bison-bridge'.  ⇒Bison Bridge.
 
 '-L, --noline, '%option noline''
      instructs 'flex' not to generate '#line' directives.  Without this
      option, 'flex' peppers the generated scanner with '#line'
      directives so error messages in the actions will be correctly
      located with respect to either the original 'flex' input file (if
      the errors are due to code in the input file), or 'lex.yy.c' (if
      the errors are 'flex''s fault - you should report these sorts of
      errors to the email address given in ⇒Reporting Bugs).
 
 '-R, --reentrant, '%option reentrant''
      instructs flex to generate a reentrant C scanner.  The generated
      scanner may safely be used in a multi-threaded environment.  The
      API for a reentrant scanner is different than for a non-reentrant
      scanner ⇒Reentrant).  Because of the API difference between
      reentrant and non-reentrant 'flex' scanners, non-reentrant flex
      code must be modified before it is suitable for use with this
      option.  This option is not compatible with the '--c++' option.
 
      The option '--reentrant' does not affect the performance of the
      scanner.
 
 '-+, --c++, '%option c++''
      specifies that you want flex to generate a C++ scanner class.
      ⇒Cxx, for details.
 
 '--array, '%option array''
      specifies that you want yytext to be an array instead of a char*
 
 '--pointer, '%option pointer''
      specify that 'yytext' should be a 'char *', not an array.  This
      default is 'char *'.
 
 '-PPREFIX, --prefix=PREFIX, '%option prefix="PREFIX"''
      changes the default 'yy' prefix used by 'flex' for all
      globally-visible variable and function names to instead be
      'PREFIX'.  For example, '--prefix=foo' changes the name of 'yytext'
      to 'footext'.  It also changes the name of the default output file
      from 'lex.yy.c' to 'lex.foo.c'.  Here is a partial list of the
      names affected:
 
               yy_create_buffer
               yy_delete_buffer
               yy_flex_debug
               yy_init_buffer
               yy_flush_buffer
               yy_load_buffer_state
               yy_switch_to_buffer
               yyin
               yyleng
               yylex
               yylineno
               yyout
               yyrestart
               yytext
               yywrap
               yyalloc
               yyrealloc
               yyfree
 
      (If you are using a C++ scanner, then only 'yywrap' and
      'yyFlexLexer' are affected.)  Within your scanner itself, you can
      still refer to the global variables and functions using either
      version of their name; but externally, they have the modified name.
 
      This option lets you easily link together multiple 'flex' programs
      into the same executable.  Note, though, that using this option
      also renames 'yywrap()', so you now _must_ either provide your own
      (appropriately-named) version of the routine for your scanner, or
      use '%option noyywrap', as linking with '-lfl' no longer provides
      one for you by default.
 
 '--main, '%option main''
      directs flex to provide a default 'main()' program for the scanner,
      which simply calls 'yylex()'.  This option implies 'noyywrap' (see
      below).
 
 '--nounistd, '%option nounistd''
      suppresses inclusion of the non-ANSI header file 'unistd.h'.  This
      option is meant to target environments in which 'unistd.h' does not
      exist.  Be aware that certain options may cause flex to generate
      code that relies on functions normally found in 'unistd.h', (e.g.
      'isatty()', 'read()'.)  If you wish to use these functions, you
      will have to inform your compiler where to find them.  ⇒
      option-always-interactive.  ⇒option-read.
 
 '--yyclass=NAME, '%option yyclass="NAME"''
      only applies when generating a C++ scanner (the '--c++' option).
      It informs 'flex' that you have derived 'NAME' as a subclass of
      'yyFlexLexer', so 'flex' will place your actions in the member
      function 'foo::yylex()' instead of 'yyFlexLexer::yylex()'.  It also
      generates a 'yyFlexLexer::yylex()' member function that emits a
      run-time error (by invoking 'yyFlexLexer::LexerError())' if called.
      ⇒Cxx.