aboutsummaryrefslogtreecommitdiff
path: root/man/man1/yacc.1
diff options
context:
space:
mode:
Diffstat (limited to 'man/man1/yacc.1')
-rw-r--r--man/man1/yacc.1167
1 files changed, 167 insertions, 0 deletions
diff --git a/man/man1/yacc.1 b/man/man1/yacc.1
new file mode 100644
index 00000000..a965f953
--- /dev/null
+++ b/man/man1/yacc.1
@@ -0,0 +1,167 @@
+.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.
+.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 (6)),
+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 /sys/lib/yaccpars
+.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 /sys/lib/yaccpar
+parser prototype
+.TP
+.B /sys/lib/yaccpars
+parser prototype using stdio
+.SH SOURCE
+.B /sys/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.