glenda.party
term% ls -F
term% pwd
$home/manuals/9front/1/yacc
term% cat index.txt
YACC(1)                     General Commands Manual                    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  ambigu‐
       ous; 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 in‐
                  corporate  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 re‐
                  ports 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  `to‐
                  ken  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.de‐
                  bug, and y.output to stem.

       -S         Write a parser that uses Stdio instead of the print routines
                  in libc.

       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(6)), which has a cou‐
              ple 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 in‐
              terpreter.

              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

       /sys/lib/yaccpar
              parser prototype

       /sys/lib/yaccpars
              parser prototype using stdio

SOURCE
       /sys/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, Pren‐
       tice 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.



                                                                       YACC(1)