This is GNU gperf. It is a program that generates perfect hash
functions for sets of key words.  A perfect hash function is:

          A hash function and a data structure that allows 
          recognition of a key word in a set of words using 
          exactly 1 probe into the data structure.

The doc/gperf.html file explains how the program works, the form of
the input, what options are available, and hints on choosing the best
options for particular key words set.

See the file NEWS for a list of major changes in the current release.

See the file INSTALL for compilation and installation instructions.

Output from the GPERF program is used to recognize reserved words in
the GNU C, GNU C++, and GNU Pascal compilers, as well as with the GNU
indent program.

For general documentation on the coding and usage standards
this distribution follows, see the GNU standards document
ftp://ftp.gnu.org/pub/gnu/standards.*, especially the 'Makefile
Conventions', 'Configuration', and 'User Interfaces' sections.

Mail suggestions and bug reports to <bug-gnu-gperf@gnu.org>.  When
reporting bugs, please include in the subject line the package name
and version (output of 'gperf --version') for which you found a problem.

