This manual describes flc(), a tool for generating lexical scanners:
programs recognizing patterns in text. Usually, scanners are used in
combination with parsers which can be generated by, e.g.,
url(bisonc++)(https://fbb-git.gitlab.io/bisoncpp/)

Flc() reads one or more em(input files) (called `lexer' in this manual),
containing rules: regular expressions, optionally associated with Cpp()
code. From this Flc() generates several files, containing the declaration and
implementation of a class (tt(Scanner) by default). The member function
tt(lex) is used to analyze input: it looks for text matching the regular
expressions. Whenever it finds a match, it executes the associated Cpp()
code.

Flc() is highly comparable to the programs flex and flex++, written by Vern
Paxson. Our goal was to create a similar program, completely implementing it
in Cpp(), and merely generating Cpp() code. Most flex / flex++ grammars should
be usable with flc(), with minor adjustments (see also `lref(differences
with flex/flex++)(differences)').

This edition of the manual documents version _CurVers_ and provides detailed
information on flc()'s use and inner workings. Some texts are adapted from the
url(flex manual)(https://github.com/westes/flex).  The manual
page bf(flexc++)(1) provides an overview of the command line options and
option directives, bf(flexc++api)(3) provides an overview of the application
programmer's interface, and bf(flexc++input)(7) describes the organization of
flc()'s input file(s).

The most recent version of both this manual and flc() itself can be found at
lurl(https://fbb-git.gitlab.io/flexcpp/). If you find a bug in flc() or
mistakes in the documentation, please report it to the authors.

Flc() was designed and written by Frank B. Brokken, Jean-Paul van Oosten, and
(up to version 0.5.3) Richard Berendsen.





