YACC(1)                                                   YACC(1)

          yacc - yet another compiler-compiler

          yacc [ option ... ] grammar

          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

          -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-

          -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.

     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

               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.

          y.tmp.*        temporary file
          y.acts.*       temporary file
          /lib/yaccpar   parser prototype
          /lib/yaccpars  parser prototype using stdio


          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

          The parser may not have full information when it writes to
          y.debug so that the names of the tokens returned by `yylex'

     YACC(1)                                                   YACC(1)

          may be missing.