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.