[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Bison 3.8.2

From: Akim Demaille
Subject: Bison 3.8.2
Date: Sat, 25 Sep 2021 11:53:03 +0200

Bison 3.8.2 fixes portability issues of bison on Cygwin, and brings
improvements to glr2.cc: support for custom error messages (`%define
parse.error custom`), and allow linking several parsers together.


Here are the compressed sources:
 https://ftp.gnu.org/gnu/bison/bison-3.8.2.tar.gz   (6.3MB)
 https://ftp.gnu.org/gnu/bison/bison-3.8.2.tar.lz   (3.1MB)
 https://ftp.gnu.org/gnu/bison/bison-3.8.2.tar.xz   (3.1MB)

Here are the GPG detached signatures[*]:

Use a mirror for higher download bandwidth:

Here are the SHA1 and SHA256 checksums:

8e4b861eb765a7797ea0a6257ec600b3ff5ee37d  bison-3.8.2.tar.gz
BsnhO99+sk1M62tZIFpPZ8LH5yExGWREMP6C+9FKCrs  bison-3.8.2.tar.gz
36d4ade17c554a27551bdcf9e939ae438ad077c9  bison-3.8.2.tar.lz
/fmL/oKrsEo01DVnU/d0jbvS7xIhsfIChSorXOD3hTQ  bison-3.8.2.tar.lz
da1522a00f8c23c1abf69dbd2e99078d2a484b96  bison-3.8.2.tar.xz
m7oCFMz38QecXVkhAEUie89hlRmEDr+oDNOEnP9aW/I  bison-3.8.2.tar.xz

The SHA256 checksum is base64 encoded, instead of the
hexadecimal encoding that most checksum tools default to.

[*] Use a .sig file to verify that the corresponding file (without the
.sig suffix) is intact.  First, be sure to download both the .sig file
and the corresponding tarball.  Then, run a command like this:

 gpg --verify bison-3.8.2.tar.gz.sig

If that command fails because you don't have the required public key,
then run this command to import it:

 gpg --keyserver keys.gnupg.net --recv-keys 0DDCAA3278D5264E

and rerun the 'gpg --verify' command.

This release was bootstrapped with the following tools:
 Autoconf 2.71
 Automake 1.16b
 Flex 2.6.4
 Gnulib v0.1-4916-g781845562


GNU Bison is a general-purpose parser generator that converts an annotated
context-free grammar into a deterministic LR or generalized LR (GLR) parser
employing LALR(1) parser tables.  Bison can also generate IELR(1) or
canonical LR(1) parser tables.  Once you are proficient with Bison, you can
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
work with Bison with no change.  Anyone familiar with Yacc should be able to
use Bison with little trouble.  You need to be fluent in C, C++, D or Java
programming in order to use Bison.

Bison and the parsers it generates are portable, they do not require any
specific compilers.

GNU Bison's home page is https://gnu.org/software/bison/.



* Noteworthy changes in release 3.8.2 (2021-09-25) [stable]

 Fixed portability issues of bison on Cygwin.

 Improvements in glr2.cc: add support for custom error messages (`%define
 parse.error custom`), allow linking several parsers together.

* Noteworthy changes in release 3.8.1 (2021-09-11) [stable]

 The generation of prototypes for yylex and yyerror in Yacc mode is
 breaking existing grammar files.  To avoid breaking too many grammars, the
 prototypes are now generated when `-y/--yacc` is used *and* the
 `POSIXLY_CORRECT` environment variable is defined.

 Avoid using `-y`/`--yacc` simply to comply with Yacc's file name
 conventions, rather, use `-o y.tab.c`.  Autoconf's AC_PROG_YACC macro uses
 `-y`.  Avoid it if possible, for instance by using gnulib's gl_PROG_BISON.

* Noteworthy changes in release 3.8 (2021-09-07) [stable]

** Backward incompatible changes

 In conformance with the recommendations of the Graphviz team
 (https://marc.info/?l=graphviz-devel&m=129418103126092), `-g`/`--graph`
 now generates a *.gv file by default, instead of *.dot.  A transition
 started in Bison 3.4.

 To comply with the latest POSIX standard, in Yacc compatibility mode
 (options `-y`/`--yacc`) Bison now generates prototypes for yyerror and
 yylex.  In some situations, this is breaking compatibility: if the user
 has already declared these functions but with some differences (e.g., to
 declare them as static, or to use specific attributes), the generated
 parser will fail to compile.  To disable these prototypes, #define yyerror
 (to `yyerror`), and likewise for yylex.

** Deprecated features

 Support for the YYPRINT macro is removed. It worked only with yacc.c and
 only for tokens.  It was obsoleted by %printer, introduced in Bison 1.50
 (November 2002).

 It has always been recommended to prefer `%define api.value.type foo` to
 `#define YYSTYPE foo`.  The latter is supported in C for compatibility
 with Yacc, but not in C++.  Warnings are now issued if `#define YYSTYPE`
 is used in C++, and eventually support will be removed.

 In C++ code, prefer value_type to semantic_type to denote the semantic
 value type, which is specified by the `api.value.type` %define variable.

** New features

*** A skeleton for the D programming language

 The "lalr1.d" skeleton is now officially part of Bison.

 It was originally contributed by Oliver Mangold, based on Paolo Bonzini's
 lalr1.java, and was improved by H. S. Teoh.  Adela Vais then took over
 maintenance and invested a lot of efforts to complete, test and document

 It now supports all the bells and whistles of the other deterministic
 parsers, which include: pull/push interfaces, verbose and custom error
 messages, lookahead correction, token constructors, internationalization,
 locations, printers, token and symbol prefixes, etc.

 Two examples demonstrate the D parsers: a basic one (examples/d/simple),
 and an advanced one (examples/d/calc).

*** Option -H, --header and directive %header

 The option `-H`/`--header` supersedes the option `--defines`, and the
 directive %header supersedes %defines.  Both `--defines` and `%defines`
 are, of course, maintained for backward compatibility.

*** Option --html

 Since version 2.4 Bison can be used to generate HTML reports.  However it
 was a two-step process: first bison must be invoked with option `--xml`,
 and then xsltproc must be run to the convert the XML reports into HTML.

 The new option `--html` combines these steps.  The xsltproc program must
 be available.

*** A C++ native GLR parser

 A new version of the C++ GLR parser was added: "glr2.cc".  It generates
 "true C++11", instead of a C++ wrapper around a C parser as does the
 existing "glr.cc" parser.  As a first significant consequence, it supports
 `%define api.value.type variant`, contrary to glr.cc.

 It should be upward compatible in terms of interface, feature and
 performance to "glr.cc". To try it out, simply use

 %skeleton "glr2.cc"

 It will eventually replace "glr.cc".  However we need user feedback on
 this skeleton.  _Please_ report your results and comments about it.

*** Counterexamples

 Counterexamples now show the rule numbers, and always show ε for rules
 with an empty right-hand side.  For instance

   ↳ 1: e1       e2     "a"
        ↳ 3: ε • ↳ 1: ε

 instead of

   ↳ e1  e2  "a"
     ↳ • ↳ ε

*** Lookahead correction in Java

 The Java skeleton (lalr1.java) now supports LAC, via the `parse.lac`
 %define variable.

*** Abort parsing for memory exhaustion (C)

 User actions may now use `YYNOMEM` (similar to `YYACCEPT` and `YYABORT`)
 to abort the current parse with memory exhaustion.

*** Printing locations in debug traces (C)

 The `YYLOCATION_PRINT(File, Loc)` macro prints a location.  It is defined
 when (i) locations are enabled, (ii) the default type for locations is
 used, (iii) debug traces are enabled, and (iv) `YYLOCATION_PRINT` is not
 already defined.

 Users may define `YYLOCATION_PRINT` to cover other cases.

*** GLR traces

 There were no debug traces for deferred calls to user actions.  They are
 logged now.

reply via email to

[Prev in Thread] Current Thread [Next in Thread]