[BACK]Return to ONEWS CVS log [TXT][DIR] Up to [local] / src / usr.bin / lex

Annotation of src/usr.bin/lex/ONEWS, Revision 1.1

1.1     ! tedu        1: Changes between release 2.5.4 (11Sep96) and release 2.5.3:
        !             2:
        !             3:        - Fixed a bug introduced in 2.5.3 that blew it when a call
        !             4:          to input() occurred at the end of an input file.
        !             5:
        !             6:        - Fixed scanner skeleton so the example in the man page of
        !             7:          scanning strings using exclusive start conditions works.
        !             8:
        !             9:        - Minor Makefile tweaks.
        !            10:
        !            11:
        !            12: Changes between release 2.5.3 (29May96) and release 2.5.2:
        !            13:
        !            14:        - Some serious bugs in yymore() have been fixed.  In particular,
        !            15:          when using AT&T-lex-compatibility or %array, you can intermix
        !            16:          calls to input(), unput(), and yymore().  (This still doesn't
        !            17:          work for %pointer, and isn't likely to in the future.)
        !            18:
        !            19:        - A bug in handling NUL's in the input stream of scanners using
        !            20:          REJECT has been fixed.
        !            21:
        !            22:        - The default main() in libfl.a now repeatedly calls yylex() until
        !            23:          it returns 0, rather than just calling it once.
        !            24:
        !            25:        - Minor tweak for Windows NT Makefile, MISC/NT/Makefile.
        !            26:
        !            27:
        !            28: Changes between release 2.5.2 (25Apr95) and release 2.5.1:
        !            29:
        !            30:        - The --prefix configuration option now works.
        !            31:
        !            32:        - A bug that completely broke the "-Cf" table compression
        !            33:          option has been fixed.
        !            34:
        !            35:        - A major headache involving "const" declarators and Solaris
        !            36:          systems has been fixed.
        !            37:
        !            38:        - An octal escape sequence in a flex regular expression must
        !            39:          now contain only the digits 0-7.
        !            40:
        !            41:        - You can now use "--" on the flex command line to mark the
        !            42:          end of flex options.
        !            43:
        !            44:        - You can now specify the filename '-' as a synonym for stdin.
        !            45:
        !            46:        - By default, the scanners generated by flex no longer
        !            47:          statically initialize yyin and yyout to stdin and stdout.
        !            48:          This change is necessary because in some ANSI environments,
        !            49:          stdin and stdout are not compile-time constant.  You can
        !            50:          force the initialization using "%option stdinit" in the first
        !            51:          section of your flex input.
        !            52:
        !            53:        - "%option nounput" now correctly omits the unput() routine
        !            54:          from the output.
        !            55:
        !            56:        - "make clean" now removes config.log, config.cache, and the
        !            57:          flex binary.  The fact that it removes the flex binary means
        !            58:          you should take care if making changes to scan.l, to make
        !            59:          sure you don't wind up in a bootstrap problem.
        !            60:
        !            61:        - In general, the Makefile has been reworked somewhat (thanks
        !            62:          to Francois Pinard) for added flexibility - more changes will
        !            63:          follow in subsequent releases.
        !            64:
        !            65:        - The .texi and .info files in MISC/texinfo/ have been updated,
        !            66:          thanks also to Francois Pinard.
        !            67:
        !            68:        - The FlexLexer::yylex(istream* new_in, ostream* new_out) method
        !            69:          now does not have a default for the first argument, to disambiguate
        !            70:          it from FlexLexer::yylex().
        !            71:
        !            72:        - A bug in destructing a FlexLexer object before doing any scanning
        !            73:          with it has been fixed.
        !            74:
        !            75:        - A problem with including FlexLexer.h multiple times has been fixed.
        !            76:
        !            77:        - The alloca() chud necessary to accommodate bison has grown
        !            78:          even uglier, but hopefully more correct.
        !            79:
        !            80:        - A portability tweak has been added to accommodate compilers that
        !            81:          use char* generic pointers.
        !            82:
        !            83:        - EBCDIC contact information in the file MISC/EBCDIC has been updated.
        !            84:
        !            85:        - An OS/2 Makefile and config.h for flex 2.5 is now available in
        !            86:          MISC/OS2/, contributed by Kai Uwe Rommel.
        !            87:
        !            88:        - The descrip.mms file for building flex under VMS has been updated,
        !            89:          thanks to Pat Rankin.
        !            90:
        !            91:        - The notes on building flex for the Amiga have been updated for
        !            92:          flex 2.5, contributed by Andreas Scherer.
        !            93:
        !            94:
        !            95: Changes between release 2.5.1 (28Mar95) and release 2.4.7:
        !            96:
        !            97:        - A new concept of "start condition" scope has been introduced.
        !            98:          A start condition scope is begun with:
        !            99:
        !           100:                <SCs>{
        !           101:
        !           102:          where SCs is a list of one or more start conditions.  Inside
        !           103:          the start condition scope, every rule automatically has the
        !           104:          prefix <SCs> applied to it, until a '}' which matches the
        !           105:          initial '{'.  So, for example:
        !           106:
        !           107:                <ESC>{
        !           108:                        "\\n"   return '\n';
        !           109:                        "\\r"   return '\r';
        !           110:                        "\\f"   return '\f';
        !           111:                        "\\0"   return '\0';
        !           112:                }
        !           113:
        !           114:          is equivalent to:
        !           115:
        !           116:                <ESC>"\\n"      return '\n';
        !           117:                <ESC>"\\r"      return '\r';
        !           118:                <ESC>"\\f"      return '\f';
        !           119:                <ESC>"\\0"      return '\0';
        !           120:
        !           121:          As indicated in this example, rules inside start condition scopes
        !           122:          (and any rule, actually, other than the first) can be indented,
        !           123:          to better show the extent of the scope.
        !           124:
        !           125:          Start condition scopes may be nested.
        !           126:
        !           127:        - The new %option directive can be used in the first section of
        !           128:          a flex scanner to control scanner-generation options.  Most
        !           129:          options are given simply as names, optionally preceded by the
        !           130:          word "no" (with no intervening whitespace) to negate their
        !           131:          meaning.  Some are equivalent to flex flags, so putting them
        !           132:          in your scanner source is equivalent to always specifying
        !           133:          the flag (%option's take precedence over flags):
        !           134:
        !           135:                7bit    -7 option
        !           136:                8bit    -8 option
        !           137:                align   -Ca option
        !           138:                backup  -b option
        !           139:                batch   -B option
        !           140:                c++     -+ option
        !           141:                caseful opposite of -i option (caseful is the default);
        !           142:                case-sensitive  same as above
        !           143:                caseless        -i option;
        !           144:                case-insensitive        same as above
        !           145:                debug   -d option
        !           146:                default opposite of -s option
        !           147:                ecs     -Ce option
        !           148:                fast    -F option
        !           149:                full    -f option
        !           150:                interactive     -I option
        !           151:                lex-compat      -l option
        !           152:                meta-ecs        -Cm option
        !           153:                perf-report     -p option
        !           154:                read    -Cr option
        !           155:                stdout  -t option
        !           156:                verbose -v option
        !           157:                warn    opposite of -w option (so use "%option nowarn" for -w)
        !           158:
        !           159:                array   equivalent to "%array"
        !           160:                pointer equivalent to "%pointer" (default)
        !           161:
        !           162:          Some provide new features:
        !           163:
        !           164:                always-interactive      generate a scanner which always
        !           165:                        considers its input "interactive" (no call to isatty()
        !           166:                        will be made when the scanner runs)
        !           167:                main    supply a main program for the scanner, which
        !           168:                        simply calls yylex().  Implies %option noyywrap.
        !           169:                never-interactive       generate a scanner which never
        !           170:                        considers its input "interactive" (no call to isatty()
        !           171:                        will be made when the scanner runs)
        !           172:                stack   if set, enable start condition stacks (see below)
        !           173:                stdinit if unset ("%option nostdinit"), initialize yyin
        !           174:                        and yyout statically to nil FILE* pointers, instead
        !           175:                        of stdin and stdout
        !           176:                yylineno        if set, keep track of the current line
        !           177:                        number in global yylineno (this option is expensive
        !           178:                        in terms of performance).  The line number is available
        !           179:                        to C++ scanning objects via the new member function
        !           180:                        lineno().
        !           181:                yywrap  if unset ("%option noyywrap"), scanner does not
        !           182:                        call yywrap() upon EOF but simply assumes there
        !           183:                        are no more files to scan
        !           184:
        !           185:          Flex scans your rule actions to determine whether you use the
        !           186:          REJECT or yymore features (this is not new).  Two %options can be
        !           187:          used to override its decision, either by setting them to indicate
        !           188:          the feature is indeed used, or unsetting them to indicate it
        !           189:          actually is not used:
        !           190:
        !           191:                reject
        !           192:                yymore
        !           193:
        !           194:          Three %option's take string-delimited values, offset with '=':
        !           195:
        !           196:                outfile="<name>"        equivalent to -o<name>
        !           197:                prefix="<name>"         equivalent to -P<name>
        !           198:                yyclass="<name>"        set the name of the C++ scanning class
        !           199:                                        (see below)
        !           200:
        !           201:          A number of %option's are available for lint purists who
        !           202:          want to suppress the appearance of unneeded routines in
        !           203:          the generated scanner.  Each of the following, if unset,
        !           204:          results in the corresponding routine not appearing in the
        !           205:          generated scanner:
        !           206:
        !           207:                input, unput
        !           208:                yy_push_state, yy_pop_state, yy_top_state
        !           209:                yy_scan_buffer, yy_scan_bytes, yy_scan_string
        !           210:
        !           211:          You can specify multiple options with a single %option directive,
        !           212:          and multiple directives in the first section of your flex input file.
        !           213:
        !           214:        - The new function:
        !           215:
        !           216:                YY_BUFFER_STATE yy_scan_string( const char *str )
        !           217:
        !           218:          returns a YY_BUFFER_STATE (which also becomes the current input
        !           219:          buffer) for scanning the given string, which occurs starting
        !           220:          with the next call to yylex().  The string must be NUL-terminated.
        !           221:          A related function:
        !           222:
        !           223:                YY_BUFFER_STATE yy_scan_bytes( const char *bytes, int len )
        !           224:
        !           225:          creates a buffer for scanning "len" bytes (including possibly NUL's)
        !           226:          starting at location "bytes".
        !           227:
        !           228:          Note that both of these functions create and scan a *copy* of
        !           229:          the string/bytes.  (This may be desirable, since yylex() modifies
        !           230:          the contents of the buffer it is scanning.)  You can avoid the
        !           231:          copy by using:
        !           232:
        !           233:                YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size )
        !           234:
        !           235:          which scans in place the buffer starting at "base", consisting
        !           236:          of "size" bytes, the last two bytes of which *must* be
        !           237:          YY_END_OF_BUFFER_CHAR (these bytes are not scanned; thus, scanning
        !           238:          consists of base[0] through base[size-2], inclusive).  If you
        !           239:          fail to set up "base" in this manner, yy_scan_buffer returns a
        !           240:          nil pointer instead of creating a new input buffer.
        !           241:
        !           242:          The type yy_size_t is an integral type to which you can cast
        !           243:          an integer expression reflecting the size of the buffer.
        !           244:
        !           245:        - Three new routines are available for manipulating stacks of
        !           246:          start conditions:
        !           247:
        !           248:                void yy_push_state( int new_state )
        !           249:
        !           250:          pushes the current start condition onto the top of the stack
        !           251:          and BEGIN's "new_state" (recall that start condition names are
        !           252:          also integers).
        !           253:
        !           254:                void yy_pop_state()
        !           255:
        !           256:          pops the top of the stack and BEGIN's to it, and
        !           257:
        !           258:                int yy_top_state()
        !           259:
        !           260:          returns the top of the stack without altering the stack's
        !           261:          contents.
        !           262:
        !           263:          The start condition stack grows dynamically and so has no built-in
        !           264:          size limitation.  If memory is exhausted, program execution
        !           265:          is aborted.
        !           266:
        !           267:          To use start condition stacks, your scanner must include
        !           268:          a "%option stack" directive.
        !           269:
        !           270:        - flex now supports POSIX character class expressions.  These
        !           271:          are expressions enclosed inside "[:" and ":]" delimiters (which
        !           272:          themselves must appear between the '[' and ']' of a character
        !           273:          class; other elements may occur inside the character class, too).
        !           274:          The expressions flex recognizes are:
        !           275:
        !           276:                [:alnum:] [:alpha:] [:blank:] [:cntrl:] [:digit:] [:graph:]
        !           277:                [:lower:] [:print:] [:punct:] [:space:] [:upper:] [:xdigit:]
        !           278:
        !           279:          These expressions all designate a set of characters equivalent to
        !           280:          the corresponding isXXX function (for example, [:alnum:] designates
        !           281:          those characters for which isalnum() returns true - i.e., any
        !           282:          alphabetic or numeric).  Some systems don't provide isblank(),
        !           283:          so flex defines [:blank:] as a blank or a tab.
        !           284:
        !           285:          For example, the following character classes are all equivalent:
        !           286:
        !           287:                [[:alnum:]]
        !           288:                [[:alpha:][:digit:]
        !           289:                [[:alpha:]0-9]
        !           290:                [a-zA-Z0-9]
        !           291:
        !           292:          If your scanner is case-insensitive (-i flag), then [:upper:]
        !           293:          and [:lower:] are equivalent to [:alpha:].
        !           294:
        !           295:        - The promised rewrite of the C++ FlexLexer class has not yet
        !           296:          been done.  Support for FlexLexer is limited at the moment to
        !           297:          fixing show-stopper bugs, so, for example, the new functions
        !           298:          yy_scan_string() & friends are not available to FlexLexer
        !           299:          objects.
        !           300:
        !           301:        - The new macro
        !           302:
        !           303:                yy_set_interactive(is_interactive)
        !           304:
        !           305:          can be used to control whether the current buffer is considered
        !           306:          "interactive".  An interactive buffer is processed more slowly,
        !           307:          but must be used when the scanner's input source is indeed
        !           308:          interactive to avoid problems due to waiting to fill buffers
        !           309:          (see the discussion of the -I flag in flex.1).  A non-zero value
        !           310:          in the macro invocation marks the buffer as interactive, a zero
        !           311:          value as non-interactive.  Note that use of this macro overrides
        !           312:          "%option always-interactive" or "%option never-interactive".
        !           313:
        !           314:          yy_set_interactive() must be invoked prior to beginning to
        !           315:          scan the buffer.
        !           316:
        !           317:        - The new macro
        !           318:
        !           319:                yy_set_bol(at_bol)
        !           320:
        !           321:          can be used to control whether the current buffer's scanning
        !           322:          context for the next token match is done as though at the
        !           323:          beginning of a line (non-zero macro argument; makes '^' anchored
        !           324:          rules active) or not at the beginning of a line (zero argument,
        !           325:          '^' rules inactive).
        !           326:
        !           327:        - Related to this change, the mechanism for determining when a scan is
        !           328:          starting at the beginning of a line has changed.  It used to be
        !           329:          that '^' was active iff the character prior to that at which the
        !           330:          scan started was a newline.  The mechanism now is that '^' is
        !           331:          active iff the last token ended in a newline (or the last call to
        !           332:          input() returned a newline).  For most users, the difference in
        !           333:          mechanisms is negligible.  Where it will make a difference,
        !           334:          however, is if unput() or yyless() is used to alter the input
        !           335:          stream.  When in doubt, use yy_set_bol().
        !           336:
        !           337:        - The new beginning-of-line mechanism involved changing some fairly
        !           338:          twisted code, so it may have introduced bugs - beware ...
        !           339:
        !           340:        - The macro YY_AT_BOL() returns true if the next token scanned from
        !           341:          the current buffer will have '^' rules active, false otherwise.
        !           342:
        !           343:        - The new function
        !           344:
        !           345:                void yy_flush_buffer( struct yy_buffer_state* b )
        !           346:
        !           347:          flushes the contents of the current buffer (i.e., next time
        !           348:          the scanner attempts to match a token using b as the current
        !           349:          buffer, it will begin by invoking YY_INPUT to fill the buffer).
        !           350:          This routine is also available to C++ scanners (unlike some
        !           351:          of the other new routines).
        !           352:
        !           353:          The related macro
        !           354:
        !           355:                YY_FLUSH_BUFFER
        !           356:
        !           357:          flushes the contents of the current buffer.
        !           358:
        !           359:        - A new "-ooutput" option writes the generated scanner to "output".
        !           360:          If used with -t, the scanner is still written to stdout, but
        !           361:          its internal #line directives (see previous item) use "output".
        !           362:
        !           363:        - Flex now generates #line directives relating the code it
        !           364:          produces to the output file; this means that error messages
        !           365:          in the flex-generated code should be correctly pinpointed.
        !           366:
        !           367:        - When generating #line directives, filenames with embedded '\'s
        !           368:          have those characters escaped (i.e., turned into '\\').  This
        !           369:          feature helps with reporting filenames for some MS-DOS and OS/2
        !           370:          systems.
        !           371:
        !           372:        - The FlexLexer class includes two new public member functions:
        !           373:
        !           374:                virtual void switch_streams( istream* new_in = 0,
        !           375:                                                ostream* new_out = 0 )
        !           376:
        !           377:          reassigns yyin to new_in (if non-nil) and yyout to new_out
        !           378:          (ditto), deleting the previous input buffer if yyin is
        !           379:          reassigned.  It is used by:
        !           380:
        !           381:                int yylex( istream* new_in = 0, ostream* new_out = 0 )
        !           382:
        !           383:          which first calls switch_streams() and then returns the value
        !           384:          of calling yylex().
        !           385:
        !           386:        - C++ scanners now have yy_flex_debug as a member variable of
        !           387:          FlexLexer rather than a global, and member functions for testing
        !           388:          and setting it.
        !           389:
        !           390:        - When generating a C++ scanning class, you can now use
        !           391:
        !           392:                %option yyclass="foo"
        !           393:
        !           394:          to inform flex that you have derived "foo" as a subclass of
        !           395:          yyFlexLexer, so flex will place your actions in the member
        !           396:          function foo::yylex() instead of yyFlexLexer::yylex().  It also
        !           397:          generates a yyFlexLexer::yylex() member function that generates a
        !           398:          run-time error if called (by invoking yyFlexLexer::LexerError()).
        !           399:          This feature is necessary if your subclass "foo" introduces some
        !           400:          additional member functions or variables that you need to access
        !           401:          from yylex().
        !           402:
        !           403:        - Current texinfo files in MISC/texinfo, contributed by Francois
        !           404:          Pinard.
        !           405:
        !           406:        - You can now change the name "flex" to something else (e.g., "lex")
        !           407:          by redefining $(FLEX) in the Makefile.
        !           408:
        !           409:        - Two bugs (one serious) that could cause "bigcheck" to fail have
        !           410:          been fixed.
        !           411:
        !           412:        - A number of portability/configuration changes have been made
        !           413:          for easier portability.
        !           414:
        !           415:        - You can use "YYSTATE" in your scanner as an alias for YY_START
        !           416:          (for AT&T lex compatibility).
        !           417:
        !           418:        - input() now maintains yylineno.
        !           419:
        !           420:        - input() no longer trashes yytext.
        !           421:
        !           422:        - interactive scanners now read characters in YY_INPUT up to a
        !           423:          newline, a large performance gain.
        !           424:
        !           425:        - C++ scanner objects now work with the -P option.  You include
        !           426:          <FlexLexer.h> once per scanner - see comments in <FlexLexer.h>
        !           427:          (or flex.1) for details.
        !           428:
        !           429:        - C++ FlexLexer objects now use the "cerr" stream to report -d output
        !           430:          instead of stdio.
        !           431:
        !           432:        - The -c flag now has its full glorious POSIX interpretation (do
        !           433:          nothing), rather than being interpreted as an old-style -C flag.
        !           434:
        !           435:        - Scanners generated by flex now include two #define's giving
        !           436:          the major and minor version numbers (YY_FLEX_MAJOR_VERSION,
        !           437:          YY_FLEX_MINOR_VERSION).  These can then be tested to see
        !           438:          whether certain flex features are available.
        !           439:
        !           440:        - Scanners generated using -l lex compatibility now have the symbol
        !           441:          YY_FLEX_LEX_COMPAT #define'd.
        !           442:
        !           443:        - When initializing (i.e., yy_init is non-zero on entry to yylex()),
        !           444:          generated scanners now set yy_init to zero before executing
        !           445:          YY_USER_INIT.  This means that you can set yy_init back to a
        !           446:          non-zero value in YY_USER_INIT if you need the scanner to be
        !           447:          reinitialized on the next call.
        !           448:
        !           449:        - You can now use "#line" directives in the first section of your
        !           450:          scanner specification.
        !           451:
        !           452:        - When generating full-table scanners (-Cf), flex now puts braces
        !           453:          around each row of the 2-d array initialization, to silence warnings
        !           454:          on over-zealous compilers.
        !           455:
        !           456:        - Improved support for MS-DOS.  The flex sources have been successfully
        !           457:          built, unmodified, for Borland 4.02 (all that's required is a
        !           458:          Borland Makefile and config.h file, which are supplied in
        !           459:          MISC/Borland - contributed by Terrence O Kane).
        !           460:
        !           461:        - Improved support for Macintosh using Think C - the sources should
        !           462:          build for this platform "out of the box".  Contributed by Scott
        !           463:          Hofmann.
        !           464:
        !           465:        - Improved support for VMS, in MISC/VMS/, contributed by Pat Rankin.
        !           466:
        !           467:        - Support for the Amiga, in MISC/Amiga/, contributed by Andreas
        !           468:          Scherer.  Note that the contributed files were developed for
        !           469:          flex 2.4 and have not been tested with flex 2.5.
        !           470:
        !           471:        - Some notes on support for the NeXT, in MISC/NeXT, contributed
        !           472:          by Raf Schietekat.
        !           473:
        !           474:        - The MISC/ directory now includes a preformatted version of flex.1
        !           475:          in flex.man, and pre-yacc'd versions of parse.y in parse.{c,h}.
        !           476:
        !           477:        - The flex.1 and flexdoc.1 manual pages have been merged.  There
        !           478:          is now just one document, flex.1, which includes an overview
        !           479:          at the beginning to help you find the section you need.
        !           480:
        !           481:        - Documentation now clarifies that start conditions persist across
        !           482:          switches to new input files or different input buffers.  If you
        !           483:          want to e.g., return to INITIAL, you must explicitly do so.
        !           484:
        !           485:        - The "Performance Considerations" section of the manual has been
        !           486:          updated.
        !           487:
        !           488:        - Documented the "yy_act" variable, which when YY_USER_ACTION is
        !           489:          invoked holds the number of the matched rule, and added an
        !           490:          example of using yy_act to profile how often each rule is matched.
        !           491:
        !           492:        - Added YY_NUM_RULES, a definition that gives the total number
        !           493:          of rules in the file, including the default rule (even if you
        !           494:          use -s).
        !           495:
        !           496:        - Documentation now clarifies that you can pass a nil FILE* pointer
        !           497:          to yy_create_buffer() or yyrestart() if you've arrange YY_INPUT
        !           498:          to not need yyin.
        !           499:
        !           500:        - Documentation now clarifies that YY_BUFFER_STATE is a pointer to
        !           501:          an opaque "struct yy_buffer_state".
        !           502:
        !           503:        - Documentation now stresses that you gain the benefits of removing
        !           504:          backing-up states only if you remove *all* of them.
        !           505:
        !           506:        - Documentation now points out that traditional lex allows you
        !           507:          to put the action on a separate line from the rule pattern if
        !           508:          the pattern has trailing whitespace (ugh!), but flex doesn't
        !           509:          support this.
        !           510:
        !           511:        - A broken example in documentation of the difference between
        !           512:          inclusive and exclusive start conditions is now fixed.
        !           513:
        !           514:        - Usage (-h) report now goes to stdout.
        !           515:
        !           516:        - Version (-V) info now goes to stdout.
        !           517:
        !           518:        - More #ifdef chud has been added to the parser in attempt to
        !           519:          deal with bison's use of alloca().
        !           520:
        !           521:        - "make clean" no longer deletes emacs backup files (*~).
        !           522:
        !           523:        - Some memory leaks have been fixed.
        !           524:
        !           525:        - A bug was fixed in which dynamically-expanded buffers were
        !           526:          reallocated a couple of bytes too small.
        !           527:
        !           528:        - A bug was fixed which could cause flex to read and write beyond
        !           529:          the end of the input buffer.
        !           530:
        !           531:        - -S will not be going away.
        !           532:
        !           533:
        !           534: Changes between release 2.4.7 (03Aug94) and release 2.4.6:
        !           535:
        !           536:        - Fixed serious bug in reading multiple files.
        !           537:
        !           538:        - Fixed bug in scanning NUL's.
        !           539:
        !           540:        - Fixed bug in input() returning 8-bit characters.
        !           541:
        !           542:        - Fixed bug in matching text with embedded NUL's when
        !           543:          using %array or lex compatibility.
        !           544:
        !           545:        - Fixed multiple invocations of YY_USER_ACTION when using '|'
        !           546:          continuation action.
        !           547:
        !           548:        - Minor prototyping fixes.
        !           549:
        !           550: Changes between release 2.4.6 (04Jan94) and release 2.4.5:
        !           551:
        !           552:        - Linking with -lfl no longer required if your program includes
        !           553:          its own yywrap() and main() functions.  (This change will cause
        !           554:          problems if you have a non-ANSI compiler on a system for which
        !           555:          sizeof(int) != sizeof(void*) or sizeof(int) != sizeof(size_t).)
        !           556:
        !           557:        - The use of 'extern "C++"' in FlexLexer.h has been modified to
        !           558:          get around an incompatibility with g++'s header files.
        !           559:
        !           560: Changes between release 2.4.5 (11Dec93) and release 2.4.4:
        !           561:
        !           562:        - Fixed bug breaking C++ scanners that use REJECT or variable
        !           563:          trailing context.
        !           564:
        !           565:        - Fixed serious input problem for interactive scanners on
        !           566:          systems for which char is unsigned.
        !           567:
        !           568:        - Fixed bug in incorrectly treating '$' operator as variable
        !           569:          trailing context.
        !           570:
        !           571:        - Fixed bug in -CF table representation that could lead to
        !           572:          corrupt tables.
        !           573:
        !           574:        - Fixed fairly benign memory leak.
        !           575:
        !           576:        - Added `extern "C++"' wrapper to FlexLexer.h header.  This
        !           577:          should overcome the g++ 2.5.X problems mentioned in the
        !           578:          NEWS for release 2.4.3.
        !           579:
        !           580:        - Changed #include of FlexLexer.h to use <> instead of "".
        !           581:
        !           582:        - Added feature to control whether the scanner attempts to
        !           583:          refill the input buffer once it's exhausted.  This feature
        !           584:          will be documented in the 2.5 release.
        !           585:
        !           586:
        !           587: Changes between release 2.4.4 (07Dec93) and release 2.4.3:
        !           588:
        !           589:        - Fixed two serious bugs in scanning 8-bit characters.
        !           590:
        !           591:        - Fixed bug in YY_USER_ACTION that caused it to be executed
        !           592:          inappropriately (on the scanner's own internal actions, and
        !           593:          with incorrect yytext/yyleng values).
        !           594:
        !           595:        - Fixed bug in pointing yyin at a new file and resuming scanning.
        !           596:
        !           597:        - Portability fix regarding min/max/abs macros conflicting with
        !           598:          function definitions in standard header files.
        !           599:
        !           600:        - Added a virtual LexerError() method to the C++ yyFlexLexer class
        !           601:          for reporting error messages instead of always using cerr.
        !           602:
        !           603:        - Added warning in flexdoc that the C++ scanning class is presently
        !           604:          experimental and subject to considerable change between major
        !           605:          releases.
        !           606:
        !           607:
        !           608: Changes between release 2.4.3 (03Dec93) and release 2.4.2:
        !           609:
        !           610:        - Fixed bug causing fatal scanner messages to fail to print.
        !           611:
        !           612:        - Fixed things so FlexLexer.h can be included in other C++
        !           613:          sources.  One side-effect of this change is that -+ and -CF
        !           614:          are now incompatible.
        !           615:
        !           616:        - libfl.a now supplies private versions of the the <string.h>/
        !           617:          <strings.h> string routines needed by flex and the scanners
        !           618:          it generates, to enhance portability to some BSD systems.
        !           619:
        !           620:        - More robust solution to 2.4.2's flexfatal() bug fix.
        !           621:
        !           622:        - Added ranlib of installed libfl.a.
        !           623:
        !           624:        - Some lint tweaks.
        !           625:
        !           626:        - NOTE: problems have been encountered attempting to build flex
        !           627:          C++ scanners using g++ version 2.5.X.  The problem is due to an
        !           628:          unfortunate heuristic in g++ 2.5.X that attempts to discern between
        !           629:          C and C++ headers.  Because FlexLexer.h is installed (by default)
        !           630:          in /usr/local/include and not /usr/local/lib/g++-include, g++ 2.5.X
        !           631:          decides that it's a C header :-(.  So if you have problems, install
        !           632:          the header in /usr/local/lib/g++-include instead.
        !           633:
        !           634:
        !           635: Changes between release 2.4.2 (01Dec93) and release 2.4.1:
        !           636:
        !           637:        - Fixed bug in libfl.a referring to non-existent "flexfatal" function.
        !           638:
        !           639:        - Modified to produce both compress'd and gzip'd tar files for
        !           640:          distributions (you probably don't care about this change!).
        !           641:
        !           642:
        !           643: Changes between release 2.4.1 (30Nov93) and release 2.3.8:
        !           644:
        !           645:        - The new '-+' flag instructs flex to generate a C++ scanner class
        !           646:          (thanks to Kent Williams).  flex writes an implementation of the
        !           647:          class defined in FlexLexer.h to lex.yy.cc.  You may include
        !           648:          multiple scanner classes in your program using the -P flag.  Note
        !           649:          that the scanner class also provides a mechanism for creating
        !           650:          reentrant scanners.  The scanner class uses C++ streams for I/O
        !           651:          instead of FILE*'s (thanks to Tom Epperly).  If the flex executable's
        !           652:          name ends in '+' then the '-+' flag is automatically on, so creating
        !           653:          a symlink or copy of "flex" to "flex++" results in a version of
        !           654:          flex that can be used exclusively for C++ scanners.
        !           655:
        !           656:          Note that without the '-+' flag, flex-generated scanners can still
        !           657:          be compiled using C++ compilers, though they use FILE*'s for I/O
        !           658:          instead of streams.
        !           659:
        !           660:          See the "GENERATING C++ SCANNERS" section of flexdoc for details.
        !           661:
        !           662:        - The new '-l' flag turns on maximum AT&T lex compatibility.  In
        !           663:          particular, -l includes support for "yylineno" and makes yytext
        !           664:          be an array instead of a pointer.  It does not, however, do away
        !           665:          with all incompatibilities.  See the "INCOMPATIBILITIES WITH LEX
        !           666:          AND POSIX" section of flexdoc for details.
        !           667:
        !           668:        - The new '-P' option specifies a prefix to use other than "yy"
        !           669:          for the scanner's globally-visible variables, and for the
        !           670:          "lex.yy.c" filename.  Using -P you can link together multiple
        !           671:          flex scanners in the same executable.
        !           672:
        !           673:        - The distribution includes a "texinfo" version of flexdoc.1,
        !           674:          contributed by Roland Pesch (thanks also to Marq Kole, who
        !           675:          contributed another version).  It has not been brought up to
        !           676:          date, but reflects version 2.3.  See MISC/flex.texinfo.
        !           677:
        !           678:          The flex distribution will soon include G.T. Nicol's flex
        !           679:          manual; he is presently bringing it up-to-date for version 2.4.
        !           680:
        !           681:        - yywrap() is now a function, and you now *must* link flex scanners
        !           682:          with libfl.a.
        !           683:
        !           684:        - Site-configuration is now done via an autoconf-generated
        !           685:          "configure" script contributed by Francois Pinard.
        !           686:
        !           687:        - Scanners now use fread() (or getc(), if interactive) and not
        !           688:          read() for input.  A new "table compression" option, -Cr,
        !           689:          overrides this change and causes the scanner to use read()
        !           690:          (because read() is a bit faster than fread()).  -f and -F
        !           691:          are now equivalent to -Cfr and -CFr; i.e., they imply the
        !           692:          -Cr option.
        !           693:
        !           694:        - In the blessed name of POSIX compliance, flex supports "%array"
        !           695:          and "%pointer" directives in the definitions (first) section of
        !           696:          the scanner specification.  The former specifies that yytext
        !           697:          should be an array (of size YYLMAX), the latter, that it should
        !           698:          be a pointer.  The array version of yytext is universally slower
        !           699:          than the pointer version, but has the advantage that its contents
        !           700:          remain unmodified across calls to input() and unput() (the pointer
        !           701:          version of yytext is, still, trashed by such calls).
        !           702:
        !           703:          "%array" cannot be used with the '-+' C++ scanner class option.
        !           704:
        !           705:        - The new '-Ca' option directs flex to trade off memory for
        !           706:          natural alignment when generating a scanner's tables.  In
        !           707:          particular, table entries that would otherwise be "short"
        !           708:          become "long".
        !           709:
        !           710:        - The new '-h' option produces a summary of the flex flags.
        !           711:
        !           712:        - The new '-V' option reports the flex version number and exits.
        !           713:
        !           714:        - The new scanner macro YY_START returns an integer value
        !           715:          corresponding to the current start condition.  You can return
        !           716:          to that start condition by passing the value to a subsequent
        !           717:          "BEGIN" action.  You also can implement "start condition stacks"
        !           718:          by storing the values in an integer stack.
        !           719:
        !           720:        - You can now redefine macros such as YY_INPUT by just #define'ing
        !           721:          them to some other value in the first section of the flex input;
        !           722:          no need to first #undef them.
        !           723:
        !           724:        - flex now generates warnings for rules that can't be matched.
        !           725:          These warnings can be turned off using the new '-w' flag.  If
        !           726:          your scanner uses REJECT then you will not get these warnings.
        !           727:
        !           728:        - If you specify the '-s' flag but the default rule can be matched,
        !           729:          flex now generates a warning.
        !           730:
        !           731:        - "yyleng" is now a global, and may be modified by the user (though
        !           732:          doing so and then using yymore() will yield weird results).
        !           733:
        !           734:        - Name definitions in the first section of a scanner specification
        !           735:          can now include a leading '^' or trailing '$' operator.  In this
        !           736:          case, the definition is *not* pushed back inside of parentheses.
        !           737:
        !           738:        - Scanners with compressed tables are now "interactive" (-I option)
        !           739:          by default.  You can suppress this attribute (which makes them
        !           740:          run slightly slower) using the new '-B' flag.
        !           741:
        !           742:        - Flex now generates 8-bit scanners by default, unless you use the
        !           743:          -Cf or -CF compression options (-Cfe  and -CFe result in 8-bit
        !           744:          scanners).  You can force it to generate a 7-bit scanner using
        !           745:          the new '-7' flag.  You can build flex to generate 8-bit scanners
        !           746:          for -Cf and -CF, too, by adding -DDEFAULT_CSIZE=256 to CFLAGS
        !           747:          in the Makefile.
        !           748:
        !           749:        - You no longer need to call the scanner routine yyrestart() to
        !           750:          inform the scanner that you have switched to a new file after
        !           751:          having seen an EOF on the current input file.  Instead, just
        !           752:          point yyin at the new file and continue scanning.
        !           753:
        !           754:        - You no longer need to invoke YY_NEW_FILE in an <<EOF>> action
        !           755:          to indicate you wish to continue scanning.  Simply point yyin
        !           756:          at a new file.
        !           757:
        !           758:        - A leading '#' no longer introduces a comment in a flex input.
        !           759:
        !           760:        - flex no longer considers formfeed ('\f') a whitespace character.
        !           761:
        !           762:        - %t, I'm happy to report, has been nuked.
        !           763:
        !           764:        - The '-p' option may be given twice ('-pp') to instruct flex to
        !           765:          report minor performance problems as well as major ones.
        !           766:
        !           767:        - The '-v' verbose output no longer includes start/finish time
        !           768:          information.
        !           769:
        !           770:        - Newlines in flex inputs can optionally include leading or
        !           771:          trailing carriage-returns ('\r'), in support of several PC/Mac
        !           772:          run-time libraries that automatically include these.
        !           773:
        !           774:        - A start condition of the form "<*>" makes the following rule
        !           775:          active in every start condition, whether exclusive or inclusive.
        !           776:
        !           777:        - The following items have been corrected in the flex documentation:
        !           778:
        !           779:                - '-C' table compression options *are* cumulative.
        !           780:
        !           781:                - You may modify yytext but not lengthen it by appending
        !           782:                  characters to the end.  Modifying its final character
        !           783:                  will affect '^' anchoring for the next rule matched
        !           784:                  if the character is changed to or from a newline.
        !           785:
        !           786:                - The term "backtracking" has been renamed "backing up",
        !           787:                  since it is a one-time repositioning and not a repeated
        !           788:                  search.  What used to be the "lex.backtrack" file is now
        !           789:                  "lex.backup".
        !           790:
        !           791:                - Unindented "/* ... */" comments are allowed in the first
        !           792:                  flex input section, but not in the second.
        !           793:
        !           794:                - yyless() can only be used in the flex input source, not
        !           795:                  externally.
        !           796:
        !           797:                - You can use "yyrestart(yyin)" to throw away the
        !           798:                  current contents of the input buffer.
        !           799:
        !           800:                - To write high-speed scanners, attempt to match as much
        !           801:                  text as possible with each rule.  See MISC/fastwc/README
        !           802:                  for more information.
        !           803:
        !           804:                - Using the beginning-of-line operator ('^') is fairly
        !           805:                  cheap.  Using unput() is expensive.  Using yyless() is
        !           806:                  cheap.
        !           807:
        !           808:                - An example of scanning strings with embedded escape
        !           809:                  sequences has been added.
        !           810:
        !           811:                - The example of backing-up in flexdoc was erroneous; it
        !           812:                  has been corrected.
        !           813:
        !           814:        - A flex scanner's internal buffer now dynamically grows if needed
        !           815:          to match large tokens.  Note that growing the buffer presently
        !           816:          requires rescanning the (large) token, so consuming a lot of
        !           817:          text this way is a slow process.  Also note that presently the
        !           818:          buffer does *not* grow if you unput() more text than can fit
        !           819:          into the buffer.
        !           820:
        !           821:        - The MISC/ directory has been reorganized; see MISC/README for
        !           822:          details.
        !           823:
        !           824:        - yyless() can now be used in the third (user action) section
        !           825:          of a scanner specification, thanks to Ceriel Jacobs.  yyless()
        !           826:          remains a macro and cannot be used outside of the scanner source.
        !           827:
        !           828:        - The skeleton file is no longer opened at run-time, but instead
        !           829:          compiled into a large string array (thanks to John Gilmore and
        !           830:          friends at Cygnus).  You can still use the -S flag to point flex
        !           831:          at a different skeleton file.
        !           832:
        !           833:        - flex no longer uses a temporary file to store the scanner's
        !           834:          actions.
        !           835:
        !           836:        - A number of changes have been made to decrease porting headaches.
        !           837:          In particular, flex no longer uses memset() or ctime(), and
        !           838:          provides a single simple mechanism for dealing with C compilers
        !           839:          that still define malloc() as returning char* instead of void*.
        !           840:
        !           841:        - Flex now detects if the scanner specification requires the -8 flag
        !           842:          but the flag was not given or on by default.
        !           843:
        !           844:        - A number of table-expansion fencepost bugs have been fixed,
        !           845:          making flex more robust for generating large scanners.
        !           846:
        !           847:        - flex more consistently identifies the location of errors in
        !           848:          its input.
        !           849:
        !           850:        - YY_USER_ACTION is now invoked only for "real" actions, not for
        !           851:          internal actions used by the scanner for things like filling
        !           852:          the buffer or handling EOF.
        !           853:
        !           854:        - The rule "[^]]" now matches any character other than a ']';
        !           855:          formerly it matched any character at all followed by a ']'.
        !           856:          This change was made for compatibility with AT&T lex.
        !           857:
        !           858:        - A large number of miscellaneous bugs have been found and fixed
        !           859:          thanks to Gerhard Wilhelms.
        !           860:
        !           861:        - The source code has been heavily reformatted, making patches
        !           862:          relative to previous flex releases no longer accurate.
        !           863:
        !           864:
        !           865: Changes between 2.3 Patch #8 (21Feb93) and 2.3 Patch #7:
        !           866:
        !           867:        - Fixed bugs in dynamic memory allocation leading to grievous
        !           868:          fencepost problems when generating large scanners.
        !           869:        - Fixed bug causing infinite loops on character classes with 8-bit
        !           870:          characters in them.
        !           871:        - Fixed bug in matching repetitions with a lower bound of 0.
        !           872:        - Fixed bug in scanning NUL characters using an "interactive" scanner.
        !           873:        - Fixed bug in using yymore() at the end of a file.
        !           874:        - Fixed bug in misrecognizing rules with variable trailing context.
        !           875:        - Fixed bug compiling flex on Suns using gcc 2.
        !           876:        - Fixed bug in not recognizing that input files with the character
        !           877:          ASCII 128 in them require the -8 flag.
        !           878:        - Fixed bug that could cause an infinite loop writing out
        !           879:          error messages.
        !           880:        - Fixed bug in not recognizing old-style lex % declarations if
        !           881:          followed by a tab instead of a space.
        !           882:        - Fixed potential crash when flex terminated early (usually due
        !           883:          to a bad flag) and the -v flag had been given.
        !           884:        - Added some missing declarations of void functions.
        !           885:        - Changed to only use '\a' for __STDC__ compilers.
        !           886:        - Updated mailing addresses.
        !           887:
        !           888:
        !           889: Changes between 2.3 Patch #7 (28Mar91) and 2.3 Patch #6:
        !           890:
        !           891:        - Fixed out-of-bounds array access that caused bad tables
        !           892:          to be produced on machines where the bad reference happened
        !           893:          to yield a 1.  This caused problems installing or running
        !           894:          flex on some Suns, in particular.
        !           895:
        !           896:
        !           897: Changes between 2.3 Patch #6 (29Aug90) and 2.3 Patch #5:
        !           898:
        !           899:        - Fixed a serious bug in yymore() which basically made it
        !           900:          completely broken.  Thanks goes to Jean Christophe of
        !           901:          the Nethack development team for finding the problem
        !           902:          and passing along the fix.
        !           903:
        !           904:
        !           905: Changes between 2.3 Patch #5 (16Aug90) and 2.3 Patch #4:
        !           906:
        !           907:        - An up-to-date version of initscan.c so "make test" will
        !           908:          work after applying the previous patches
        !           909:
        !           910:
        !           911: Changes between 2.3 Patch #4 (14Aug90) and 2.3 Patch #3:
        !           912:
        !           913:        - Fixed bug in hexadecimal escapes which allowed only digits,
        !           914:          not letters, in escapes
        !           915:        - Fixed bug in previous "Changes" file!
        !           916:
        !           917:
        !           918: Changes between 2.3 Patch #3 (03Aug90) and 2.3 Patch #2:
        !           919:
        !           920:        - Correction to patch #2 for gcc compilation; thanks goes to
        !           921:          Paul Eggert for catching this.
        !           922:
        !           923:
        !           924: Changes between 2.3 Patch #2 (02Aug90) and original 2.3 release:
        !           925:
        !           926:        - Fixed (hopefully) headaches involving declaring malloc()
        !           927:          and free() for gcc, which defines __STDC__ but (often) doesn't
        !           928:          come with the standard include files such as <stdlib.h>.
        !           929:          Reordered #ifdef maze in the scanner skeleton in the hope of
        !           930:          getting the declarations right for cfront and g++, too.
        !           931:
        !           932:        - Note that this patch supercedes patch #1 for release 2.3,
        !           933:          which was never announced but was available briefly for
        !           934:          anonymous ftp.
        !           935:
        !           936:
        !           937: Changes between 2.3 (full) release of 28Jun90 and 2.2 (alpha) release:
        !           938:
        !           939: User-visible:
        !           940:
        !           941:        - A lone <<EOF>> rule (that is, one which is not qualified with
        !           942:          a list of start conditions) now specifies the EOF action for
        !           943:          *all* start conditions which haven't already had <<EOF>> actions
        !           944:          given.  To specify an end-of-file action for just the initial
        !           945:          state, use <INITIAL><<EOF>>.
        !           946:
        !           947:        - -d debug output is now contigent on the global yy_flex_debug
        !           948:          being set to a non-zero value, which it is by default.
        !           949:
        !           950:        - A new macro, YY_USER_INIT, is provided for the user to specify
        !           951:          initialization action to be taken on the first call to the
        !           952:          scanner.  This action is done before the scanner does its
        !           953:          own initialization.
        !           954:
        !           955:        - yy_new_buffer() has been added as an alias for yy_create_buffer()
        !           956:
        !           957:        - Comments beginning with '#' and extending to the end of the line
        !           958:          now work, but have been deprecated (in anticipation of making
        !           959:          flex recognize #line directives).
        !           960:
        !           961:        - The funky restrictions on when semi-colons could follow the
        !           962:          YY_NEW_FILE and yyless macros have been removed.  They now
        !           963:          behave identically to functions.
        !           964:
        !           965:        - A bug in the sample redefinition of YY_INPUT in the documentation
        !           966:          has been corrected.
        !           967:
        !           968:        - A bug in the sample simple tokener in the documentation has
        !           969:          been corrected.
        !           970:
        !           971:        - The documentation on the incompatibilities between flex and
        !           972:          lex has been reordered so that the discussion of yylineno
        !           973:          and input() come first, as it's anticipated that these will
        !           974:          be the most common source of headaches.
        !           975:
        !           976:
        !           977: Things which didn't used to be documented but now are:
        !           978:
        !           979:        - flex interprets "^foo|bar" differently from lex.  flex interprets
        !           980:          it as "match either a 'foo' or a 'bar', providing it comes at the
        !           981:          beginning of a line", whereas lex interprets it as "match either
        !           982:          a 'foo' at the beginning of a line, or a 'bar' anywhere".
        !           983:
        !           984:        - flex initializes the global "yyin" on the first call to the
        !           985:          scanner, while lex initializes it at compile-time.
        !           986:
        !           987:        - yy_switch_to_buffer() can be used in the yywrap() macro/routine.
        !           988:
        !           989:        - flex scanners do not use stdio for their input, and hence when
        !           990:          writing an interactive scanner one must explictly call fflush()
        !           991:          after writing out a prompt.
        !           992:
        !           993:        - flex scanner can be made reentrant (after a fashion) by using
        !           994:          "yyrestart( yyin );".  This is useful for interactive scanners
        !           995:          which have interrupt handlers that long-jump out of the scanner.
        !           996:
        !           997:        - a defense of why yylineno is not supported is included, along
        !           998:          with a suggestion on how to convert scanners which rely on it.
        !           999:
        !          1000:
        !          1001: Other changes:
        !          1002:
        !          1003:        - Prototypes and proper declarations of void routines have
        !          1004:          been added to the flex source code, courtesy of Kevin B. Kenny.
        !          1005:
        !          1006:        - Routines dealing with memory allocation now use void* pointers
        !          1007:          instead of char* - see Makefile for porting implications.
        !          1008:
        !          1009:        - Error-checking is now done when flex closes a file.
        !          1010:
        !          1011:        - Various lint tweaks were added to reduce the number of gripes.
        !          1012:
        !          1013:        - Makefile has been further parameterized to aid in porting.
        !          1014:
        !          1015:        - Support for SCO Unix added.
        !          1016:
        !          1017:        - Flex now sports the latest & greatest UC copyright notice
        !          1018:          (which is only slightly different from the previous one).
        !          1019:
        !          1020:        - A note has been added to flexdoc.1 mentioning work in progress
        !          1021:          on modifying flex to generate straight C code rather than a
        !          1022:          table-driven automaton, with an email address of whom to contact
        !          1023:          if you are working along similar lines.
        !          1024:
        !          1025:
        !          1026: Changes between 2.2 Patch #3 (30Mar90) and 2.2 Patch #2:
        !          1027:
        !          1028:        - fixed bug which caused -I scanners to bomb
        !          1029:
        !          1030:
        !          1031: Changes between 2.2 Patch #2 (27Mar90) and 2.2 Patch #1:
        !          1032:
        !          1033:        - fixed bug writing past end of input buffer in yyunput()
        !          1034:        - fixed bug detecting NUL's at the end of a buffer
        !          1035:
        !          1036:
        !          1037: Changes between 2.2 Patch #1 (23Mar90) and 2.2 (alpha) release:
        !          1038:
        !          1039:        - Makefile fixes: definition of MAKE variable for systems
        !          1040:          which don't have it; installation of flexdoc.1 along with
        !          1041:          flex.1; fixed two bugs which could cause "bigtest" to fail.
        !          1042:
        !          1043:        - flex.skel fix for compiling with g++.
        !          1044:
        !          1045:        - README and flexdoc.1 no longer list an out-of-date BITNET address
        !          1046:          for contacting me.
        !          1047:
        !          1048:        - minor typos and formatting changes to flex.1 and flexdoc.1.
        !          1049:
        !          1050:
        !          1051: Changes between 2.2 (alpha) release of March '90 and previous release:
        !          1052:
        !          1053: User-visible:
        !          1054:
        !          1055:        - Full user documentation now available.
        !          1056:
        !          1057:        - Support for 8-bit scanners.
        !          1058:
        !          1059:        - Scanners now accept NUL's.
        !          1060:
        !          1061:        - A facility has been added for dealing with multiple
        !          1062:          input buffers.
        !          1063:
        !          1064:        - Two manual entries now.  One which fully describes flex
        !          1065:          (rather than just its differences from lex), and the
        !          1066:          other for quick(er) reference.
        !          1067:
        !          1068:        - A number of changes to bring flex closer into compliance
        !          1069:          with the latest POSIX lex draft:
        !          1070:
        !          1071:                %t support
        !          1072:                flex now accepts multiple input files and concatenates
        !          1073:                    them together to form its input
        !          1074:                previous -c (compress) flag renamed -C
        !          1075:                do-nothing -c and -n flags added
        !          1076:                Any indented code or code within %{}'s in section 2 is
        !          1077:                    now copied to the output
        !          1078:
        !          1079:        - yyleng is now a bona fide global integer.
        !          1080:
        !          1081:        - -d debug information now gives the line number of the
        !          1082:          matched rule instead of which number rule it was from
        !          1083:          the beginning of the file.
        !          1084:
        !          1085:        - -v output now includes a summary of the flags used to generate
        !          1086:          the scanner.
        !          1087:
        !          1088:        - unput() and yyrestart() are now globally callable.
        !          1089:
        !          1090:        - yyrestart() no longer closes the previous value of yyin.
        !          1091:
        !          1092:        - C++ support; generated scanners can be compiled with C++ compiler.
        !          1093:
        !          1094:        - Primitive -lfl library added, containing default main()
        !          1095:          which calls yylex().  A number of routines currently living
        !          1096:          in the scanner skeleton will probably migrate to here
        !          1097:          in the future (in particular, yywrap() will probably cease
        !          1098:          to be a macro and instead be a function in the -lfl library).
        !          1099:
        !          1100:        - Hexadecimal (\x) escape sequences added.
        !          1101:
        !          1102:        - Support for MS-DOS, VMS, and Turbo-C integrated.
        !          1103:
        !          1104:        - The %used/%unused operators have been deprecated.  They
        !          1105:          may go away soon.
        !          1106:
        !          1107:
        !          1108: Other changes:
        !          1109:
        !          1110:        - Makefile enhanced for easier testing and installation.
        !          1111:        - The parser has been tweaked to detect some erroneous
        !          1112:          constructions which previously were missed.
        !          1113:        - Scanner input buffer overflow is now detected.
        !          1114:        - Bugs with missing "const" declarations fixed.
        !          1115:        - Out-of-date Minix/Atari patches provided.
        !          1116:        - Scanners no longer require printf() unless FLEX_DEBUG is being used.
        !          1117:        - A subtle input() bug has been fixed.
        !          1118:        - Line numbers for "continued action" rules (those following
        !          1119:          the special '|' action) are now correct.
        !          1120:        - unput() bug fixed; had been causing problems porting flex to VMS.
        !          1121:        - yymore() handling rewritten to fix bug with interaction
        !          1122:          between yymore() and trailing context.
        !          1123:        - EOF in actions now generates an error message.
        !          1124:        - Bug involving -CFe and generating equivalence classes fixed.
        !          1125:        - Bug which made -CF be treated as -Cf fixed.
        !          1126:        - Support for SysV tmpnam() added.
        !          1127:        - Unused #define's for scanner no longer generated.
        !          1128:        - Error messages which are associated with a particular input
        !          1129:          line are now all identified with their input line in standard
        !          1130:          format.
        !          1131:        - % directives which are valid to lex but not to flex are
        !          1132:          now ignored instead of generating warnings.
        !          1133:        - -DSYS_V flag can now also be specified -DUSG for System V
        !          1134:          compilation.
        !          1135:
        !          1136:
        !          1137: Changes between 2.1 beta-test release of June '89 and previous release:
        !          1138:
        !          1139: User-visible:
        !          1140:
        !          1141:        - -p flag generates a performance report to stderr.  The report
        !          1142:          consists of comments regarding features of the scanner rules
        !          1143:          which result in slower scanners.
        !          1144:
        !          1145:        - -b flag generates backtracking information to lex.backtrack.
        !          1146:          This is a list of scanner states which require backtracking
        !          1147:          and the characters on which they do so.  By adding rules
        !          1148:          one can remove backtracking states.  If all backtracking states
        !          1149:          are eliminated, the generated scanner will run faster.
        !          1150:          Backtracking is not yet documented in the manual entry.
        !          1151:
        !          1152:        - Variable trailing context now works, i.e., one can have
        !          1153:          rules like "(foo)*/[ \t]*bletch".  Some trailing context
        !          1154:          patterns still cannot be properly matched and generate
        !          1155:          error messages.  These are patterns where the ending of the
        !          1156:          first part of the rule matches the beginning of the second
        !          1157:          part, such as "zx*/xy*", where the 'x*' matches the 'x' at
        !          1158:          the beginning of the trailing context.  Lex won't get these
        !          1159:          patterns right either.
        !          1160:
        !          1161:        - Faster scanners.
        !          1162:
        !          1163:        - End-of-file rules.  The special rule "<<EOF>>" indicates
        !          1164:          actions which are to be taken when an end-of-file is
        !          1165:          encountered and yywrap() returns non-zero (i.e., indicates
        !          1166:          no further files to process).  See manual entry for example.
        !          1167:
        !          1168:        - The -r (reject used) flag is gone.  flex now scans the input
        !          1169:          for occurrences of the string "REJECT" to determine if the
        !          1170:          action is needed.  It tries to be intelligent about this but
        !          1171:          can be fooled.  One can force the presence or absence of
        !          1172:          REJECT by adding a line in the first section of the form
        !          1173:          "%used REJECT" or "%unused REJECT".
        !          1174:
        !          1175:        - yymore() has been implemented.  Similarly to REJECT, flex
        !          1176:          detects the use of yymore(), which can be overridden using
        !          1177:          "%used" or "%unused".
        !          1178:
        !          1179:        - Patterns like "x{0,3}" now work (i.e., with lower-limit == 0).
        !          1180:
        !          1181:        - Removed '\^x' for ctrl-x misfeature.
        !          1182:
        !          1183:        - Added '\a' and '\v' escape sequences.
        !          1184:
        !          1185:        - \<digits> now works for octal escape sequences; previously
        !          1186:          \0<digits> was required.
        !          1187:
        !          1188:        - Better error reporting; line numbers are associated with rules.
        !          1189:
        !          1190:        - yyleng is a macro; it cannot be accessed outside of the
        !          1191:          scanner source file.
        !          1192:
        !          1193:        - yytext and yyleng should not be modified within a flex action.
        !          1194:
        !          1195:        - Generated scanners #define the name FLEX_SCANNER.
        !          1196:
        !          1197:        - Rules are internally separated by YY_BREAK in lex.yy.c rather
        !          1198:          than break, to allow redefinition.
        !          1199:
        !          1200:        - The macro YY_USER_ACTION can be redefined to provide an action
        !          1201:          which is always executed prior to the matched rule's action.
        !          1202:
        !          1203:        - yyrestart() is a new action which can be used to restart
        !          1204:          the scanner after it has seen an end-of-file (a "real" one,
        !          1205:          that is, one for which yywrap() returned non-zero).  It takes
        !          1206:          a FILE* argument indicating a new file to scan and sets
        !          1207:          things up so that a subsequent call to yylex() will start
        !          1208:          scanning that file.
        !          1209:
        !          1210:        - Internal scanner names all preceded by "yy_"
        !          1211:
        !          1212:        - lex.yy.c is deleted if errors are encountered during processing.
        !          1213:
        !          1214:        - Comments may be put in the first section of the input by preceding
        !          1215:          them with '#'.
        !          1216:
        !          1217:
        !          1218:
        !          1219: Other changes:
        !          1220:
        !          1221:        - Some portability-related bugs fixed, in particular for machines
        !          1222:          with unsigned characters or sizeof( int* ) != sizeof( int ).
        !          1223:          Also, tweaks for VMS and Microsoft C (MS-DOS), and identifiers all
        !          1224:          trimmed to be 31 or fewer characters.  Shortened file names
        !          1225:          for dinosaur OS's.  Checks for allocating > 64K memory
        !          1226:          on 16 bit'ers.  Amiga tweaks.  Compiles using gcc on a Sun-3.
        !          1227:        - Compressed and fast scanner skeletons merged.
        !          1228:        - Skeleton header files done away with.
        !          1229:        - Generated scanner uses prototypes and "const" for __STDC__.
        !          1230:        - -DSV flag is now -DSYS_V for System V compilation.
        !          1231:        - Removed all references to FTL language.
        !          1232:        - Software now covered by BSD Copyright.
        !          1233:        - flex will replace lex in subsequent BSD releases.