mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-19 09:13:04 +00:00
doc: document best deployment practices.
* doc/bison.texi (Versioning): New node about practices regarding dealing with multiple versions of Bison.
This commit is contained in:
committed by
Akim Demaille
parent
1ff6bcb2f1
commit
3c47ed0fe6
@@ -244,6 +244,7 @@ Reference sections:
|
|||||||
* Invocation:: How to run Bison (to produce the parser implementation).
|
* Invocation:: How to run Bison (to produce the parser implementation).
|
||||||
* Other Languages:: Creating C++ and Java parsers.
|
* Other Languages:: Creating C++ and Java parsers.
|
||||||
* History:: How Bison came to be
|
* History:: How Bison came to be
|
||||||
|
* Versioning:: Dealing with Bison versioning
|
||||||
* FAQ:: Frequently Asked Questions
|
* FAQ:: Frequently Asked Questions
|
||||||
* Table of Symbols:: All the keywords of the Bison language are explained.
|
* Table of Symbols:: All the keywords of the Bison language are explained.
|
||||||
* Glossary:: Basic concepts are explained.
|
* Glossary:: Basic concepts are explained.
|
||||||
@@ -540,6 +541,10 @@ A Brief History of the Greater Ungulates
|
|||||||
* Bison:: This program
|
* Bison:: This program
|
||||||
* Other Ungulates:: Similar programs
|
* Other Ungulates:: Similar programs
|
||||||
|
|
||||||
|
Bison Version Compatibility
|
||||||
|
|
||||||
|
* Versioning:: Dealing with Bison versioning
|
||||||
|
|
||||||
Frequently Asked Questions
|
Frequently Asked Questions
|
||||||
|
|
||||||
* Memory Exhausted:: Breaking the Stack Limits
|
* Memory Exhausted:: Breaking the Stack Limits
|
||||||
@@ -14675,6 +14680,67 @@ still in use is David Beazley's ``PLY'' (Python Lex-Yacc) for
|
|||||||
Python. Another is goyacc, supporting the Go language. An ``ocamlyacc''
|
Python. Another is goyacc, supporting the Go language. An ``ocamlyacc''
|
||||||
is shipped as part of the Ocaml compiler suite.
|
is shipped as part of the Ocaml compiler suite.
|
||||||
|
|
||||||
|
@c ================================================= Version Compatibility
|
||||||
|
|
||||||
|
@node Versioning
|
||||||
|
|
||||||
|
@chapter Bison Version Compatibility: Best Practices
|
||||||
|
@cindex version
|
||||||
|
@cindex compatibility
|
||||||
|
|
||||||
|
Bison provides a Yacc compatibility mode in which it strives to conform with
|
||||||
|
the POSIX standard. Grammar files which are written to the POSIX standard, and
|
||||||
|
do not take advantage of any of the special capabilities of Bison, should
|
||||||
|
work with many version of Bison without modification.
|
||||||
|
|
||||||
|
All other features of Bison are particular to Bison, and are changing. Bison
|
||||||
|
is actively maintained and continuously evolving. It should come as no
|
||||||
|
surprise that an older version of Bison will not accept Bison source code which
|
||||||
|
uses newer features that do no not exist at all in the older Bison.
|
||||||
|
Regrettably, in spite of reasonable effort to maintain compatibility, the
|
||||||
|
reverse situation may also occur: it may happen that code developed using an
|
||||||
|
older version of Bison does not build with a newer version of Bison without
|
||||||
|
modifications.
|
||||||
|
|
||||||
|
Because Bison is a code generation tool, it is possible to retain its output
|
||||||
|
and distribute that to the users of the program. The users are then not
|
||||||
|
required to have Bison installed at all, only an implementation of the
|
||||||
|
programming language, such as C, which is required for processing the generated
|
||||||
|
output.
|
||||||
|
|
||||||
|
It is the output of Bison that is intended to be of the utmost portability.
|
||||||
|
So, that is to say, whereas the Bison grammar source code may have a dependency
|
||||||
|
on specific versions of Bison, the generated parser from any version of Bison
|
||||||
|
should work with with a large number of implementations of C, or whatever
|
||||||
|
language is applicable.
|
||||||
|
|
||||||
|
The recommended best practice for using Bison (in the context of software that
|
||||||
|
is distributed in source code form) is to ship the generated parser to the
|
||||||
|
downstream users. Only those downstream users who engage in active development
|
||||||
|
of the program who need to make changes to the grammar file need to have Bison
|
||||||
|
installed at all, and those users can install the specific version of Bison
|
||||||
|
which is required.
|
||||||
|
|
||||||
|
Following this recommended practice also makes it possible to use a more recent
|
||||||
|
Bison than what is available to users through operating system distributions,
|
||||||
|
thereby taking advantage of the latest techniques that Bison allows.
|
||||||
|
|
||||||
|
Some features of Bison have been, or are being adopted into other Yacc-like
|
||||||
|
programs. Therefore it might seem that is a good idea to write grammar code
|
||||||
|
which targets multiple implementations, similarly to the way C programs are
|
||||||
|
often written to target multiple compilers and language versions. Other than
|
||||||
|
the Yacc subset described by POSIX, the Bison language is not rigorously
|
||||||
|
standardized. When a Bison feature is adopted by another parser generator, it
|
||||||
|
may be initially compatible with that version of Bison on which it was based,
|
||||||
|
but the compatibility may degrade going forward. Developers who strive to make
|
||||||
|
their Bison code simultaneously compatible with other parser generators are
|
||||||
|
encouraged to nevertheless use specific versions of all generators, and still
|
||||||
|
follow the recommended practice of shipping generated output. For example,
|
||||||
|
a project can internally maintain compatibility with multiple generators,
|
||||||
|
and choose the output of a particular one to ship to the users. Or else,
|
||||||
|
the project could ship all of the outputs, arranging for a way for the user
|
||||||
|
to specify which one is used to build the program.
|
||||||
|
|
||||||
@c ================================================= FAQ
|
@c ================================================= FAQ
|
||||||
|
|
||||||
@node FAQ
|
@node FAQ
|
||||||
|
|||||||
Reference in New Issue
Block a user