LALR(1) parser generator
reads the grammar specification in
and generates an LR(1) parser for it.
The parsers consist of a set of LALR(1) parsing tables and a driver routine
written in the C programming language. yacc
normally writes the parse tables and the driver routine to the file
The options are as follows:
- The -b option changes the
prefix prepended to the output file names to the string denoted by
file_prefix. The default prefix is the
- The -d option causes the
header file y.tab.h to be written.
- If the -l option is not
specified, yacc will insert #line directives
in the generated code. The #line directives let the C compiler relate
errors in the generated code to the user's original code. If the
-l option is specified,
yacc will not insert the #line directives.
#line directives specified by the user will be retained.
- The -o option specifies an
explicit name for the parser's output file name instead of the default.
The names of the other output files are constructed from
output_file as described under the
-d and -v
- The -p option changes the
prefix prepended to yacc-generated symbols to the string denoted by
symbol_prefix. The default prefix is the
- The -r option causes
yacc to produce separate files for code and
tables. The code file is named y.code.c, and
the tables file is named y.tab.c.
- The -t option changes the
preprocessor directives generated by yacc so
that debugging statements will be incorporated in the compiled code.
- The -v option causes a
human-readable description of the generated parser to be written to the
The names of the tables generated by this version of
“yylen”, “yydefred”, “yydgoto”,
“yysindex”, “yyrindex”, “yygindex”,
“yytable”, and “yycheck”. Two additional tables,
“yyname” and “yyrule”, are created if
is defined and non-zero.
utility exits 0 on success,
and >0 if an error occurs.
If there are rules that are never reduced, the number of such rules is written
to the standard error. If there are any LALR(1) conflicts, the number of
conflicts is also written to the standard error.
F. DeRemer and
T. J. Pennello, Efficient
Computation of LALR(1) Look-Ahead Sets, TOPLAS,
Issue 4, Volume 4,
utility is compliant with the
IEEE Std 1003.1-2008
specification, though its presence is
The flags [-or
extensions to that specification.
was originally developed at AT&T by
Stephen C. Johnson
was originally developed using PCC on
a VAX with the intent of being as compatible as possible with
AT&T UNIX yacc
is owed to the unflagging efforts of Keith Bostic. His badgering kept me
working on yacc
long after I was ready to quit.
is based on the excellent algorithm
for computing LALR(1) lookaheads developed by Tom
and Frank DeRemer
algorithm is described in their almost impenetrable article in TOPLAS (see
Finally, much credit must go to those who pointed out deficiencies of earlier
releases. Among the most prolific contributors were Benson I. Margulies, Dave
Gentzel, Antoine Verheijen, Peter S. Housel, Dale Smith, Ozan Yigit, John
Campbell, Bill Sommerfeld, Paul Hilfinger, Gary Bridgewater, Dave Bakken, Dan
Lanciani, Richard Sargent, and Parag Patel.
utility was written by