Man Linux: Main Page and Category List

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
                  parsing tables and of conflicts arising from ambiguities  in
                  the grammar.

       -d         Create  file  y.tab.h,  containing  #define  statements 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  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 Programmers 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.

                                                                       YACC(1)