| 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. | 
|---|