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 This program must be loaded with a lexical analyzer function, yylex(void) (often generated by lex(1)), with a main(int argc, char *argv[]) program, 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 messages. To
- incorporate them in the parser, compile 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 transitions.
- -v Create file y.output, containing a description of the pars
- ing tables and of conflicts arising from ambiguities in the grammar.
- -d Create file y.tab.h, containing #define statements that as
- sociate 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 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.
- -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 member, 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
- /lib/yaccpar
- parser prototype
- /lib/yaccpars
- parser prototype using stdio
SOURCE
/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 Environment, Prentice Hall, 1984
BUGS
- The parser may not have full information when it writes to y.debug so
that the names of the tokens returned by may be missing.