aboutsummaryrefslogtreecommitdiff
path: root/contrib/byacc/yacc.1
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/byacc/yacc.1')
-rw-r--r--contrib/byacc/yacc.1242
1 files changed, 242 insertions, 0 deletions
diff --git a/contrib/byacc/yacc.1 b/contrib/byacc/yacc.1
new file mode 100644
index 000000000000..239380a360b1
--- /dev/null
+++ b/contrib/byacc/yacc.1
@@ -0,0 +1,242 @@
+.\" $Id: yacc.1,v 1.18 2012/01/15 18:12:28 tom Exp $
+.\"
+.\" .TH YACC 1 "July\ 15,\ 1990"
+.\" .UC 6
+.de ES
+.ne 8
+.nf
+.sp
+.in +4
+..
+.de EE
+.in -4
+.fi
+..
+.\" Bulleted paragraph
+.de bP
+.IP \(bu 4
+..
+.TH YACC 1 "September 7, 2011" "Berkeley Yacc" "User Commands"
+.SH NAME
+Yacc \- an LALR(1) parser generator
+.SH SYNOPSIS
+.B yacc [ -dgilrtv ] [ \-b
+.I file_prefix
+.B ] [ \-p
+.I symbol_prefix
+.B ]
+.I filename
+.SH DESCRIPTION
+.B Yacc
+reads the grammar specification in the file
+.I filename
+and generates an LALR(1) parser for it.
+The parsers consist of a set of LALR(1) parsing tables and a driver routine
+written in the C programming language.
+.B Yacc
+normally writes the parse tables and the driver routine to the file
+.IR y.tab.c.
+.PP
+The following options are available:
+.TP 5
+\fB\-b \fP\fIfile_prefix\fR
+The
+.B \-b
+option changes the prefix prepended to the output file names to
+the string denoted by
+.IR file_prefix.
+The default prefix is the character
+.IR y.
+.TP
+.B \-d
+The \fB-d\fR option causes the header file
+.BR y.tab.h
+to be written.
+It contains #define's for the token identifiers.
+.TP
+.B \-g
+The
+.B \-g
+option causes a graphical description of the generated LALR(1) parser to
+be written to the file
+.BR y.dot
+in graphviz format, ready to be processed by dot(1).
+.TP
+.B \-i
+The \fB-i\fR option causes a supplementary header file
+.BR y.tab.i
+to be written.
+It contains extern declarations
+and supplementary #define's as needed to map the conventional \fIyacc\fP
+\fByy\fP-prefixed names to whatever the \fB-p\fP option may specify.
+The code file, e.g., \fBy.tab.c\fP is modified to #include this file
+as well as the \fBy.tab.h\fP file, enforcing consistent usage of the
+symbols defined in those files.
+.IP
+The supplementary header file makes it simpler to separate compilation
+of lex- and yacc-files.
+.TP
+.B \-l
+If the
+.B \-l
+option is not specified,
+.B yacc
+will insert \fI#line\fP directives in the generated code.
+The \fI#line\fP directives let the C compiler relate errors in the
+generated code to the user's original code.
+If the \fB-l\fR option is specified,
+.B yacc
+will not insert the \fI#line\fP directives.
+\&\fI#line\fP directives specified by the user will be retained.
+.TP
+\fB\-o \fP\fIoutput_file\fR
+specify the filename for the parser file.
+If this option is not given, the output filename is
+the file prefix concatenated with the file suffix, e.g., \fBy.tab.c\fP.
+This overrides the \fB-p\fP option.
+.TP
+\fB\-p \fP\fIsymbol_prefix\fR
+The
+.B \-p
+option changes the prefix prepended to yacc-generated symbols to
+the string denoted by
+.IR symbol_prefix.
+The default prefix is the string
+.BR yy.
+.TP
+.B \-P
+create a reentrant parser, e.g., "%pure-parser".
+.TP
+.B \-r
+The
+.B \-r
+option causes
+.B yacc
+to produce separate files for code and tables. The code file
+is named
+.IR y.code.c,
+and the tables file is named
+.IR y.tab.c.
+The prefix "\fIy.\fP" can be overridden using the \fB\-b\fP option.
+.TP
+.B \-s
+suppress "\fB#define\fP" statements generated for string literals in
+a "\fB%token\fP" statement, to more closely match original \fByacc\fP behavior.
+.IP
+Normally when \fByacc\fP sees a line such as
+.ES
+%token OP_ADD "ADD"
+.EE
+.IP
+it notices that the quoted "ADD" is a valid C identifier,
+and generates a #define not only for OP_ADD,
+but for ADD as well,
+e.g.,
+.ES
+#define OP_ADD 257
+.br
+#define ADD 258
+.EE
+.IP
+The original \fByacc\fP does not generate the second "\fB#define\fP".
+The \fB\-s\fP option suppresses this "\fB#define\fP".
+.IP
+POSIX (IEEE 1003.1 2004) documents only names and numbers for "\fB%token\fP",
+though original \fByacc\fP and bison also accept string literals.
+.TP
+.B \-t
+The
+.B \-t
+option changes the preprocessor directives generated by
+.B yacc
+so that debugging statements will be incorporated in the compiled code.
+.TP
+.B \-v
+The
+.B \-v
+option causes a human-readable description of the generated parser to
+be written to the file
+.IR y.output.
+.TP
+.B \-V
+print the version number to the standard output.
+.TP
+.B \-y
+\fByacc\fP ignores this option,
+which bison supports for ostensible POSIX compatibility.
+.SH EXTENSIONS
+.B yacc
+provides some extensions for compatibility with bison and other implementations
+of yacc:
+.TP
+\fB %expect\fP \fInumber\fP
+tell \fByacc\fP the expected number of shift/reduce conflicts.
+That makes it only report the number if it differs.
+.TP
+\fB %expect-rr\fP \fInumber\fP
+tell \fByacc\fP the expected number of reduce/reduce conflicts.
+That makes it only report the number if it differs.
+This is (unlike bison) allowable in LALR parsers.
+.TP
+\fB %lex-param\fP { \fIargument-declaration\fP }
+By default, the lexer accepts no parameters, e.g., \fByylex()\fP.
+Use this directive to add parameter declarations for your customized lexer.
+.TP
+\fB %parse-param\fP { \fIargument-declaration\fP }
+By default, the parser accepts no parameters, e.g., \fByyparse()\fP.
+Use this directive to add parameter declarations for your customized parser.
+.TP
+\fB %pure-parser\fP
+Most variables (other than \fByydebug\fP and \fByynerrs\fP) are
+allocated on the stack within \fByyparse\fP, making the parser reasonably
+reentrant.
+.SH PORTABILITY
+According to Robert Corbett,
+.ES
+ Berkeley Yacc is an LALR(1) parser generator. Berkeley Yacc has been made
+as compatible as possible with AT&T Yacc. Berkeley Yacc can accept any input
+specification that conforms to the AT&T Yacc documentation. Specifications
+that take advantage of undocumented features of AT&T Yacc will probably be
+rejected.
+.EE
+.PP
+The rationale in
+.ES
+http://pubs.opengroup.org/onlinepubs/9699919799/utilities/yacc.html
+.EE
+.PP
+documents some features of AT&T yacc which are no longer required for POSIX
+compliance.
+.PP
+That said, you may be interested in reusing grammary files with some
+other implementation which is not strictly compatible with AT&T yacc.
+For instance, there is bison.
+Here are a few differences:
+.bP
+\fBYacc\fP accepts an equals mark preceding the left curly brace
+of an action (as in the original grammar file \fBftp.y\fP):
+.ES
+ | STAT CRLF
+ = {
+ statcmd();
+ }
+.EE
+.bP
+\fBYacc\fP and bison emit code in different order, and in particular bison
+makes forward reference to common functions such as yylex, yyparse and
+yyerror without providing prototypes.
+.bP
+Bison's support for "%expect" is broken in more than one release.
+For best results using bison, delete that directive.
+.bP
+Bison has no equivalent for some of \fByacc\fP's commmand-line options,
+relying on directives embedded in the grammar file.
+.bP
+Bison's "\fB\-y\fP" option does not affect bison's lack of support for
+features of AT&T yacc which were deemed obsolescent.
+.
+.SH DIAGNOSTICS
+If there are rules that are never reduced, the number of such rules is
+reported on standard error.
+If there are any LALR(1) conflicts, the number of conflicts is reported
+on standard error.