[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Bison 3.8.1 released
From: |
Geoffrey S. Knauth |
Subject: |
Re: Bison 3.8.1 released |
Date: |
Sat, 11 Sep 2021 17:51:48 -0400 |
Thank you!
Geoff Knauth (mobile)
> On Sep 11, 2021, at 16:39, Akim Demaille <akim@lrde.epita.fr> wrote:
>
> Hi,
>
> I'm very pleased to announce the release of Bison 3.8(.1), whose main
> novelty is the D backend for deterministic parsers, contributed by
> Adela Vais. It supports all the bells and whistles of Bison's other
> deterministic parsers, which include: pull/push interfaces, verbose
> and custom error messages, lookahead correction, LALR(1), IELR(1),
> canonical LR(1), token constructors, internationalization, locations,
> printers, token and symbol prefixes, and more.
>
> There are several other notable changes. Please see the detailed NEWS
> below for more details.
>
> Cheers!
>
> ==================================================================
>
> Here are the compressed sources:
> https://ftp.gnu.org/gnu/bison/bison-3.8.1.tar.gz (6.1MB)
> https://ftp.gnu.org/gnu/bison/bison-3.8.1.tar.lz (3.1MB)
> https://ftp.gnu.org/gnu/bison/bison-3.8.1.tar.xz (3.1MB)
>
> Here are the GPG detached signatures[*]:
> https://ftp.gnu.org/gnu/bison/bison-3.8.1.tar.gz.sig
> https://ftp.gnu.org/gnu/bison/bison-3.8.1.tar.lz.sig
> https://ftp.gnu.org/gnu/bison/bison-3.8.1.tar.xz.sig
>
> Use a mirror for higher download bandwidth:
> https://www.gnu.org/order/ftp.html
>
> Here are the SHA1 and SHA256 checksums:
>
> 79e97c868475c0e20286d62021f2a7cfd20610f7 bison-3.8.1.tar.gz
> zjGKRxlhVft8JpErUTEC89DhR1fC5JXjRgh1e2EznFw bison-3.8.1.tar.gz
> e7fe4142c22ac5353ec4416652a56e9da951ffa5 bison-3.8.1.tar.lz
> AJ2nWoBj4aO9IVRrN+UkISBWiR/CySr6EanzlphoIbg bison-3.8.1.tar.lz
> 9772ea3130d6cbddaefe29a659698775a5701394 bison-3.8.1.tar.xz
> MfxgJIiq1r3s8MzFVuD8cvxXzcWVz5I5jwIODPSYDxU bison-3.8.1.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.1.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
> Gettext 0.20.1.153-6c39c
> Gnulib v0.1-4853-g964ce0a92
>
> ==================================================================
>
> 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/.
>
> ==================================================================
>
> NEWS
>
> * 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.
>
> 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
>
> exp
> ↳ 1: e1 e2 "a"
> ↳ 3: ε • ↳ 1: ε
>
> instead of
>
> exp
> ↳ 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.
>
>
> --
> If you have a working or partly working program that you'd like
> to offer to the GNU project as a GNU package,
> see https://www.gnu.org/help/evaluation.html.