YACC(1) YACC(1)
NAME
yacc - yet another compiler-compiler
SYNOPSIS
yacc [ option ... ] grammar
DESCRIPTION
Yacc converts a context-free grammar and translation code
into a set of tables for an LR(1) parser and translator.
The grammar may be ambiguous; specified precedence rules are
used to break ambiguities.
The output file, y.tab.c, must be compiled by the C compiler
to produce a program `yyparse'. This program must be loaded
with a lexical analyzer function, yylex(void) (often gener-
ated by lex(1)), with a main(int argc, char *argv[]) pro-
gram, and with an error handling routine, yyerror(char*).
The options are
-o output Direct output to the specified file instead of
y.tab.c.
-Dn Create file y.debug, containing diagnostic mes-
sages. To incorporate them in the parser, com-
pile it with preprocessor symbol yydebug defined.
The amount of diagnostic output from the parser
is regulated by value n. The value 0 reports
errors; 1 reports reductions; higher values (up
to 4) include more information about state tran-
sitions.
-v Create file y.output, containing a description of
the parsing tables and of conflicts arising from
ambiguities in the grammar.
-d Create file y.tab.h, containing #define state-
ments that associate yacc-assigned `token codes'
with user-declared `token names'. Include it in
source files other than y.tab.c to give access to
the token codes.
-s stem Change the prefix `y' of the file names y.tab.c,
y.tab.h, y.debug, and y.output to stem.
-S Write a parser that uses Stdio instead of the
print routines in libc.
-l Disable #line directives in the generated parser.
Page 1 Plan 9 (printed 10/29/25)
YACC(1) YACC(1)
-a Generate a parser that takes an argument of type
Yyarg and passes this argument to each invocation
of the lexer function, yylex. Yyarg contains
per-instance state and a single user-visible mem-
ber, arg, of type void*.
The specification of yacc itself is essentially the same as
the UNIX version described in the references mentioned
below. Besides the -D option, the main relevant differences
are:
The interface to the C environment is by default
through <libc.h> rather than <stdio.h>; the -S option
reverses this.
The parser accepts UTF input text (see utf(7)), which
has a couple of effects. First, the return value of
yylex() no longer fits in a short; second, the starting
value for non-terminals is now 0xE000 rather than 257.
The generated parser can be recursive: actions can call
yyparse, for example to implement a sort of #include
statement in an interpreter.
Finally, some undocumented inner workings of the parser
have been changed, which may affect programs that know
too much about its structure.
FILES
y.output
y.tab.c
y.tab.h
y.debug
y.tmp.* temporary file
y.acts.* temporary file
/usr/local/plan9/lib/yaccpar
parser prototype
/usr/local/plan9/lib/yaccpars
parser prototype using stdio
SOURCE
/usr/local/plan9/src/cmd/yacc.c
SEE ALSO
lex(1)
S. C. Johnson and R. Sethi, ``Yacc: A parser generator'',
Unix Research System Programmer's Manual, Tenth Edition,
Volume 2
B. W. Kernighan and Rob Pike, The UNIX Programming Environ-
ment, Prentice Hall, 1984
BUGS
Page 2 Plan 9 (printed 10/29/25)
YACC(1) YACC(1)
The parser may not have full information when it writes to
y.debug so that the names of the tokens returned by `yylex'
may be missing.
Page 3 Plan 9 (printed 10/29/25)