243 lines
6.6 KiB
Groff
243 lines
6.6 KiB
Groff
|
.\" $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.
|