Bison
The YACC-compatible Parser Generator
November , Bison Version .
by Charles Donnelly and Richard Stallman
Copyright c , , , , , , Free Software Foundation
Published by the Free Software Foundation
Temple Place, Suite
Boston, MA - USA
Printed copies are available for $ each.
ISBN ---
Permission is granted to make and distribute verbatim copies of this manual provided the
copyright notice and this permission notice are preserved on all copies.
Permission is granted to copy and distribute modied versions of this manual under the
conditions for verbatim copying, provided also that the sections entitled \GNU General
Public License" and \Conditions for Using Bison" are included exactly as in the original,
and provided that the entire resulting derived work is distributed under the terms of a
permission notice identical to this one.
Permission is granted to copy and distribute translations of this manual into another lan-
guage, under the above conditions for modied versions, except that the sections entitled
\GNU General Public License", \Conditions for Using Bison" and this permission notice
may be included in translations approved by the Free Software Foundation instead of in the
original English.
Cover art by Etienne Suvasa.
Introduction
Introduction
Bison is a general-purpose parser generator that converts a grammar description for an
LALR() context-free grammar into a C program to parse that grammar. Once you are
procient with Bison, you may use it to develop a wide range of language parsers, from
those used in simple desk calculators to complex programming languages.
Bison is upward compatible with Yacc: all properly-written Yacc grammars ought to
work with Bison with no change. Anyone familiar with Yacc should be able to use Bison
with little trouble. You need to be uent in C programming in order to use Bison or to
understand this manual.
We begin with tutorial chapters that explain the basic concepts of using Bison and show
three explained examples, each building on the last.
If you don’t know Bison or Yacc,
start by reading these chapters. Reference chapters follow which describe specic aspects
of Bison in detail.
Bison was written primarily by Robert Corbett; Richard Stallman made it Yacc-
compatible. Wilfred Hansen of Carnegie Mellon University added multicharacter string
literals and other features.
This edition corresponds to version . of Bison.
Bison .
Conditions for Using Bison
Conditions for Using Bison
As of Bison version ., we have changed the distribution terms for yyparse to permit
using Bison’s output in non-free programs. Formerly, Bison parsers could be used only in
programs that were free software.
The other GNU programming tools, such as the GNU C compiler, have never had such
a requirement. They could always be used for non-free software. The reason Bison was
dierent was not due to a special policy decision; it resulted from applying the usual General
Public License to all of the Bison source code.
The output of the Bison utility|the Bison parser le|contains a verbatim copy of a
sizable piece of Bison, which is the code for the yyparse function. (The actions from your
grammar are inserted into this function at one point, but the rest of the function is not
changed.) When we applied the GPL terms to the code for yyparse, the eect was to
restrict the use of Bison output to free software.
We didn’t change the terms because of sympathy for people who want to make software
proprietary. Software should be free. But we concluded that limiting Bison’s use to free
software was doing little to encourage people to make other software free. So we decided to
make the practical conditions for using Bison match the practical conditions for using the
other GNU tools.
Bison .
GNU GENERAL PUBLIC LICENSE
GNU GENERAL PUBLIC LICENSE
Version , June
Copyright c , Free Software Foundation, Inc.
Mass Ave, Cambridge, MA , USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your freedom to share and
change it. By contrast, the GNU General Public License is intended to guarantee your
freedom to share and change free software|to make sure the software is free for all its users.
This General Public License applies to most of the Free Software Foundation’s software
and to any other program whose authors commit to using it. (Some other Free Software
Foundation software is covered by the GNU Library General Public License instead.) You
can apply it to your programs, too.
When we speak of free software, we are referring to freedom, not price. Our General
Public Licenses are designed to make sure that you have the freedom to distribute copies
of free software (and charge for this service if you wish), that you receive source code or
can get it if you want it, that you can change the software or use pieces of it in new free
programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid anyone to deny you
these rights or to ask you to surrender the rights. These restrictions translate to certain
responsibilities for you if you distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether gratis or for a fee, you
must give the recipients all the rights that you have. You must make sure that they, too,
receive or can get the source code. And you must show them these terms so they know
their rights.
We protect your rights with two steps: () copyright the software, and () oer you this
license which gives you legal permission to copy, distribute and/or modify the software.
Also, for each author’s protection and ours, we want to make certain that everyone
understands that there is no warranty for this free software. If the software is modied by
someone else and passed on, we want its recipients to know that what they have is not the
original, so that any problems introduced by others will not reect on the original authors’
reputations.
Finally, any free program is threatened constantly by software patents. We wish to avoid
the danger that redistributors of a free program will individually obtain patent licenses, in
eect making the program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone’s free use or not licensed at all.
The precise terms and conditions for copying, distribution and modication follow.
Bison .
TERMS AND CONDITIONS FOR COPYING,
DISTRIBUTION AND MODIFICATION
. This License applies to any program or other work which contains a notice placed
by the copyright holder saying it may be distributed under the terms of this General
Public License. The \Program", below, refers to any such program or work, and a
\work based on the Program" means either the Program or any derivative work under
copyright law: that is to say, a work containing the Program or a portion of it, either
verbatim or with modications and/or translated into another language. (Hereinafter,
translation is included without limitation in the term \modication".) Each licensee is
addressed as \you".
Activities other than copying, distribution and modication are not covered by this
License; they are outside its scope. The act of running the Program is not restricted,
and the output from the Program is covered only if its contents constitute a work based
on the Program (independent of having been made by running the Program). Whether
that is true depends on what the Program does.
. You may copy and distribute verbatim copies of the Program’s source code as you
receive it, in any medium, provided that you conspicuously and appropriately publish
on each copy an appropriate copyright notice and disclaimer of warranty; keep intact
all the notices that refer to this License and to the absence of any warranty; and give
any other recipients of the Program a copy of this License along with the Program.
You may charge a fee for the physical act of transferring a copy, and you may at your
option oer warranty protection in exchange for a fee.
. You may modify your copy or copies of the Program or any portion of it, thus forming a
work based on the Program, and copy and distribute such modications or work under
the terms of Section above, provided that you also meet all of these conditions:
a. You must cause the modied les to carry prominent notices stating that you
changed the les and the date of any change.
b. You must cause any work that you distribute or publish, that in whole or in part
contains or is derived from the Program or any part thereof, to be licensed as a
whole at no charge to all third parties under the terms of this License.
c. If the modied program normally reads commands interactively when run, you
must cause it, when started running for such interactive use in the most ordinary
way, to print or display an announcement including an appropriate copyright notice
and a notice that there is no warranty (or else, saying that you provide a warranty)
and that users may redistribute the program under these conditions, and telling
the user how to view a copy of this License. (Exception: if the Program itself is
interactive but does not normally print such an announcement, your work based
on the Program is not required to print an announcement.)
These requirements apply to the modied work as a whole.
If identiable sections
of that work are not derived from the Program, and can be reasonably considered
independent and separate works in themselves, then this License, and its terms, do not
apply to those sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based on the Program,
the distribution of the whole must be on the terms of this License, whose permissions