YACC(I)                     11/25/74                      YACC(I)


     yacc - yet another compiler-compiler


     yacc [ -vor ] [ grammar ]


     Yacc converts a context-free grammar into a  set  of  tables

     for  a  simple  automaton  which  executes  an LR(1) parsing

     algorithm.   The  grammar  may   be   ambiguous;   specified

     precedence rules are used to break ambiguities.

     The output is y.tab.c, which  must  be  compiled  by  the  C

     compiler   and  loaded  with  any  other  routines  required

     (perhaps a lexical analyzer) and the Yacc library:

             cc y.tab.c other.o -ly

     If the -v flag is given,  the  file  y.output  is  prepared,

     which  contains  a  description  of the parsing tables and a

     report on conflicts generated by ambiguities in the grammar.

     The -o flag calls an optimizer for the tables; the optimized

     tables, with parser included, appear on file y.tab.c

     The -r flag causes  Yacc  to  accept  grammars  with  Ratfor

     actions,  and  produce  Ratfor output on y.tab.r; -r implies

     the -o flag.  Typical usage is then

             rc y.tab.r other.o


     ``LR Parsing'', by A. V. Aho and S.  C.  Johnson,  Computing

     Surveys,   June,   1974.   ``The  YACC  Compiler-compiler'',

     internal memorandum.


     S. C. Johnson




     y.tab.r                 when ratfor output is obtained

     yacc.tmp                when optimizer is called

     /lib/liby.a             runtime library for compiler

     /usr/yacc/fpar.r        ratfor parser

     /usr/yacc/opar.c        parser for optimized tables

     /usr/yacc/yopti         optimizer postpass


     The number of reduce-reduce and  shift-reduce  conflicts  is

     reported  on  the standard output; a more detailed report is

     found in the y.output file.


     Because file names are fixed, at most one Yacc  process  can

     be active in a given directory at a time.