3 .TH FLEX 1 "April 1995" "Version 2.5"
5 flex \- fast lexical analyzer generator
8 .B [\-bcdfhilnpstvwBFILTV78+? \-C[aefFmr] \-ooutput \-Pprefix \-Sskeleton]
9 .B [\-\-help \-\-version]
14 a tool for generating programs that perform pattern-matching on text. The
15 manual includes both tutorial and reference sections:
19 a brief overview of the tool
23 Format Of The Input File
26 the extended regular expressions used by flex
28 How The Input Is Matched
29 the rules for determining what has been matched
32 how to specify what to do when a pattern is matched
35 details regarding the scanner that flex produces;
36 how to control the input source
39 introducing context into your scanners, and
40 managing "mini-scanners"
42 Multiple Input Buffers
43 how to manipulate multiple input sources; how to
44 scan from strings instead of files
47 special rules for matching the end of the input
50 a summary of macros available to the actions
52 Values Available To The User
53 a summary of values available to the actions
56 connecting flex scanners together with yacc parsers
59 flex command-line options, and the "%option"
62 Performance Considerations
63 how to make your scanner go as fast as possible
65 Generating C++ Scanners
66 the (experimental) facility for generating C++
69 Incompatibilities With Lex And POSIX
70 how flex differs from AT&T lex and the POSIX lex
74 those error messages produced by flex (or scanners
75 it generates) whose meanings might not be apparent
81 known problems with flex
84 other documentation, related tools
87 includes contact information
92 is a tool for generating
94 programs which recognize lexical patterns in text.
97 the given input files, or its standard input if no file names are given,
98 for a description of a scanner to generate. The description is in
100 of regular expressions and C code, called
102 generates as output a C source file,
104 which defines a routine
106 This file is compiled and linked with the
108 library to produce an executable. When the executable is run,
109 it analyzes its input for occurrences
110 of the regular expressions. Whenever it finds one, it executes
111 the corresponding C code.
112 .SH SOME SIMPLE EXAMPLES
113 First some simple examples to get the flavor of how one uses
117 input specifies a scanner which whenever it encounters the string
118 "username" will replace it with the user's login name:
122 username printf( "%s", getlogin() );
125 By default, any text not matched by a
128 is copied to the output, so the net effect of this scanner is
129 to copy its input file to its output with each occurrence
130 of "username" expanded.
131 In this input, there is just one rule. "username" is the
133 and the "printf" is the
135 The "%%" marks the beginning of the rules.
137 Here's another simple example:
141 int num_lines = 0, num_chars = 0;
145 \\n ++num_lines; ++num_chars;
152 printf( "# of lines = %d, # of chars = %d\\n",
153 num_lines, num_chars );
157 This scanner counts the number of characters and the number
158 of lines in its input (it produces no output other than the
159 final report on the counts). The first line
160 declares two globals, "num_lines" and "num_chars", which are accessible
165 routine declared after the second "%%". There are two rules, one
166 which matches a newline ("\\n") and increments both the line count and
167 the character count, and one which matches any character other than
168 a newline (indicated by the "." regular expression).
170 A somewhat more complicated example:
173 /* scanner for a toy Pascal-like language */
176 /* need this for the call to atof() below */
186 printf( "An integer: %s (%d)\\n", yytext,
190 {DIGIT}+"."{DIGIT}* {
191 printf( "A float: %s (%g)\\n", yytext,
195 if|then|begin|end|procedure|function {
196 printf( "A keyword: %s\\n", yytext );
199 {ID} printf( "An identifier: %s\\n", yytext );
201 "+"|"-"|"*"|"/" printf( "An operator: %s\\n", yytext );
203 "{"[^}\\n]*"}" /* eat up one-line comments */
205 [ \\t\\n]+ /* eat up whitespace */
207 . printf( "Unrecognized character: %s\\n", yytext );
215 ++argv, --argc; /* skip over program name */
217 yyin = fopen( argv[0], "r" );
225 This is the beginnings of a simple scanner for a language like
226 Pascal. It identifies different types of
228 and reports on what it has seen.
230 The details of this example will be explained in the following
232 .SH FORMAT OF THE INPUT FILE
235 input file consists of three sections, separated by a line with just
249 section contains declarations of simple
251 definitions to simplify the scanner specification, and declarations of
253 which are explained in a later section.
255 Name definitions have the form:
261 The "name" is a word beginning with a letter or an underscore ('_')
262 followed by zero or more letters, digits, '_', or '-' (dash).
263 The definition is taken to begin at the first non-white-space character
264 following the name and continuing to the end of the line.
265 The definition can subsequently be referred to using "{name}", which
266 will expand to "(definition)". For example,
273 defines "DIGIT" to be a regular expression which matches a
275 "ID" to be a regular expression which matches a letter
276 followed by zero-or-more letters-or-digits.
277 A subsequent reference to
289 and matches one-or-more digits followed by a '.' followed
290 by zero-or-more digits.
296 input contains a series of rules of the form:
302 where the pattern must be unindented and the action must begin
305 See below for a further description of patterns and actions.
307 Finally, the user code section is simply copied to
310 It is used for companion routines which call or are called
311 by the scanner. The presence of this section is optional;
312 if it is missing, the second
314 in the input file may be skipped, too.
316 In the definitions and rules sections, any
318 text or text enclosed in
322 is copied verbatim to the output (with the %{}'s removed).
323 The %{}'s must appear unindented on lines by themselves.
325 In the rules section,
326 any indented or %{} text appearing before the
327 first rule may be used to declare variables
328 which are local to the scanning routine and (after the declarations)
329 code which is to be executed whenever the scanning routine is entered.
330 Other indented or %{} text in the rule section is still copied to the output,
331 but its meaning is not well-defined and it may well cause compile-time
332 errors (this feature is present for
334 compliance; see below for other such features).
336 In the definitions section (but not in the rules section),
337 an unindented comment (i.e., a line
338 beginning with "/*") is also copied verbatim to the output up
341 The patterns in the input are written using an extended set of regular
342 expressions. These are:
345 x match the character 'x'
346 . any character (byte) except newline
347 [xyz] a "character class"; in this case, the pattern
348 matches either an 'x', a 'y', or a 'z'
349 [abj-oZ] a "character class" with a range in it; matches
350 an 'a', a 'b', any letter from 'j' through 'o',
352 [^A-Z] a "negated character class", i.e., any character
353 but those in the class. In this case, any
354 character EXCEPT an uppercase letter.
355 [^A-Z\\n] any character EXCEPT an uppercase letter or
357 r* zero or more r's, where r is any regular expression
359 r? zero or one r's (that is, "an optional r")
360 r{2,5} anywhere from two to five r's
361 r{2,} two or more r's
363 {name} the expansion of the "name" definition
366 the literal string: [xyz]"foo
367 \\X if X is an 'a', 'b', 'f', 'n', 'r', 't', or 'v',
368 then the ANSI-C interpretation of \\x.
369 Otherwise, a literal 'X' (used to escape
370 operators such as '*')
371 \\0 a NUL character (ASCII code 0)
372 \\123 the character with octal value 123
373 \\x2a the character with hexadecimal value 2a
374 (r) match an r; parentheses are used to override
375 precedence (see below)
378 rs the regular expression r followed by the
379 regular expression s; called "concatenation"
382 r|s either an r or an s
385 r/s an r but only if it is followed by an s. The
386 text matched by s is included when determining
387 whether this rule is the "longest match",
388 but is then returned to the input before
389 the action is executed. So the action only
390 sees the text matched by r. This type
391 of pattern is called trailing context".
392 (There are some combinations of r/s that flex
393 cannot match correctly; see notes in the
394 Deficiencies / Bugs section below regarding
395 "dangerous trailing context".)
396 ^r an r, but only at the beginning of a line (i.e.,
397 when just starting to scan, or right after a
398 newline has been scanned).
399 r$ an r, but only at the end of a line (i.e., just
400 before a newline). Equivalent to "r/\\n".
402 Note that flex's notion of "newline" is exactly
403 whatever the C compiler used to compile flex
404 interprets '\\n' as; in particular, on some DOS
405 systems you must either filter out \\r's in the
406 input yourself, or explicitly use r/\\r\\n for "r$".
409 <s>r an r, but only in start condition s (see
410 below for discussion of start conditions)
412 same, but in any of start conditions s1,
414 <*>r an r in any start condition, even an exclusive one.
417 <<EOF>> an end-of-file
419 an end-of-file when in start condition s1 or s2
422 Note that inside of a character class, all regular expression operators
423 lose their special meaning except escape ('\\') and the character class
424 operators, '-', ']', and, at the beginning of the class, '^'.
426 The regular expressions listed above are grouped according to
427 precedence, from highest precedence at the top to lowest at the bottom.
428 Those grouped together have equal precedence. For example,
440 since the '*' operator has higher precedence than concatenation,
441 and concatenation higher than alternation ('|'). This pattern
446 the string "ba" followed by zero-or-more r's.
447 To match "foo" or zero-or-more "bar"'s, use:
453 and to match zero-or-more "foo"'s-or-"bar"'s:
460 In addition to characters and ranges of characters, character classes
461 can also contain character class
463 These are expressions enclosed inside
467 delimiters (which themselves must appear between the '[' and ']' of the
468 character class; other elements may occur inside the character class, too).
469 The valid expressions are:
472 [:alnum:] [:alpha:] [:blank:]
473 [:cntrl:] [:digit:] [:graph:]
474 [:lower:] [:print:] [:punct:]
475 [:space:] [:upper:] [:xdigit:]
478 These expressions all designate a set of characters equivalent to
479 the corresponding standard C
481 function. For example,
483 designates those characters for which
485 returns true - i.e., any alphabetic or numeric.
486 Some systems don't provide
492 For example, the following character classes are all equivalent:
501 If your scanner is case-insensitive (the
510 Some notes on patterns:
512 A negated character class such as the example "[^A-Z]"
514 .I will match a newline
515 unless "\\n" (or an equivalent escape sequence) is one of the
516 characters explicitly present in the negated character class
517 (e.g., "[^A-Z\\n]"). This is unlike how many other regular
518 expression tools treat negated character classes, but unfortunately
519 the inconsistency is historically entrenched.
520 Matching newlines means that a pattern like [^"]* can match the entire
521 input unless there's another quote in the input.
523 A rule can have at most one instance of trailing context (the '/' operator
524 or the '$' operator). The start condition, '^', and "<<EOF>>" patterns
525 can only occur at the beginning of a pattern, and, as well as with '/' and '$',
526 cannot be grouped inside parentheses. A '^' which does not occur at
527 the beginning of a rule or a '$' which does not occur at the end of
528 a rule loses its special properties and is treated as a normal character.
530 The following are illegal:
537 Note that the first of these, can be written "foo/bar\\n".
539 The following will result in '$' or '^' being treated as a normal character:
546 If what's wanted is a "foo" or a bar-followed-by-a-newline, the following
547 could be used (the special '|' action is explained below):
551 bar$ /* action goes here */
554 A similar trick will work for matching a foo or a
555 bar-at-the-beginning-of-a-line.
556 .SH HOW THE INPUT IS MATCHED
557 When the generated scanner is run, it analyzes its input looking
558 for strings which match any of its patterns. If it finds more than
559 one match, it takes the one matching the most text (for trailing
560 context rules, this includes the length of the trailing part, even
561 though it will then be returned to the input). If it finds two
562 or more matches of the same length, the
563 rule listed first in the
565 input file is chosen.
567 Once the match is determined, the text corresponding to the match
570 is made available in the global character pointer
572 and its length in the global integer
576 corresponding to the matched pattern is then executed (a more
577 detailed description of actions follows), and then the remaining
578 input is scanned for another match.
580 If no match is found, then the
582 is executed: the next character in the input is considered matched and
583 copied to the standard output. Thus, the simplest legal
591 which generates a scanner that simply copies its input (one character
592 at a time) to its output.
596 can be defined in two different ways: either as a character
600 You can control which definition
602 uses by including one of the special directives
606 in the first (definitions) section of your flex input. The default is
610 lex compatibility option, in which case
613 The advantage of using
615 is substantially faster scanning and no buffer overflow when matching
616 very large tokens (unless you run out of dynamic memory). The disadvantage
617 is that you are restricted in how your actions can modify
619 (see the next section), and calls to the
621 function destroys the present contents of
623 which can be a considerable porting headache when moving between different
629 is that you can then modify
631 to your heart's content, and calls to
635 (see below). Furthermore, existing
637 programs sometimes access
639 externally using declarations of the form:
641 extern char yytext[];
643 This definition is erroneous when used with
653 characters, which defaults to a fairly large value. You can change
654 the size by simply #define'ing
656 to a different value in the first section of your
658 input. As mentioned above, with
660 yytext grows dynamically to accommodate large tokens. While this means your
662 scanner can accommodate very large tokens (such as matching entire blocks
663 of comments), bear in mind that each time the scanner must resize
665 it also must rescan the entire token from the beginning, so matching such
666 tokens can prove slow.
670 dynamically grow if a call to
672 results in too much text being pushed back; instead, a run-time error results.
674 Also note that you cannot use
676 with C++ scanner classes
681 Each pattern in a rule has a corresponding action, which can be any
682 arbitrary C statement. The pattern ends at the first non-escaped
683 whitespace character; the remainder of the line is its action. If the
684 action is empty, then when the pattern is matched the input token
685 is simply discarded. For example, here is the specification for a program
686 which deletes all occurrences of "zap me" from its input:
693 (It will copy all other characters in the input to the output since
694 they will be matched by the default rule.)
696 Here is a program which compresses multiple blanks and tabs down to
697 a single blank, and throws away whitespace found at the end of a line:
701 [ \\t]+ putchar( ' ' );
702 [ \\t]+$ /* ignore this token */
706 If the action contains a '{', then the action spans till the balancing '}'
707 is found, and the action may cross multiple lines.
709 knows about C strings and comments and won't be fooled by braces found
710 within them, but also allows actions to begin with
712 and will consider the action to be all the text up to the next
714 (regardless of ordinary braces inside the action).
716 An action consisting solely of a vertical bar ('|') means "same as
717 the action for the next rule." See below for an illustration.
719 Actions can include arbitrary C code, including
721 statements to return a value to whatever routine called
725 is called it continues processing tokens from where it last left
726 off until it either reaches
727 the end of the file or executes a return.
729 Actions are free to modify
731 except for lengthening it (adding
732 characters to its end--these will overwrite later characters in the
733 input stream). This however does not apply when using
735 (see above); in that case,
737 may be freely modified in any way.
739 Actions are free to modify
741 except they should not do so if the action also includes use of
745 There are a number of special directives which can be included within
749 copies yytext to the scanner's output.
752 followed by the name of a start condition places the scanner in the
753 corresponding start condition (see below).
756 directs the scanner to proceed on to the "second best" rule which matched the
757 input (or a prefix of the input). The rule is chosen as described
758 above in "How the Input is Matched", and
762 set up appropriately.
763 It may either be one which matched as much text
764 as the originally chosen rule but came later in the
766 input file, or one which matched less text.
767 For example, the following will both count the
768 words in the input and call the routine special() whenever "frob" is seen:
774 frob special(); REJECT;
775 [^ \\t\\n]+ ++word_count;
780 any "frob"'s in the input would not be counted as words, since the
781 scanner normally executes only one action per token.
784 are allowed, each one finding the next best choice to the currently
785 active rule. For example, when the following scanner scans the token
786 "abcd", it will write "abcdabcaba" to the output:
794 .|\\n /* eat up any unmatched character */
797 (The first three rules share the fourth's action since they use
798 the special '|' action.)
800 is a particularly expensive feature in terms of scanner performance;
803 of the scanner's actions it will slow down
805 of the scanner's matching. Furthermore,
807 cannot be used with the
813 Note also that unlike the other special actions,
817 code immediately following it in the action will
822 tells the scanner that the next time it matches a rule, the corresponding
825 onto the current value of
827 rather than replacing it. For example, given the input "mega-kludge"
828 the following will write "mega-mega-kludge" to the output:
832 mega- ECHO; yymore();
836 First "mega-" is matched and echoed to the output. Then "kludge"
837 is matched, but the previous "mega-" is still hanging around at the
842 for the "kludge" rule will actually write "mega-kludge".
844 Two notes regarding use of
848 depends on the value of
850 correctly reflecting the size of the current token, so you must not
855 Second, the presence of
857 in the scanner's action entails a minor performance penalty in the
858 scanner's matching speed.
861 returns all but the first
863 characters of the current token back to the input stream, where they
864 will be rescanned when the scanner looks for the next match.
868 are adjusted appropriately (e.g.,
872 ). For example, on the input "foobar" the following will write out
877 foobar ECHO; yyless(3);
883 will cause the entire current input string to be scanned again. Unless you've
884 changed how the scanner will subsequently process its input (using
886 for example), this will result in an endless loop.
890 is a macro and can only be used in the flex input file, not from
896 back onto the input stream. It will be the next character scanned.
897 The following action will take the current token and cause it
898 to be rescanned enclosed in parentheses.
903 /* Copy yytext because unput() trashes yytext */
904 char *yycopy = strdup( yytext );
906 for ( i = yyleng - 1; i >= 0; --i )
915 puts the given character back at the
917 of the input stream, pushing back strings must be done back-to-front.
919 An important potential problem when using
921 is that if you are using
923 (the default), a call to
928 starting with its rightmost character and devouring one character to
929 the left with each call. If you need the value of yytext preserved
932 (as in the above example),
933 you must either first copy it elsewhere, or build your scanner using
935 instead (see How The Input Is Matched).
937 Finally, note that you cannot put back
939 to attempt to mark the input stream with an end-of-file.
942 reads the next character from the input stream. For example,
943 the following is one way to eat up C comments:
952 while ( (c = input()) != '*' &&
954 ; /* eat up text of comment */
958 while ( (c = input()) == '*' )
961 break; /* found the end */
966 error( "EOF in comment" );
973 (Note that if the scanner is compiled using
977 is instead referred to as
979 in order to avoid a name clash with the
981 stream by the name of
985 flushes the scanner's internal buffer
986 so that the next time the scanner attempts to match a token, it will
987 first refill the buffer using
989 (see The Generated Scanner, below). This action is a special case
992 function, described below in the section Multiple Input Buffers.
995 can be used in lieu of a return statement in an action. It terminates
996 the scanner and returns a 0 to the scanner's caller, indicating "all done".
999 is also called when an end-of-file is encountered. It is a macro and
1001 .SH THE GENERATED SCANNER
1006 which contains the scanning routine
1008 a number of tables used by it for matching tokens, and a number
1009 of auxiliary routines and macros. By default,
1011 is declared as follows:
1016 ... various definitions and the actions in here ...
1020 (If your environment supports function prototypes, then it will
1021 be "int yylex( void )".) This definition may be changed by defining
1022 the "YY_DECL" macro. For example, you could use:
1025 #define YY_DECL float lexscan( a, b ) float a, b;
1028 to give the scanning routine the name
1030 returning a float, and taking two floats as arguments. Note that
1031 if you give arguments to the scanning routine using a
1032 K&R-style/non-prototyped function declaration, you must terminate
1033 the definition with a semi-colon (;).
1037 is called, it scans tokens from the global input file
1039 (which defaults to stdin). It continues until it either reaches
1040 an end-of-file (at which point it returns the value 0) or
1041 one of its actions executes a
1045 If the scanner reaches an end-of-file, subsequent calls are undefined
1048 is pointed at a new input file (in which case scanning continues from
1053 takes one argument, a
1055 pointer (which can be nil, if you've set up
1057 to scan from a source other than
1061 for scanning from that file. Essentially there is no difference between
1064 to a new input file or using
1066 to do so; the latter is available for compatibility with previous versions
1069 and because it can be used to switch input files in the middle of scanning.
1070 It can also be used to throw away the current input buffer, by calling
1071 it with an argument of
1073 but better is to use
1080 reset the start condition to
1082 (see Start Conditions, below).
1086 stops scanning due to executing a
1088 statement in one of the actions, the scanner may then be called again and it
1089 will resume scanning where it left off.
1091 By default (and for purposes of efficiency), the scanner uses
1092 block-reads rather than simple
1094 calls to read characters from
1096 The nature of how it gets its input can be controlled by defining the
1099 YY_INPUT's calling sequence is "YY_INPUT(buf,result,max_size)". Its
1100 action is to place up to
1102 characters in the character array
1104 and return in the integer variable
1107 number of characters read or the constant YY_NULL (0 on Unix systems)
1108 to indicate EOF. The default YY_INPUT reads from the
1109 global file-pointer "yyin".
1111 A sample definition of YY_INPUT (in the definitions
1112 section of the input file):
1116 #define YY_INPUT(buf,result,max_size) \\
1118 int c = getchar(); \\
1119 result = (c == EOF) ? YY_NULL : (buf[0] = c, 1); \\
1124 This definition will change the input processing to occur
1125 one character at a time.
1127 When the scanner receives an end-of-file indication from YY_INPUT,
1132 returns false (zero), then it is assumed that the
1133 function has gone ahead and set up
1135 to point to another input file, and scanning continues. If it returns
1136 true (non-zero), then the scanner terminates, returning 0 to its
1137 caller. Note that in either case, the start condition remains unchanged;
1143 If you do not supply your own version of
1145 then you must either use
1147 (in which case the scanner behaves as though
1149 returned 1), or you must link with
1151 to obtain the default version of the routine, which always returns 1.
1153 Three routines are available for scanning from in-memory buffers rather
1155 .B yy_scan_string(), yy_scan_bytes(),
1157 .B yy_scan_buffer().
1158 See the discussion of them below in the section Multiple Input Buffers.
1160 The scanner writes its
1164 global (default, stdout), which may be redefined by the user simply
1165 by assigning it to some other
1168 .SH START CONDITIONS
1170 provides a mechanism for conditionally activating rules. Any rule
1171 whose pattern is prefixed with "<sc>" will only be active when
1172 the scanner is in the start condition named "sc". For example,
1175 <STRING>[^"]* { /* eat up the string body ... */
1180 will be active only when the scanner is in the "STRING" start
1184 <INITIAL,STRING,QUOTE>\\. { /* handle an escape ... */
1189 will be active only when the current start condition is
1190 either "INITIAL", "STRING", or "QUOTE".
1193 are declared in the definitions (first) section of the input
1194 using unindented lines beginning with either
1198 followed by a list of names.
1201 start conditions, the latter
1203 start conditions. A start condition is activated using the
1205 action. Until the next
1207 action is executed, rules with the given start
1208 condition will be active and
1209 rules with other start conditions will be inactive.
1210 If the start condition is
1212 then rules with no start conditions at all will also be active.
1217 rules qualified with the start condition will be active.
1218 A set of rules contingent on the same exclusive start condition
1219 describe a scanner which is independent of any of the other rules in the
1221 input. Because of this,
1222 exclusive start conditions make it easy to specify "mini-scanners"
1223 which scan portions of the input that are syntactically different
1224 from the rest (e.g., comments).
1226 If the distinction between inclusive and exclusive start conditions
1227 is still a little vague, here's a simple example illustrating the
1228 connection between the two. The set of rules:
1234 <example>foo do_something();
1236 bar something_else();
1245 <example>foo do_something();
1247 <INITIAL,example>bar something_else();
1251 .B <INITIAL,example>
1254 pattern in the second example wouldn't be active (i.e., couldn't match)
1255 when in start condition
1261 though, then it would only be active in
1265 while in the first example it's active in both, because in the first
1268 start condition is an
1273 Also note that the special start-condition specifier
1275 matches every start condition. Thus, the above example could also
1282 <example>foo do_something();
1284 <*>bar something_else();
1288 The default rule (to
1290 any unmatched character) remains active in start conditions. It
1299 returns to the original state where only the rules with
1300 no start conditions are active. This state can also be
1301 referred to as the start-condition "INITIAL", so
1305 (The parentheses around the start condition name are not required but
1306 are considered good style.)
1309 actions can also be given as indented code at the beginning
1310 of the rules section. For example, the following will cause
1311 the scanner to enter the "SPECIAL" start condition whenever
1313 is called and the global variable
1322 if ( enter_special )
1325 <SPECIAL>blahblahblah
1326 ...more rules follow...
1330 To illustrate the uses of start conditions,
1331 here is a scanner which provides two different interpretations
1332 of a string like "123.456". By default it will treat it as
1333 three tokens, the integer "123", a dot ('.'), and the integer "456".
1334 But if the string is preceded earlier in the line by the string
1336 it will treat it as a single token, the floating-point number
1346 expect-floats BEGIN(expect);
1348 <expect>[0-9]+"."[0-9]+ {
1349 printf( "found a float, = %f\\n",
1353 /* that's the end of the line, so
1354 * we need another "expect-number"
1355 * before we'll recognize any more
1362 printf( "found an integer, = %d\\n",
1366 "." printf( "found a dot\\n" );
1369 Here is a scanner which recognizes (and discards) C comments while
1370 maintaining a count of the current input line.
1377 "/*" BEGIN(comment);
1379 <comment>[^*\\n]* /* eat anything that's not a '*' */
1380 <comment>"*"+[^*/\\n]* /* eat up '*'s not followed by '/'s */
1381 <comment>\\n ++line_num;
1382 <comment>"*"+"/" BEGIN(INITIAL);
1385 This scanner goes to a bit of trouble to match as much
1386 text as possible with each rule. In general, when attempting to write
1387 a high-speed scanner try to match as much possible in each rule, as
1390 Note that start-conditions names are really integer values and
1391 can be stored as such. Thus, the above could be extended in the
1401 comment_caller = INITIAL;
1408 comment_caller = foo;
1412 <comment>[^*\\n]* /* eat anything that's not a '*' */
1413 <comment>"*"+[^*/\\n]* /* eat up '*'s not followed by '/'s */
1414 <comment>\\n ++line_num;
1415 <comment>"*"+"/" BEGIN(comment_caller);
1418 Furthermore, you can access the current start condition using
1421 macro. For example, the above assignments to
1423 could instead be written
1426 comment_caller = YY_START;
1433 (since that is what's used by AT&T
1436 Note that start conditions do not have their own name-space; %s's and %x's
1437 declare names in the same fashion as #define's.
1439 Finally, here's an example of how to match C-style quoted strings using
1440 exclusive start conditions, including expanded escape sequences (but
1441 not including checking for a string that's too long):
1447 char string_buf[MAX_STR_CONST];
1448 char *string_buf_ptr;
1451 \\" string_buf_ptr = string_buf; BEGIN(str);
1453 <str>\\" { /* saw closing quote - all done */
1455 *string_buf_ptr = '\\0';
1456 /* return string constant token type and
1462 /* error - unterminated string constant */
1463 /* generate error message */
1466 <str>\\\\[0-7]{1,3} {
1467 /* octal escape sequence */
1470 (void) sscanf( yytext + 1, "%o", &result );
1472 if ( result > 0xff )
1473 /* error, constant is out-of-bounds */
1475 *string_buf_ptr++ = result;
1479 /* generate error - bad escape sequence; something
1480 * like '\\48' or '\\0777777'
1484 <str>\\\\n *string_buf_ptr++ = '\\n';
1485 <str>\\\\t *string_buf_ptr++ = '\\t';
1486 <str>\\\\r *string_buf_ptr++ = '\\r';
1487 <str>\\\\b *string_buf_ptr++ = '\\b';
1488 <str>\\\\f *string_buf_ptr++ = '\\f';
1490 <str>\\\\(.|\\n) *string_buf_ptr++ = yytext[1];
1492 <str>[^\\\\\\n\\"]+ {
1493 char *yptr = yytext;
1496 *string_buf_ptr++ = *yptr++;
1501 Often, such as in some of the examples above, you wind up writing a
1502 whole bunch of rules all preceded by the same start condition(s). Flex
1503 makes this a little easier and cleaner by introducing a notion of
1506 A start condition scope is begun with:
1514 is a list of one or more start conditions. Inside the start condition
1515 scope, every rule automatically has the prefix
1517 applied to it, until a
1519 which matches the initial
1525 "\\\\n" return '\\n';
1526 "\\\\r" return '\\r';
1527 "\\\\f" return '\\f';
1528 "\\\\0" return '\\0';
1535 <ESC>"\\\\n" return '\\n';
1536 <ESC>"\\\\r" return '\\r';
1537 <ESC>"\\\\f" return '\\f';
1538 <ESC>"\\\\0" return '\\0';
1541 Start condition scopes may be nested.
1543 Three routines are available for manipulating stacks of start conditions:
1545 .B void yy_push_state(int new_state)
1546 pushes the current start condition onto the top of the start condition
1547 stack and switches to
1549 as though you had used
1551 (recall that start condition names are also integers).
1553 .B void yy_pop_state()
1554 pops the top of the stack and switches to it via
1557 .B int yy_top_state()
1558 returns the top of the stack without altering the stack's contents.
1560 The start condition stack grows dynamically and so has no built-in
1561 size limitation. If memory is exhausted, program execution aborts.
1563 To use start condition stacks, your scanner must include a
1565 directive (see Options below).
1566 .SH MULTIPLE INPUT BUFFERS
1567 Some scanners (such as those which support "include" files)
1568 require reading from several input streams. As
1570 scanners do a large amount of buffering, one cannot control
1571 where the next input will be read from by simply writing a
1573 which is sensitive to the scanning context.
1575 is only called when the scanner reaches the end of its buffer, which
1576 may be a long time after scanning a statement such as an "include"
1577 which requires switching the input source.
1579 To negotiate these sorts of problems,
1581 provides a mechanism for creating and switching between multiple
1582 input buffers. An input buffer is created by using:
1585 YY_BUFFER_STATE yy_create_buffer( FILE *file, int size )
1590 pointer and a size and creates a buffer associated with the given
1591 file and large enough to hold
1593 characters (when in doubt, use
1595 for the size). It returns a
1597 handle, which may then be passed to other routines (see below). The
1599 type is a pointer to an opaque
1600 .B struct yy_buffer_state
1601 structure, so you may safely initialize YY_BUFFER_STATE variables to
1602 .B ((YY_BUFFER_STATE) 0)
1603 if you wish, and also refer to the opaque structure in order to
1604 correctly declare input buffers in source files other than that
1605 of your scanner. Note that the
1607 pointer in the call to
1609 is only used as the value of
1615 so it no longer uses
1617 then you can safely pass a nil
1620 .B yy_create_buffer.
1621 You select a particular buffer to scan from using:
1624 void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
1627 switches the scanner's input buffer so subsequent tokens will
1631 .B yy_switch_to_buffer()
1632 may be used by yywrap() to set things up for continued scanning, instead
1633 of opening a new file and pointing
1635 at it. Note also that switching input sources via either
1636 .B yy_switch_to_buffer()
1641 change the start condition.
1644 void yy_delete_buffer( YY_BUFFER_STATE buffer )
1647 is used to reclaim the storage associated with a buffer. (
1649 can be nil, in which case the routine does nothing.)
1650 You can also clear the current contents of a buffer using:
1653 void yy_flush_buffer( YY_BUFFER_STATE buffer )
1656 This function discards the buffer's contents,
1657 so the next time the scanner attempts to match a token from the
1658 buffer, it will first fill the buffer anew using
1663 .B yy_create_buffer(),
1664 provided for compatibility with the C++ use of
1668 for creating and destroying dynamic objects.
1671 .B YY_CURRENT_BUFFER
1674 handle to the current buffer.
1676 Here is an example of using these features for writing a scanner
1677 which expands include files (the
1679 feature is discussed below):
1682 /* the "incl" state is used for picking up the name
1683 * of an include file
1688 #define MAX_INCLUDE_DEPTH 10
1689 YY_BUFFER_STATE include_stack[MAX_INCLUDE_DEPTH];
1690 int include_stack_ptr = 0;
1694 include BEGIN(incl);
1697 [^a-z\\n]*\\n? ECHO;
1699 <incl>[ \\t]* /* eat the whitespace */
1700 <incl>[^ \\t\\n]+ { /* got the include file name */
1701 if ( include_stack_ptr >= MAX_INCLUDE_DEPTH )
1703 fprintf( stderr, "Includes nested too deeply" );
1707 include_stack[include_stack_ptr++] =
1710 yyin = fopen( yytext, "r" );
1715 yy_switch_to_buffer(
1716 yy_create_buffer( yyin, YY_BUF_SIZE ) );
1722 if ( --include_stack_ptr < 0 )
1729 yy_delete_buffer( YY_CURRENT_BUFFER );
1730 yy_switch_to_buffer(
1731 include_stack[include_stack_ptr] );
1736 Three routines are available for setting up input buffers for
1737 scanning in-memory strings instead of files. All of them create
1738 a new input buffer for scanning the string, and return a corresponding
1740 handle (which you should delete with
1741 .B yy_delete_buffer()
1742 when done with it). They also switch to the new buffer using
1743 .B yy_switch_to_buffer(),
1746 will start scanning the string.
1748 .B yy_scan_string(const char *str)
1749 scans a NUL-terminated string.
1751 .B yy_scan_bytes(const char *bytes, int len)
1754 bytes (including possibly NUL's)
1755 starting at location
1758 Note that both of these functions create and scan a
1760 of the string or bytes. (This may be desirable, since
1762 modifies the contents of the buffer it is scanning.) You can avoid the
1765 .B yy_scan_buffer(char *base, yy_size_t size)
1766 which scans in place the buffer starting at
1770 bytes, the last two bytes of which
1773 .B YY_END_OF_BUFFER_CHAR
1775 These last two bytes are not scanned; thus, scanning
1782 If you fail to set up
1784 in this manner (i.e., forget the final two
1785 .B YY_END_OF_BUFFER_CHAR
1788 returns a nil pointer instead of creating a new input buffer.
1792 is an integral type to which you can cast an integer expression
1793 reflecting the size of the buffer.
1794 .SH END-OF-FILE RULES
1795 The special rule "<<EOF>>" indicates
1796 actions which are to be taken when an end-of-file is
1797 encountered and yywrap() returns non-zero (i.e., indicates
1798 no further files to process). The action must finish
1799 by doing one of four things:
1803 to a new input file (in previous versions of flex, after doing the
1804 assignment you had to call the special action
1806 this is no longer necessary);
1812 executing the special
1816 or, switching to a new buffer using
1817 .B yy_switch_to_buffer()
1818 as shown in the example above.
1820 <<EOF>> rules may not be used with other
1821 patterns; they may only be qualified with a list of start
1822 conditions. If an unqualified <<EOF>> rule is given, it
1825 start conditions which do not already have <<EOF>> actions. To
1826 specify an <<EOF>> rule for only the initial start condition, use
1833 These rules are useful for catching things like unclosed comments.
1840 ...other rules for dealing with quotes...
1843 error( "unterminated quote" );
1848 yyin = fopen( *filelist, "r" );
1854 .SH MISCELLANEOUS MACROS
1857 can be defined to provide an action
1858 which is always executed prior to the matched rule's action. For example,
1859 it could be #define'd to call a routine to convert yytext to lower-case.
1862 is invoked, the variable
1864 gives the number of the matched rule (rules are numbered starting with 1).
1865 Suppose you want to profile how often each of your rules is matched. The
1866 following would do the trick:
1869 #define YY_USER_ACTION ++ctr[yy_act]
1874 is an array to hold the counts for the different rules. Note that
1877 gives the total number of rules (including the default rule, even if
1880 so a correct declaration for
1885 int ctr[YY_NUM_RULES];
1891 may be defined to provide an action which is always executed before
1892 the first scan (and before the scanner's internal initializations are done).
1893 For example, it could be used to call a routine to read
1894 in a data table or open a logging file.
1897 .B yy_set_interactive(is_interactive)
1898 can be used to control whether the current buffer is considered
1900 An interactive buffer is processed more slowly,
1901 but must be used when the scanner's input source is indeed
1902 interactive to avoid problems due to waiting to fill buffers
1903 (see the discussion of the
1905 flag below). A non-zero value
1906 in the macro invocation marks the buffer as interactive, a zero
1907 value as non-interactive. Note that use of this macro overrides
1908 .B %option interactive ,
1909 .B %option always-interactive
1911 .B %option never-interactive
1912 (see Options below).
1913 .B yy_set_interactive()
1914 must be invoked prior to beginning to scan the buffer that is
1915 (or is not) to be considered interactive.
1918 .B yy_set_bol(at_bol)
1919 can be used to control whether the current buffer's scanning
1920 context for the next token match is done as though at the
1921 beginning of a line. A non-zero macro argument makes rules anchored with
1922 \&'^' active, while a zero argument makes '^' rules inactive.
1926 returns true if the next token scanned from the current buffer
1927 will have '^' rules active, false otherwise.
1929 In the generated scanner, the actions are all gathered in one large
1930 switch statement and separated using
1932 which may be redefined. By default, it is simply a "break", to separate
1933 each rule's action from the following rule's.
1936 allows, for example, C++ users to
1937 #define YY_BREAK to do nothing (while being very careful that every
1938 rule ends with a "break" or a "return"!) to avoid suffering from
1939 unreachable statement warnings where because a rule's action ends with
1943 .SH VALUES AVAILABLE TO THE USER
1944 This section summarizes the various values available to the user
1945 in the rule actions.
1948 holds the text of the current token. It may be modified but not lengthened
1949 (you cannot append characters to the end).
1951 If the special directive
1953 appears in the first section of the scanner description, then
1956 .B char yytext[YYLMAX],
1959 is a macro definition that you can redefine in the first section
1960 if you don't like the default value (generally 8KB). Using
1962 results in somewhat slower scanners, but the value of
1964 becomes immune to calls to
1968 which potentially destroy its value when
1970 is a character pointer. The opposite of
1974 which is the default.
1978 when generating C++ scanner classes
1984 holds the length of the current token.
1987 is the file which by default
1989 reads from. It may be redefined but doing so only makes sense before
1990 scanning begins or after an EOF has been encountered. Changing it in
1991 the midst of scanning will have unexpected results since
1993 buffers its input; use
1996 Once scanning terminates because an end-of-file
1997 has been seen, you can assign
1999 at the new input file and then call the scanner again to continue scanning.
2001 .B void yyrestart( FILE *new_file )
2002 may be called to point
2004 at the new input file. The switch-over to the new file is immediate
2005 (any previously buffered-up input is lost). Note that calling
2009 as an argument thus throws away the current input buffer and continues
2010 scanning the same input file.
2013 is the file to which
2015 actions are done. It can be reassigned by the user.
2017 .B YY_CURRENT_BUFFER
2020 handle to the current buffer.
2023 returns an integer value corresponding to the current start
2024 condition. You can subsequently use this value with
2026 to return to that start condition.
2027 .SH INTERFACING WITH YACC
2028 One of the main uses of
2030 is as a companion to the
2034 parsers expect to call a routine named
2036 to find the next input token. The routine is supposed to
2037 return the type of the next token as well as putting any associated
2048 to instruct it to generate the file
2050 containing definitions of all the
2054 input. This file is then included in the
2056 scanner. For example, if one of the tokens is "TOK_NUMBER",
2057 part of the scanner might look like:
2066 [0-9]+ yylval = atoi( yytext ); return TOK_NUMBER;
2071 has the following options:
2074 Generate backing-up information to
2076 This is a list of scanner states which require backing up
2077 and the input characters on which they do so. By adding rules one
2078 can remove backing-up states. If
2080 backing-up states are eliminated and
2084 is used, the generated scanner will run faster (see the
2086 flag). Only users who wish to squeeze every last cycle out of their
2087 scanners need worry about this option. (See the section on Performance
2088 Considerations below.)
2091 is a do-nothing, deprecated option included for POSIX compliance.
2094 makes the generated scanner run in
2096 mode. Whenever a pattern is recognized and the global
2098 is non-zero (which is the default),
2099 the scanner will write to
2104 --accepting rule at line 53 ("the matched text")
2107 The line number refers to the location of the rule in the file
2108 defining the scanner (i.e., the file that was fed to flex). Messages
2109 are also generated when the scanner backs up, accepts the
2110 default rule, reaches the end of its input buffer (or encounters
2111 a NUL; at this point, the two look the same as far as the scanner's concerned),
2112 or reaches an end-of-file.
2117 No table compression is done and stdio is bypassed.
2118 The result is large but fast. This option is equivalent to
2123 generates a "help" summary of
2139 scanner. The case of letters given in the
2142 be ignored, and tokens in the input will be matched regardless of case. The
2143 matched text given in
2145 will have the preserved case (i.e., it will not be folded).
2148 turns on maximum compatibility with the original AT&T
2150 implementation. Note that this does not mean
2152 compatibility. Use of this option costs a considerable amount of
2153 performance, and it cannot be used with the
2154 .B \-+, -f, -F, -Cf,
2157 options. For details on the compatibilities it provides, see the section
2158 "Incompatibilities With Lex And POSIX" below. This option also results
2160 .B YY_FLEX_LEX_COMPAT
2161 being #define'd in the generated scanner.
2164 is another do-nothing, deprecated option included only for
2168 generates a performance report to stderr. The report
2169 consists of comments regarding features of the
2171 input file which will cause a serious loss of performance in the resulting
2172 scanner. If you give the flag twice, you will also get comments regarding
2173 features that lead to minor performance losses.
2175 Note that the use of
2177 .B %option yylineno,
2178 and variable trailing context (see the Deficiencies / Bugs section below)
2179 entails a substantial performance penalty; use of
2186 flag entail minor performance penalties.
2191 (that unmatched scanner input is echoed to
2193 to be suppressed. If the scanner encounters input that does not
2194 match any of its rules, it aborts with an error. This option is
2195 useful for finding holes in a scanner's rule set.
2200 to write the scanner it generates to standard output instead
2209 a summary of statistics regarding the scanner it generates.
2210 Most of the statistics are meaningless to the casual
2212 user, but the first line identifies the version of
2214 (same as reported by
2216 and the next line the flags used when generating the scanner, including
2217 those that are on by default.
2220 suppresses warning messages.
2227 scanner, the opposite of
2229 scanners generated by
2231 (see below). In general, you use
2235 that your scanner will never be used interactively, and you want to
2238 more performance out of it. If your goal is instead to squeeze out a
2240 more performance, you should be using the
2244 options (discussed below), which turn on
2246 automatically anyway.
2252 scanner table representation should be used (and stdio
2253 bypassed). This representation is
2254 about as fast as the full table representation
2256 and for some sets of patterns will be considerably smaller (and for
2257 others, larger). In general, if the pattern set contains both "keywords"
2258 and a catch-all, "identifier" rule, such as in the set:
2261 "case" return TOK_CASE;
2262 "switch" return TOK_SWITCH;
2264 "default" return TOK_DEFAULT;
2265 [a-z]+ return TOK_ID;
2268 then you're better off using the full table representation. If only
2269 the "identifier" rule is present and you then use a hash table or some such
2270 to detect the keywords, you're better off using
2273 This option is equivalent to
2275 (see below). It cannot be used with
2283 scanner. An interactive scanner is one that only looks ahead to decide
2284 what token has been matched if it absolutely must. It turns out that
2285 always looking one extra character ahead, even if the scanner has already
2286 seen enough text to disambiguate the current token, is a bit faster than
2287 only looking ahead when necessary. But scanners that always look ahead
2288 give dreadful interactive performance; for example, when a user types
2289 a newline, it is not recognized as a newline token until they enter
2291 token, which often means typing in another whole line.
2300 table-compression options (see below). That's because if you're looking
2301 for high-performance you should be using one of these options, so if you
2304 assumes you'd rather trade off a bit of run-time performance for intuitive
2305 interactive behavior. Note also that you
2313 Thus, this option is not really needed; it is on by default for all those
2314 cases in which it is allowed.
2318 returns false for the scanner input, flex will revert to batch mode, even if
2320 was specified. To force interactive mode no matter what, use
2321 .B %option always-interactive
2322 (see Options below).
2324 You can force a scanner to
2326 be interactive by using
2335 directives. Without this option,
2337 peppers the generated scanner
2338 with #line directives so error messages in the actions will be correctly
2339 located with respect to either the original
2341 input file (if the errors are due to code in the input file), or
2345 fault -- you should report these sorts of errors to the email address
2353 mode. It will generate a lot of messages to
2356 the form of the input and the resultant non-deterministic and deterministic
2357 finite automata. This option is mostly for use in maintaining
2361 prints the version number to
2371 to generate a 7-bit scanner, i.e., one which can only recognize 7-bit
2372 characters in its input. The advantage of using
2374 is that the scanner's tables can be up to half the size of those generated
2377 option (see below). The disadvantage is that such scanners often hang
2378 or crash if their input contains an 8-bit character.
2380 Note, however, that unless you generate your scanner using the
2384 table compression options, use of
2386 will save only a small amount of table space, and make your scanner
2387 considerably less portable.
2389 default behavior is to generate an 8-bit scanner unless you use the
2395 defaults to generating 7-bit scanners unless your site was always
2396 configured to generate 8-bit scanners (as will often be the case
2397 with non-USA sites). You can tell whether flex generated a 7-bit
2398 or an 8-bit scanner by inspecting the flag summary in the
2400 output as described above.
2402 Note that if you use
2406 (those table compression options, but also using equivalence classes as
2407 discussed see below), flex still defaults to generating an 8-bit
2408 scanner, since usually with these compression options full 8-bit tables
2409 are not much more expensive than 7-bit tables.
2414 to generate an 8-bit scanner, i.e., one which can recognize 8-bit
2415 characters. This flag is only needed for scanners generated using
2419 as otherwise flex defaults to generating an 8-bit scanner anyway.
2421 See the discussion of
2423 above for flex's default behavior and the tradeoffs between 7-bit
2427 specifies that you want flex to generate a C++
2428 scanner class. See the section on Generating C++ Scanners below for
2432 controls the degree of table compression and, more generally, trade-offs
2433 between small scanners and fast scanners.
2436 ("align") instructs flex to trade off larger tables in the
2437 generated scanner for faster performance because the elements of
2438 the tables are better aligned for memory access and computation. On some
2439 RISC architectures, fetching and manipulating longwords is more efficient
2440 than with smaller-sized units such as shortwords. This option can
2441 double the size of the tables used by your scanner.
2447 .I equivalence classes,
2448 i.e., sets of characters
2449 which have identical lexical properties (for example, if the only
2450 appearance of digits in the
2452 input is in the character class
2453 "[0-9]" then the digits '0', '1', ..., '9' will all be put
2454 in the same equivalence class). Equivalence classes usually give
2455 dramatic reductions in the final table/object file sizes (typically
2456 a factor of 2-5) and are pretty cheap performance-wise (one array
2457 look-up per character scanned).
2462 scanner tables should be generated -
2464 should not compress the
2465 tables by taking advantages of similar transition functions for
2469 specifies that the alternate fast scanner representation (described
2473 should be used. This option cannot be used with
2480 .I meta-equivalence classes,
2481 which are sets of equivalence classes (or characters, if equivalence
2482 classes are not being used) that are commonly used together. Meta-equivalence
2483 classes are often a big win when using compressed tables, but they
2484 have a moderate performance impact (one or two "if" tests and one
2485 array look-up per character scanned).
2488 causes the generated scanner to
2490 use of the standard I/O library (stdio) for input. Instead of calling
2494 the scanner will use the
2496 system call, resulting in a performance gain which varies from system
2497 to system, but in general is probably negligible unless you are also using
2503 can cause strange behavior if, for example, you read from
2505 using stdio prior to calling the scanner (because the scanner will miss
2506 whatever text your previous reads left in the stdio input buffer).
2509 has no effect if you define
2511 (see The Generated Scanner above).
2515 specifies that the scanner tables should be compressed but neither
2516 equivalence classes nor meta-equivalence classes should be used.
2524 do not make sense together - there is no opportunity for meta-equivalence
2525 classes if the table is not being compressed. Otherwise the options
2526 may be freely mixed, and are cumulative.
2528 The default setting is
2530 which specifies that
2532 should generate equivalence classes
2533 and meta-equivalence classes. This setting provides the highest
2534 degree of table compression. You can trade off
2535 faster-executing scanners at the cost of larger tables with
2536 the following generally being true:
2550 Note that scanners with the smallest tables are usually generated and
2551 compiled the quickest, so
2552 during development you will usually want to use the default, maximal
2556 is often a good compromise between speed and size for production
2560 directs flex to write the scanner to the file
2568 option, then the scanner is written to
2574 option above) refer to the file
2582 for all globally-visible variable and function names to instead be
2590 It also changes the name of the default output file from
2594 Here are all of the names affected:
2602 yy_load_buffer_state
2614 (If you are using a C++ scanner, then only
2619 Within your scanner itself, you can still refer to the global variables
2620 and functions using either version of their name; but externally, they
2621 have the modified name.
2623 This option lets you easily link together multiple
2625 programs into the same executable. Note, though, that using this
2631 provide your own (appropriately-named) version of the routine for your
2633 .B %option noyywrap,
2636 no longer provides one for you by default.
2639 overrides the default skeleton file from which
2641 constructs its scanners. You'll never need this option unless you are doing
2643 maintenance or development.
2646 also provides a mechanism for controlling options within the
2647 scanner specification itself, rather than from the flex command-line.
2648 This is done by including
2650 directives in the first section of the scanner specification.
2651 You can specify multiple options with a single
2653 directive, and multiple directives in the first section of your flex input
2656 Most options are given simply as names, optionally preceded by the
2657 word "no" (with no intervening whitespace) to negate their meaning.
2658 A number are equivalent to flex flags or their negation:
2669 case-sensitive opposite of -i (default)
2675 default opposite of -s option
2679 interactive -I option
2680 lex-compat -l option
2682 perf-report -p option
2686 warn opposite of -w option
2687 (use "%option nowarn" for -w)
2689 array equivalent to "%array"
2690 pointer equivalent to "%pointer" (default)
2695 provide features otherwise not available:
2697 .B always-interactive
2698 instructs flex to generate a scanner which always considers its input
2699 "interactive". Normally, on each new input file the scanner calls
2701 in an attempt to determine whether
2702 the scanner's input source is interactive and thus should be read a
2703 character at a time. When this option is used, however, then no
2707 directs flex to provide a default
2709 program for the scanner, which simply calls
2715 .B never-interactive
2716 instructs flex to generate a scanner which never considers its input
2717 "interactive" (again, no call made to
2719 This is the opposite of
2720 .B always-interactive.
2723 enables the use of start condition stacks (see Start Conditions above).
2736 instead of the default of
2740 programs depend on this behavior, even though it is not compliant with
2741 ANSI C, which does not require
2745 to be compile-time constant.
2750 to generate a scanner that maintains the number of the current line
2751 read from its input in the global variable
2753 This option is implied by
2754 .B %option lex-compat.
2758 .B %option noyywrap),
2759 makes the scanner not call
2761 upon an end-of-file, but simply assume that there are no more
2762 files to scan (until the user points
2764 at a new file and calls
2769 scans your rule actions to determine whether you use the
2777 options are available to override its decision as to whether you use the
2778 options, either by setting them (e.g.,
2780 to indicate the feature is indeed used, or
2781 unsetting them to indicate it actually is not used
2783 .B %option noyymore).
2785 Three options take string-delimited values, offset with '=':
2788 %option outfile="ABC"
2796 %option prefix="XYZ"
2804 %option yyclass="foo"
2807 only applies when generating a C++ scanner (
2811 that you have derived
2817 will place your actions in the member function
2820 .B yyFlexLexer::yylex().
2822 .B yyFlexLexer::yylex()
2823 member function that emits a run-time error (by invoking
2824 .B yyFlexLexer::LexerError())
2826 See Generating C++ Scanners, below, for additional information.
2828 A number of options are available for lint purists who want to suppress
2829 the appearance of unneeded routines in the generated scanner. Each of the
2833 ), results in the corresponding routine not appearing in
2834 the generated scanner:
2838 yy_push_state, yy_pop_state, yy_top_state
2839 yy_scan_buffer, yy_scan_bytes, yy_scan_string
2844 and friends won't appear anyway unless you use
2846 .SH PERFORMANCE CONSIDERATIONS
2847 The main design goal of
2849 is that it generate high-performance scanners. It has been optimized
2850 for dealing well with large sets of rules. Aside from the effects on
2851 scanner speed of the table compression
2853 options outlined above,
2854 there are a number of options/actions which degrade performance. These
2855 are, from most expensive to least:
2860 arbitrary trailing context
2862 pattern sets that require backing up
2865 %option always-interactive
2867 '^' beginning-of-line operator
2871 with the first three all being quite expensive and the last two
2872 being quite cheap. Note also that
2874 is implemented as a routine call that potentially does quite a bit of
2877 is a quite-cheap macro; so if just putting back some excess text you
2882 should be avoided at all costs when performance is important.
2883 It is a particularly expensive option.
2885 Getting rid of backing up is messy and often may be an enormous
2886 amount of work for a complicated scanner. In principal, one begins
2891 file. For example, on the input
2895 foo return TOK_KEYWORD;
2896 foobar return TOK_KEYWORD;
2899 the file looks like:
2902 State #6 is non-accepting -
2903 associated rule line numbers:
2905 out-transitions: [ o ]
2906 jam-transitions: EOF [ \\001-n p-\\177 ]
2908 State #8 is non-accepting -
2909 associated rule line numbers:
2911 out-transitions: [ a ]
2912 jam-transitions: EOF [ \\001-` b-\\177 ]
2914 State #9 is non-accepting -
2915 associated rule line numbers:
2917 out-transitions: [ r ]
2918 jam-transitions: EOF [ \\001-q s-\\177 ]
2920 Compressed tables always back up.
2923 The first few lines tell us that there's a scanner state in
2924 which it can make a transition on an 'o' but not on any other
2925 character, and that in that state the currently scanned text does not match
2926 any rule. The state occurs when trying to match the rules found
2927 at lines 2 and 3 in the input file.
2928 If the scanner is in that state and then reads
2929 something other than an 'o', it will have to back up to find
2930 a rule which is matched. With
2931 a bit of headscratching one can see that this must be the
2932 state it's in when it has seen "fo". When this has happened,
2933 if anything other than another 'o' is seen, the scanner will
2934 have to back up to simply match the 'f' (by the default rule).
2936 The comment regarding State #8 indicates there's a problem
2937 when "foob" has been scanned. Indeed, on any character other
2938 than an 'a', the scanner will have to back up to accept "foo".
2939 Similarly, the comment for State #9 concerns when "fooba" has
2940 been scanned and an 'r' does not follow.
2942 The final comment reminds us that there's no point going to
2943 all the trouble of removing backing up from the rules unless
2948 since there's no performance gain doing so with compressed scanners.
2950 The way to remove the backing up is to add "error" rules:
2954 foo return TOK_KEYWORD;
2955 foobar return TOK_KEYWORD;
2960 /* false alarm, not really a keyword */
2966 Eliminating backing up among a list of keywords can also be
2967 done using a "catch-all" rule:
2971 foo return TOK_KEYWORD;
2972 foobar return TOK_KEYWORD;
2974 [a-z]+ return TOK_ID;
2977 This is usually the best solution when appropriate.
2979 Backing up messages tend to cascade.
2980 With a complicated set of rules it's not uncommon to get hundreds
2981 of messages. If one can decipher them, though, it often
2982 only takes a dozen or so rules to eliminate the backing up (though
2983 it's easy to make a mistake and have an error rule accidentally match
2984 a valid token. A possible future
2986 feature will be to automatically add rules to eliminate backing up).
2988 It's important to keep in mind that you gain the benefits of eliminating
2989 backing up only if you eliminate
2991 instance of backing up. Leaving just one means you gain nothing.
2994 trailing context (where both the leading and trailing parts do not have
2995 a fixed length) entails almost the same performance loss as
2997 (i.e., substantial). So when possible a rule like:
3001 mouse|rat/(cat|dog) run();
3008 mouse/cat|dog run();
3016 mouse|rat/cat run();
3017 mouse|rat/dog run();
3020 Note that here the special '|' action does
3022 provide any savings, and can even make things worse (see
3023 Deficiencies / Bugs below).
3025 Another area where the user can increase a scanner's performance
3026 (and one that's easier to implement) arises from the fact that
3027 the longer the tokens matched, the faster the scanner will run.
3028 This is because with long tokens the processing of most input
3029 characters takes place in the (short) inner scanning loop, and
3030 does not often have to go through the additional work of setting up
3031 the scanning environment (e.g.,
3033 for the action. Recall the scanner for C comments:
3040 "/*" BEGIN(comment);
3043 <comment>"*"+[^*/\\n]*
3044 <comment>\\n ++line_num;
3045 <comment>"*"+"/" BEGIN(INITIAL);
3048 This could be sped up by writing it as:
3055 "/*" BEGIN(comment);
3058 <comment>[^*\\n]*\\n ++line_num;
3059 <comment>"*"+[^*/\\n]*
3060 <comment>"*"+[^*/\\n]*\\n ++line_num;
3061 <comment>"*"+"/" BEGIN(INITIAL);
3064 Now instead of each newline requiring the processing of another
3065 action, recognizing the newlines is "distributed" over the other rules
3066 to keep the matched text as long as possible. Note that
3070 slow down the scanner! The speed of the scanner is independent
3071 of the number of rules or (modulo the considerations given at the
3072 beginning of this section) how complicated the rules are with
3073 regard to operators such as '*' and '|'.
3075 A final example in speeding up a scanner: suppose you want to scan
3076 through a file containing identifiers and keywords, one per line
3077 and with no other extraneous characters, and recognize all the
3078 keywords. A natural first approach is:
3087 while /* it's a keyword */
3089 .|\\n /* it's not a keyword */
3092 To eliminate the back-tracking, introduce a catch-all rule:
3101 while /* it's a keyword */
3104 .|\\n /* it's not a keyword */
3107 Now, if it's guaranteed that there's exactly one word per line,
3108 then we can reduce the total number of matches by a half by
3109 merging in the recognition of newlines with that of the other
3119 while\\n /* it's a keyword */
3122 .|\\n /* it's not a keyword */
3125 One has to be careful here, as we have now reintroduced backing up
3126 into the scanner. In particular, while
3128 know that there will never be any characters in the input stream
3129 other than letters or newlines,
3131 can't figure this out, and it will plan for possibly needing to back up
3132 when it has scanned a token like "auto" and then the next character
3133 is something other than a newline or a letter. Previously it would
3134 then just match the "auto" rule and be done, but now it has no "auto"
3135 rule, only an "auto\\n" rule. To eliminate the possibility of backing up,
3136 we could either duplicate all rules but without final newlines, or,
3137 since we never expect to encounter such an input and therefore don't
3138 how it's classified, we can introduce one more catch-all rule, this
3139 one which doesn't include a newline:
3148 while\\n /* it's a keyword */
3152 .|\\n /* it's not a keyword */
3157 this is about as fast as one can get a
3159 scanner to go for this particular problem.
3163 is slow when matching NUL's, particularly when a token contains
3165 It's best to write rules which match
3167 amounts of text if it's anticipated that the text will often include NUL's.
3169 Another final note regarding performance: as mentioned above in the section
3170 How the Input is Matched, dynamically resizing
3172 to accommodate huge tokens is a slow process because it presently requires that
3173 the (huge) token be rescanned from the beginning. Thus if performance is
3174 vital, you should attempt to match "large" quantities of text but not
3175 "huge" quantities, where the cutoff between the two is at about 8K
3177 .SH GENERATING C++ SCANNERS
3179 provides two different ways to generate scanners for use with C++. The
3180 first way is to simply compile a scanner generated by
3182 using a C++ compiler instead of a C compiler. You should not encounter
3183 any compilations errors (please report any you find to the email address
3184 given in the Author section below). You can then use C++ code in your
3185 rule actions instead of C code. Note that the default input source for
3186 your scanner remains
3188 and default echoing is still done to
3190 Both of these remain
3192 variables and not C++
3197 to generate a C++ scanner class, using the
3199 option (or, equivalently,
3201 which is automatically specified if the name of the flex
3202 executable ends in a '+', such as
3204 When using this option, flex defaults to generating the scanner to the file
3208 The generated scanner includes the header file
3210 which defines the interface to two C++ classes.
3214 provides an abstract base class defining the general scanner class
3215 interface. It provides the following member functions:
3217 .B const char* YYText()
3218 returns the text of the most recently matched token, the equivalent of
3222 returns the length of the most recently matched token, the equivalent of
3225 .B int lineno() const
3226 returns the current input line number
3228 .B %option yylineno),
3235 .B void set_debug( int flag )
3236 sets the debugging flag for the scanner, equivalent to assigning to
3238 (see the Options section above). Note that you must build the scanner
3241 to include debugging information in it.
3243 .B int debug() const
3244 returns the current setting of the debugging flag.
3246 Also provided are member functions equivalent to
3247 .B yy_switch_to_buffer(),
3248 .B yy_create_buffer()
3249 (though the first argument is an
3251 object pointer and not a
3253 .B yy_flush_buffer(),
3254 .B yy_delete_buffer(),
3257 (again, the first argument is a
3261 The second class defined in
3265 which is derived from
3267 It defines the following additional member functions:
3270 yyFlexLexer( istream* arg_yyin = 0, ostream* arg_yyout = 0 )
3273 object using the given streams for input and output. If not specified,
3274 the streams default to
3280 .B virtual int yylex()
3281 performs the same role is
3283 does for ordinary flex scanners: it scans the input stream, consuming
3284 tokens, until a rule's action returns a value. If you derive a subclass
3288 and want to access the member functions and variables of
3292 then you need to use
3293 .B %option yyclass="S"
3296 that you will be using that subclass instead of
3298 In this case, rather than generating
3299 .B yyFlexLexer::yylex(),
3303 (and also generates a dummy
3304 .B yyFlexLexer::yylex()
3306 .B yyFlexLexer::LexerError()
3310 virtual void switch_streams(istream* new_in = 0,
3312 ostream* new_out = 0)
3322 (ditto), deleting the previous input buffer if
3327 int yylex( istream* new_in, ostream* new_out = 0 )
3328 first switches the input streams via
3329 .B switch_streams( new_in, new_out )
3330 and then returns the value of
3335 defines the following protected virtual functions which you can redefine
3336 in derived classes to tailor the scanner:
3339 virtual int LexerInput( char* buf, int max_size )
3344 and returns the number of characters read. To indicate end-of-input,
3345 return 0 characters. Note that "interactive" scanners (see the
3349 flags) define the macro
3353 and need to take different actions depending on whether or not
3354 the scanner might be scanning an interactive input source, you can
3355 test for the presence of this name via
3359 virtual void LexerOutput( const char* buf, int size )
3362 characters from the buffer
3364 which, while NUL-terminated, may also contain "internal" NUL's if
3365 the scanner's rules can match text with NUL's in them.
3368 virtual void LexerError( const char* msg )
3369 reports a fatal error message. The default version of this function
3370 writes the message to the stream
3378 scanning state. Thus you can use such objects to create reentrant
3379 scanners. You can instantiate multiple instances of the same
3381 class, and you can also combine multiple C++ scanner classes together
3382 in the same program using the
3384 option discussed above.
3386 Finally, note that the
3388 feature is not available to C++ scanner classes; you must use
3392 Here is an example of a simple C++ scanner:
3395 // An example of using the flex C++ scanner class.
3401 string \\"[^\\n"]+\\"
3407 name ({alpha}|{dig}|\\$)({alpha}|{dig}|[_.\\-/$])*
3408 num1 [-+]?{dig}+\\.?([eE][-+]?{dig}+)?
3409 num2 [-+]?{dig}*\\.{dig}+([eE][-+]?{dig}+)?
3410 number {num1}|{num2}
3414 {ws} /* skip blanks and tabs */
3419 while((c = yyinput()) != 0)
3426 if((c = yyinput()) == '/')
3434 {number} cout << "number " << YYText() << '\\n';
3438 {name} cout << "name " << YYText() << '\\n';
3440 {string} cout << "string " << YYText() << '\\n';
3444 int main( int /* argc */, char** /* argv */ )
3446 FlexLexer* lexer = new yyFlexLexer;
3447 while(lexer->yylex() != 0)
3452 If you want to create multiple (different) lexer classes, you use the
3456 option) to rename each
3460 You then can include
3462 in your other sources once per lexer class, first renaming
3468 #define yyFlexLexer xxFlexLexer
3469 #include <FlexLexer.h>
3472 #define yyFlexLexer zzFlexLexer
3473 #include <FlexLexer.h>
3476 if, for example, you used
3477 .B %option prefix="xx"
3478 for one of your scanners and
3479 .B %option prefix="zz"
3482 IMPORTANT: the present form of the scanning class is
3484 and may change considerably between major releases.
3485 .SH INCOMPATIBILITIES WITH LEX AND POSIX
3487 is a rewrite of the AT&T Unix
3489 tool (the two implementations do not share any code, though),
3490 with some extensions and incompatibilities, both of which
3491 are of concern to those who wish to write scanners acceptable
3492 to either implementation. Flex is fully compliant with the POSIX
3494 specification, except that when using
3496 (the default), a call to
3498 destroys the contents of
3500 which is counter to the POSIX specification.
3502 In this section we discuss all of the known areas of incompatibility
3503 between flex, AT&T lex, and the POSIX specification.
3507 option turns on maximum compatibility with the original AT&T
3509 implementation, at the cost of a major loss in the generated scanner's
3510 performance. We note below which incompatibilities can be overcome
3516 is fully compatible with
3518 with the following exceptions:
3522 scanner internal variable
3524 is not supported unless
3531 should be maintained on a per-buffer basis, rather than a per-scanner
3532 (single global variable) basis.
3535 is not part of the POSIX specification.
3539 routine is not redefinable, though it may be called to read characters
3540 following whatever has been matched by a rule. If
3542 encounters an end-of-file the normal
3544 processing is done. A ``real'' end-of-file is returned by
3549 Input is instead controlled by defining the
3557 cannot be redefined is in accordance with the POSIX specification,
3558 which simply does not specify any way of controlling the
3559 scanner's input other than by making an initial assignment to
3564 routine is not redefinable. This restriction is in accordance with POSIX.
3567 scanners are not as reentrant as
3569 scanners. In particular, if you have an interactive scanner and
3570 an interrupt handler which long-jumps out of the scanner, and
3571 the scanner is subsequently called again, you may get the following
3575 fatal flex scanner internal error--end of buffer missed
3578 To reenter the scanner, first use
3584 Note that this call will throw away any buffered input; usually this
3585 isn't a problem with an interactive scanner.
3587 Also note that flex C++ scanner classes
3589 reentrant, so if using C++ is an option for you, you should use
3590 them instead. See "Generating C++ Scanners" above for details.
3596 macro is done to the file-pointer
3602 is not part of the POSIX specification.
3605 does not support exclusive start conditions (%x), though they
3606 are in the POSIX specification.
3608 When definitions are expanded,
3610 encloses them in parentheses.
3611 With lex, the following:
3616 foo{NAME}? printf( "Found it\\n" );
3620 will not match the string "foo" because when the macro
3621 is expanded the rule is equivalent to "foo[A-Z][A-Z0-9]*?"
3622 and the precedence is such that the '?' is associated with
3625 the rule will be expanded to
3626 "foo([A-Z][A-Z0-9]*)?" and so the string "foo" will match.
3628 Note that if the definition begins with
3634 expanded with parentheses, to allow these operators to appear in
3635 definitions without losing their special meanings. But the
3639 operators cannot be used in a
3647 behavior of no parentheses around the definition.
3649 The POSIX specification is that the definition be enclosed in parentheses.
3651 Some implementations of
3653 allow a rule's action to begin on a separate line, if the rule's pattern
3654 has trailing whitespace:
3659 { foobar_action(); }
3663 does not support this feature.
3668 (generate a Ratfor scanner) option is not supported. It is not part
3669 of the POSIX specification.
3674 is undefined until the next token is matched, unless the scanner
3677 This is not the case with
3679 or the POSIX specification. The
3681 option does away with this incompatibility.
3683 The precedence of the
3685 (numeric range) operator is different.
3687 interprets "abc{1,3}" as "match one, two, or
3688 three occurrences of 'abc'", whereas
3690 interprets it as "match 'ab'
3691 followed by one, two, or three occurrences of 'c'". The latter is
3692 in agreement with the POSIX specification.
3694 The precedence of the
3696 operator is different.
3698 interprets "^foo|bar" as "match either 'foo' at the beginning of a line,
3699 or 'bar' anywhere", whereas
3701 interprets it as "match either 'foo' or 'bar' if they come at the beginning
3702 of a line". The latter is in agreement with the POSIX specification.
3704 The special table-size declarations such as
3716 is #define'd so scanners may be written for use with either
3720 Scanners also include
3721 .B YY_FLEX_MAJOR_VERSION
3723 .B YY_FLEX_MINOR_VERSION
3724 indicating which version of
3726 generated the scanner
3727 (for example, for the 2.5 release, these defines would be 2 and 5
3732 features are not included in
3734 or the POSIX specification:
3739 start condition scopes
3740 start condition stacks
3741 interactive/non-interactive scanners
3742 yy_scan_string() and friends
3744 yy_set_interactive()
3754 %{}'s around actions
3755 multiple actions on a line
3758 plus almost all of the flex flags.
3759 The last feature in the list refers to the fact that with
3761 you can put multiple actions on the same line, separated with
3762 semi-colons, while with
3767 foo handle_foo(); ++num_foos_seen;
3770 is (rather surprisingly) truncated to
3777 does not truncate the action. Actions that are not enclosed in
3778 braces are simply terminated at the end of the line.
3780 .I warning, rule cannot be matched
3781 indicates that the given rule
3782 cannot be matched because it follows other rules that will
3783 always match the same text as it. For
3784 example, in the following "foo" cannot be matched because it comes after
3785 an identifier "catch-all" rule:
3788 [a-z]+ got_identifier();
3794 in a scanner suppresses this warning.
3799 option given but default rule can be matched
3800 means that it is possible (perhaps only in a particular start condition)
3801 that the default rule (match any single character) is the only one
3802 that will match a particular input. Since
3804 was given, presumably this is not intended.
3806 .I reject_used_but_not_detected undefined
3808 .I yymore_used_but_not_detected undefined -
3809 These errors can occur at compile time. They indicate that the
3816 failed to notice the fact, meaning that
3818 scanned the first two sections looking for occurrences of these actions
3819 and failed to find any, but somehow you snuck some in (via a #include
3820 file, for example). Use
3824 to indicate to flex that you really do use these features.
3826 .I flex scanner jammed -
3827 a scanner compiled with
3829 has encountered an input string which wasn't matched by
3830 any of its rules. This error can also occur due to internal problems.
3832 .I token too large, exceeds YYLMAX -
3835 and one of its rules matched a string longer than the
3837 constant (8K bytes by default). You can increase the value by
3840 in the definitions section of your
3844 .I scanner requires \-8 flag to
3845 .I use the character 'x' -
3846 Your scanner specification includes recognizing the 8-bit character
3848 and you did not specify the \-8 flag, and your scanner defaulted to 7-bit
3849 because you used the
3853 table compression options. See the discussion of the
3857 .I flex scanner push-back overflow -
3860 to push back so much text that the scanner's buffer could not hold
3861 both the pushed-back text and the current token in
3863 Ideally the scanner should dynamically resize the buffer in this case, but at
3864 present it does not.
3867 input buffer overflow, can't enlarge buffer because scanner uses REJECT -
3868 the scanner was working on matching an extremely large token and needed
3869 to expand the input buffer. This doesn't work with scanners that use
3874 fatal flex scanner internal error--end of buffer missed -
3875 This can occur in a scanner which is reentered after a long-jump
3876 has jumped out (or over) the scanner's activation frame. Before
3877 reentering the scanner, use:
3883 or, as noted above, switch to using the C++ scanner class.
3885 .I too many start conditions in <> construct! -
3886 you listed more start conditions in a <> construct than exist (so
3887 you must have listed at least one of them twice).
3891 library with which scanners must be linked.
3894 generated scanner (called
3899 generated C++ scanner class, when using
3903 header file defining the C++ scanner base class,
3905 and its derived class,
3909 skeleton scanner. This file is only used when building flex, not when
3913 backing-up information for
3918 .SH DEFICIENCIES / BUGS
3919 Some trailing context
3920 patterns cannot be properly matched and generate
3921 warning messages ("dangerous trailing context"). These are
3922 patterns where the ending of the
3923 first part of the rule matches the beginning of the second
3924 part, such as "zx*/xy*", where the 'x*' matches the 'x' at
3925 the beginning of the trailing context. (Note that the POSIX draft
3926 states that the text matched by such patterns is undefined.)
3928 For some trailing context rules, parts which are actually fixed-length are
3929 not recognized as such, leading to the above mentioned performance loss.
3930 In particular, parts using '|' or {n} (such as "foo{3}") are always
3931 considered variable-length.
3933 Combining trailing context with the special '|' action can result in
3935 trailing context being turned into the more expensive
3937 trailing context. For example, in the following:
3948 invalidates yytext and yyleng, unless the
3953 option has been used.
3955 Pattern-matching of NUL's is substantially slower than matching other
3958 Dynamic resizing of the input buffer is slow, as it entails rescanning
3959 all the text matched so far by the current (generally huge) token.
3961 Due to both buffering of input and read-ahead, you cannot intermix
3962 calls to <stdio.h> routines, such as, for example,
3966 rules and expect it to work. Call
3970 The total table entries listed by the
3972 flag excludes the number of table entries needed to determine
3973 what rule has been matched. The number of entries is equal
3974 to the number of DFA states if the scanner does not use
3976 and somewhat greater than the number of states if it does.
3979 cannot be used with the
3987 internal algorithms need documentation.
3989 lex(1), yacc(1), sed(1), awk(1).
3991 John Levine, Tony Mason, and Doug Brown,
3993 O'Reilly and Associates. Be sure to get the 2nd edition.
3995 M. E. Lesk and E. Schmidt,
3996 .I LEX \- Lexical Analyzer Generator
3998 Alfred Aho, Ravi Sethi and Jeffrey Ullman,
3999 .I Compilers: Principles, Techniques and Tools,
4000 Addison-Wesley (1986). Describes the pattern-matching techniques used by
4002 (deterministic finite automata).
4004 Vern Paxson, with the help of many ideas and much inspiration from
4005 Van Jacobson. Original version by Jef Poskanzer. The fast table
4006 representation is a partial implementation of a design done by Van
4007 Jacobson. The implementation was done by Kevin Gong and Vern Paxson.
4011 beta-testers, feedbackers, and contributors, especially Francois Pinard,
4014 Stan Adermann, Terry Allen, David Barker-Plummer, John Basrai,
4015 Neal Becker, Nelson H.F. Beebe, benson@odi.com,
4016 Karl Berry, Peter A. Bigot, Simon Blanchard,
4017 Keith Bostic, Frederic Brehm, Ian Brockbank, Kin Cho, Nick Christopher,
4018 Brian Clapper, J.T. Conklin,
4019 Jason Coughlin, Bill Cox, Nick Cropper, Dave Curtis, Scott David
4020 Daniels, Chris G. Demetriou, Theo Deraadt,
4021 Mike Donahue, Chuck Doucette, Tom Epperly, Leo Eskin,
4022 Chris Faylor, Chris Flatters, Jon Forrest, Jeffrey Friedl,
4023 Joe Gayda, Kaveh R. Ghazi, Wolfgang Glunz,
4024 Eric Goldman, Christopher M. Gould, Ulrich Grepel, Peer Griebel,
4025 Jan Hajic, Charles Hemphill, NORO Hideo,
4026 Jarkko Hietaniemi, Scott Hofmann,
4027 Jeff Honig, Dana Hudes, Eric Hughes, John Interrante,
4028 Ceriel Jacobs, Michal Jaegermann, Sakari Jalovaara, Jeffrey R. Jones,
4029 Henry Juengst, Klaus Kaempf, Jonathan I. Kamens, Terrence O Kane,
4030 Amir Katz, ken@ken.hilco.com, Kevin B. Kenny,
4031 Steve Kirsch, Winfried Koenig, Marq Kole, Ronald Lamprecht,
4032 Greg Lee, Rohan Lenard, Craig Leres, John Levine, Steve Liddle,
4033 David Loffredo, Mike Long,
4034 Mohamed el Lozy, Brian Madsen, Malte, Joe Marshall,
4035 Bengt Martensson, Chris Metcalf,
4036 Luke Mewburn, Jim Meyering, R. Alexander Milowski, Erik Naggum,
4037 G.T. Nicol, Landon Noll, James Nordby, Marc Nozell,
4038 Richard Ohnemus, Karsten Pahnke,
4039 Sven Panne, Roland Pesch, Walter Pelissero, Gaumond
4040 Pierre, Esmond Pitt, Jef Poskanzer, Joe Rahmeh, Jarmo Raiha,
4041 Frederic Raimbault, Pat Rankin, Rick Richardson,
4042 Kevin Rodgers, Kai Uwe Rommel, Jim Roskind, Alberto Santini,
4043 Andreas Scherer, Darrell Schiebel, Raf Schietekat,
4044 Doug Schmidt, Philippe Schnoebelen, Andreas Schwab,
4045 Larry Schwimmer, Alex Siegel, Eckehard Stolz, Jan-Erik Strvmquist,
4046 Mike Stump, Paul Stuart, Dave Tallman, Ian Lance Taylor,
4047 Chris Thewalt, Richard M. Timoney, Jodi Tsai,
4048 Paul Tuinenga, Gary Weik, Frank Whaley, Gerhard Wilhelms, Kent Williams, Ken
4049 Yap, Ron Zellar, Nathan Zelle, David Zuhn,
4050 and those whose names have slipped my marginal
4051 mail-archiving skills but whose contributions are appreciated all the
4054 Thanks to Keith Bostic, Jon Forrest, Noah Friedman,
4055 John Gilmore, Craig Leres, John Levine, Bob Mulcahy, G.T.
4056 Nicol, Francois Pinard, Rich Salz, and Richard Stallman for help with various
4057 distribution headaches.
4059 Thanks to Esmond Pitt and Earle Horton for 8-bit character support; to
4060 Benson Margulies and Fred Burke for C++ support; to Kent Williams and Tom
4061 Epperly for C++ class support; to Ove Ewerlid for support of NUL's; and to
4062 Eric Hughes for support of multiple buffers.
4064 This work was primarily done when I was with the Real Time Systems Group
4065 at the Lawrence Berkeley Laboratory in Berkeley, CA. Many thanks to all there
4066 for the support I received.
4068 Send comments to vern@ee.lbl.gov.