| .TH YACC 1 | 
 | .SH NAME | 
 | yacc \- yet another compiler-compiler | 
 | .SH SYNOPSIS | 
 | .B yacc | 
 | [ | 
 | .I option ... | 
 | ] | 
 | .I grammar | 
 | .SH DESCRIPTION | 
 | .I 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. | 
 | .PP | 
 | The output file, | 
 | .BR y.tab.c , | 
 | must be compiled by the C compiler | 
 | to produce a program | 
 | .LR yyparse . | 
 | This program must be loaded with a lexical analyzer function, | 
 | .B yylex(void) | 
 | (often generated by | 
 | .IR lex (1)), | 
 | with a | 
 | .B main(int argc, char *argv[]) | 
 | program, and with an error handling routine, | 
 | .BR yyerror(char*) . | 
 | .PP | 
 | The options are | 
 | .TP "\w'\fL-o \fIoutput\fLXX'u" | 
 | .BI -o " output | 
 | Direct output to the specified file instead of | 
 | .BR y.tab.c . | 
 | .TP | 
 | .BI -D n | 
 | Create file | 
 | .BR y.debug , | 
 | containing diagnostic messages. | 
 | To incorporate them in the parser, compile it with preprocessor symbol | 
 | .B yydebug | 
 | defined. | 
 | The amount of  | 
 | diagnostic output from the parser is regulated by | 
 | value | 
 | .IR n . | 
 | The value 0 reports errors; 1 reports reductions; | 
 | higher values (up to 4) include more information about | 
 | state transitions. | 
 | .TP | 
 | .B -v | 
 | Create file | 
 | .BR y.output , | 
 | containing a description of the parsing tables and of | 
 | conflicts arising from ambiguities in the grammar. | 
 | .TP | 
 | .B -d | 
 | Create file | 
 | .BR y.tab.h , | 
 | containing | 
 | .B #define | 
 | statements that associate | 
 | .IR yacc -assigned | 
 | `token codes' with user-declared `token names'. | 
 | Include it in source files other than | 
 | .B y.tab.c | 
 | to give access to the token codes. | 
 | .TP | 
 | .BI -s " stem | 
 | Change the prefix | 
 | .L y  | 
 | of the file names | 
 | .BR y.tab.c , | 
 | .BR y.tab.h , | 
 | .BR y.debug , | 
 | and | 
 | .B y.output | 
 | to | 
 | .IR stem . | 
 | .TP | 
 | .B -S | 
 | Write a parser that uses | 
 | Stdio | 
 | instead of the | 
 | .B print | 
 | routines in libc. | 
 | .TP | 
 | .BI -l | 
 | Disable #line directives in the generated parser. | 
 | .TP | 
 | .BI -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*. | 
 | .PP | 
 | The specification of | 
 | .I yacc | 
 | itself is essentially the same as the UNIX version | 
 | described in the references mentioned below. | 
 | Besides the | 
 | .B -D | 
 | option, the main relevant differences are: | 
 | .IP | 
 | The interface to the C environment is by default through | 
 | .B <libc.h> | 
 | rather than | 
 | .BR <stdio.h> ; | 
 | the | 
 | .B -S | 
 | option reverses this. | 
 | .IP | 
 | The parser accepts | 
 | .SM UTF | 
 | input text (see | 
 | .IR utf (7)), | 
 | which has a couple of effects. | 
 | First, the return value of | 
 | .B yylex() | 
 | no longer fits in a | 
 | .BR short ; | 
 | second, the starting value for non-terminals is now 0xE000 rather than 257. | 
 | .IP | 
 | The generated parser can be recursive: actions can call | 
 | .IR yyparse , | 
 | for example to implement a sort of | 
 | .B #include | 
 | statement in an interpreter. | 
 | .IP | 
 | Finally, some undocumented inner workings of the parser have been | 
 | changed, which may affect programs that know too much about its structure. | 
 | .SH FILES | 
 | .TF y.debug.xxxxx | 
 | .TP | 
 | .B y.output | 
 | .TP | 
 | .B y.tab.c | 
 | .TP | 
 | .B y.tab.h | 
 | .TP | 
 | .B y.debug | 
 | .TP | 
 | .B y.tmp.* | 
 | temporary file | 
 | .TP | 
 | .B y.acts.* | 
 | temporary file | 
 | .TP | 
 | .B \*9/lib/yaccpar | 
 | parser prototype | 
 | .TP | 
 | .B \*9/lib/yaccpars | 
 | parser prototype using stdio | 
 | .SH SOURCE | 
 | .B \*9/src/cmd/yacc.c | 
 | .SH "SEE ALSO" | 
 | .IR lex (1) | 
 | .br | 
 | S. C. Johnson and R. Sethi, | 
 | ``Yacc: A parser generator'', | 
 | .I | 
 | Unix Research System Programmer's Manual, | 
 | Tenth Edition, Volume 2 | 
 | .br | 
 | B. W. Kernighan and Rob Pike, | 
 | .I | 
 | The UNIX Programming Environment, | 
 | Prentice Hall, 1984 | 
 | .SH BUGS | 
 | The parser may not have full information when it writes to | 
 | .B y.debug | 
 | so that the names of the tokens returned by | 
 | .L yylex | 
 | may be missing. |