It is well suited for editor-script type transformations and for segmenting input in preparation for a parsing routine. Lex source is a table of regular expressions and corresponding program fragments.
Since our action consists only of an empty statement ; the text is just discarded. So our regular expression means: It is case-sensitive, unless we tell flex to build a case-insensitive lexer using the "-i" option. The 2nd pattern-action statement is essential, because lex has a default action for any text which did not match any rule in the specification.
The default action is to print it on the standard output. This can be useful occasionally, if you just want to do a small modification on the input stream, such as stripping out html tags, and replacing text eg: It is a working lex program, and you can compile it by saving it as strip-html.
This means that the text is read, but nothing else is done. The remainder of the text is copied to the output because it does not match any rule, and the default action takes over.
The above example might be a useful as a front-end to a program which indexes web-pages. Lex Actions Lex Actions are typically just C-program statements. No special continuation character is required, but each extra line should be indented by at least one tab from the start of the line, like this: Re-interpret the input and use the "second best" match instead see also the section Precedence of Lex Patterns.
This is a lot more complicated than it sounds! Set Lex into the named state also know as a "start condition". States may be exclusive or inclusive. An exclusive start-condition is where no other patterns are applied, except those with the appropriate start-condition.
An inclusive start-condition is where the rule is applied together will any other rules which are not constrained by start-conditions. Exclusive states are a feature of flex. Start conditions are a powerful but easy to use feature of lex. See the man page for more information. Lex also provides a number of variables which we can use within actions.
Precedence of Lex Patterns In most situations where we use regular expressions, there is only one regular expression active at a time. In the case of a lex specificatoin, there are multiple regular expressions, all active at the same time. This leads to the situation where a particular piece of text may be legitimately interpreted by more than one lex pattern.
In order to resolve such ambiguities, lex uses the following rules of precedence: The longest possible match is chosen first remember that any trailing context is considered part of the matched-length.
If two patterns match the same length of text, the first pattern in the specification is used. Please see the flex man page for further discussion of precedence, and discussions of the precedence of elements within a lex pattern. This point is worth stressing, as it is the most common cause of "unexpected behaviour" from a lex-generated program.
In particular, a rule like. The net effect of this is that any other rules would not get a look-in. In those instances where. However, this is not exactly true. Lex is in reality a C-code generator, more like a compiler than an interpreter. Our Lex Specification is "compiled" into C-code.
The C-code Lex generates is in the form of a state-machine, which processed input character-by-character.FLEX (Fast LEXical analyzer generator) is a tool for generating scanners.
In stead of writing a scanner from scratch, you only need to identify the vocabulary of a certain language (e.g. Simple), write a specification of patterns using regular expressions (e.g. DIGIT ), and FLEX will construct a . Before writing a compiler was a very time- consuming process.
Then Lesk  and Johnson  published papers on lex and yacc.
These utilities greatly simplify compiler writing. Example Program for the lex and yacc Programs. This section describes example programs for the lex and yacc commands. Together, these example programs create a simple, desk-calculator program that performs addition, subtraction, multiplication, and division operations.
Example Program for the lex and yacc Programs. This section describes example programs for the lex and yacc commands. Together, these example programs create a simple, desk-calculator program that performs addition, subtraction, multiplication, and division operations.
by Tom Niemann. caninariojana.com 2.
 published papers on lex and yacc. These utilities greatly simplify compiler writing. Implementation details for lex and yacc may be found in Aho [ ]. Flex and bison, clones for lex Regular expressions are translated by lex to a computer program that mimics an FSA.
Using the next. Example Lex and Yacc Programs. Here are a number of short Lex programs to demonstrate what sorts of things you can do with Lex. Several of these programs are copied from the book lex & yacc by John R.
Levine, Tony Mason, and Doug Brown, published by O'Reilly & Associates,