1Changes 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
12Changes 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
28Changes 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
95Changes 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
534Changes 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
550Changes 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
560Changes 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
587Changes 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
608Changes 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 <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
635Changes 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
643Changes 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
865Changes 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
889Changes 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
897Changes 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
905Changes 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
911Changes 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
918Changes 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
924Changes 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
937Changes between 2.3 (full) release of 28Jun90 and 2.2 (alpha) release:
938
939User-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 contingent 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
977Things 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 explicitly 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
1001Other 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
1026Changes between 2.2 Patch #3 (30Mar90) and 2.2 Patch #2:
1027
1028	- fixed bug which caused -I scanners to bomb
1029
1030
1031Changes 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
1037Changes 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
1051Changes between 2.2 (alpha) release of March '90 and previous release:
1052
1053User-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
1108Other 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
1137Changes between 2.1 beta-test release of June '89 and previous release:
1138
1139User-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
1219Other 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.
1234