A freely available version of lex is flex. It is the version of lex distributed with 4.4BSD and by the GNU project. Internet users can also FTP it from ftp.ee.lbl.gov. The most significant advantages of flex are that it is much more reliable than AT&T lex, generates faster lexical analyzers, and does not have lex’s limitations upon table size. Flex may be redistributed with no requirements other than reproducing the authors’ copyright and disclaimer, and there are no distribution restrictions at all on flex scanners.
Flex is highly compatible with lex. Some AT&T lex scanners will need to be modified to work with flex, as detailed below.
This description reflects flex version 2.3.7, released in March 1991.
We’ve noted differences between flex and other versions of lex throughout the text. Here is a summary of the most important differences:
Flex does not need an external library (AT&T lex scanners must be linked with the lex library by using -ll on the command line). The user, however, must supply a main function or some other function which calls yylex. For POSIX compatibility, flex 2.4 will change the default yywrap() from a macro to a library routine, so scanners that do not define their own yywrap() will need to be linked with the library.
Flex has a different, nearly useless, version of lex’s translation tables (the %t or %T declaration in the lex specification file).
Flex expands pattern definitions slightly differently than lex. Whenever it expands ...