xref: /openbsd/usr.bin/yacc/yacc.1 (revision ec57cec5)
1.\"	$OpenBSD: yacc.1,v 1.33 2020/05/23 22:43:43 espie Exp $
2.\"
3.\" Copyright (c) 1989, 1990 The Regents of the University of California.
4.\" All rights reserved.
5.\"
6.\" This code is derived from software contributed to Berkeley by
7.\" Robert Paul Corbett.
8.\"
9.\" Redistribution and use in source and binary forms, with or without
10.\" modification, are permitted provided that the following conditions
11.\" are met:
12.\" 1. Redistributions of source code must retain the above copyright
13.\"    notice, this list of conditions and the following disclaimer.
14.\" 2. Redistributions in binary form must reproduce the above copyright
15.\"    notice, this list of conditions and the following disclaimer in the
16.\"    documentation and/or other materials provided with the distribution.
17.\" 3. Neither the name of the University nor the names of its contributors
18.\"    may be used to endorse or promote products derived from this software
19.\"    without specific prior written permission.
20.\"
21.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
22.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31.\" SUCH DAMAGE.
32.\"
33.\"	from: @(#)yacc.1	5.7 (Berkeley) 7/30/91
34.\"
35.Dd $Mdocdate: May 23 2020 $
36.Dt YACC 1
37.Os
38.Sh NAME
39.Nm yacc
40.Nd an LALR(1) parser generator
41.Sh SYNOPSIS
42.Nm yacc
43.Op Fl dlrtv
44.Op Fl b Ar file_prefix
45.Op Fl o Ar output_file
46.Op Fl p Ar symbol_prefix
47.Ar file
48.Sh DESCRIPTION
49.Nm
50reads the grammar specification in
51.Ar file
52and generates an LR(1) parser for it.
53The parsers consist of a set of LALR(1)
54parsing tables and a driver routine
55written in the C programming language.
56.Nm
57normally writes the parse tables and the driver routine to the file
58.Pa y.tab.c .
59.Pp
60The options are as follows:
61.Bl -tag -width Ds
62.It Fl b Ar file_prefix
63The
64.Fl b
65option changes the prefix prepended to the output file names to
66the string denoted by
67.Ar file_prefix .
68The default prefix is the character
69.Ar y .
70.It Fl d
71The
72.Fl d
73option causes the header file
74.Pa y.tab.h
75to be written.
76.It Fl l
77If the
78.Fl l
79option is not specified,
80.Nm
81will insert #line directives in the generated code.
82The #line directives let the C compiler relate errors in the
83generated code to the user's original code.
84If the
85.Fl l
86option is specified,
87.Nm
88will not insert the #line directives.
89#line directives specified by the user will be retained.
90.It Fl o Ar output_file
91The
92.Fl o
93option specifies an explicit name for the parser's output file name instead
94of the default.
95The names of the other output files are constructed from
96.Pa output_file
97as described under the
98.Fl d
99and
100.Fl v
101options.
102.It Fl p Ar symbol_prefix
103The
104.Fl p
105option changes the prefix prepended to yacc-generated symbols to
106the string denoted by
107.Ar symbol_prefix .
108The default prefix is the string
109.Ar yy .
110.It Fl r
111The
112.Fl r
113option causes
114.Nm
115to produce separate files for code and tables.
116The code file is named
117.Pa y.code.c ,
118and the tables file is named
119.Pa y.tab.c .
120.It Fl t
121The
122.Fl t
123option changes the preprocessor directives generated by
124.Nm
125so that debugging statements will be incorporated in the compiled code.
126.It Fl v
127The
128.Fl v
129option causes a human-readable description of the generated parser to
130be written to the file
131.Pa y.output .
132.El
133.Sh TABLES
134The names of the tables generated by this version of
135.Nm
136are
137.Dq yylhs ,
138.Dq yylen ,
139.Dq yydefred ,
140.Dq yydgoto ,
141.Dq yysindex ,
142.Dq yyrindex ,
143.Dq yygindex ,
144.Dq yytable ,
145and
146.Dq yycheck .
147Two additional tables,
148.Dq yyname
149and
150.Dq yyrule ,
151are created if
152.Dv YYDEBUG
153is defined and non-zero.
154.Sh FILES
155.Bl -tag -width /tmp/yacc.uXXXXXXXXXX -compact
156.It Pa y.code.c
157.It Pa y.tab.c
158.It Pa y.tab.h
159.It Pa y.output
160.El
161.Sh EXIT STATUS
162.Ex -std yacc
163.Sh DIAGNOSTICS
164If there are rules that are never reduced, the number of such rules is
165written to the standard error.
166If there are any LALR(1)
167conflicts, the number of conflicts is also written
168to the standard error.
169.Sh SEE ALSO
170.Xr yyfix 1
171.Rs
172.%A F. DeRemer
173.%A T. J. Pennello
174.%D 1982
175.%J TOPLAS
176.%N Issue 4
177.%P pp. 615\(en649
178.%T Efficient Computation of LALR(1) Look-Ahead Sets
179.%V Volume 4
180.Re
181.Sh STANDARDS
182The
183.Nm
184utility is compliant with the
185.St -p1003.1-2008
186specification,
187though its presence is optional.
188.Pp
189The flags
190.Op Fl or
191are extensions to that specification.
192.Sh HISTORY
193.Nm
194was originally developed at AT&T by
195.An Stephen C. Johnson .
196.Pp
197Berkeley
198.Nm
199was originally developed using PCC on a VAX with the
200intent of being as compatible as possible with
201.At
202.Nm .
203Much is owed to the unflagging efforts of Keith Bostic.
204His badgering kept me working on
205.Nm
206long after I was ready to quit.
207.Pp
208Berkeley
209.Nm
210is based on the excellent algorithm for computing
211LALR(1) lookaheads developed by
212.An Tom Pennello
213and
214.An Frank DeRemer .
215The algorithm is described in their almost impenetrable article in
216TOPLAS (see above).
217.Pp
218Finally, much credit must go to those who pointed out deficiencies
219of earlier releases.
220Among the most prolific contributors were
221Benson I. Margulies,
222Dave Gentzel,
223Antoine Verheijen,
224Peter S. Housel,
225Dale Smith,
226Ozan Yigit,
227John Campbell,
228Bill Sommerfeld,
229Paul Hilfinger,
230Gary Bridgewater,
231Dave Bakken,
232Dan Lanciani,
233Richard Sargent,
234and
235Parag Patel.
236.Sh AUTHORS
237The
238.Nm
239utility was written by
240.An Robert Corbett .
241