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