Hi, I'm very pleased to announce the forthcoming (next week?) release of Bison 3.8, 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. To make sure Bison 3.8 is a successful release, we need feedback on this beta. *Please test it!* Cheers! ================================================================== Here are the compressed sources: https://alpha.gnu.org/gnu/bison/bison-3.7.91.tar.gz (6.1MB) https://alpha.gnu.org/gnu/bison/bison-3.7.91.tar.lz (3.1MB) https://alpha.gnu.org/gnu/bison/bison-3.7.91.tar.xz (3.1MB) Here are the GPG detached signatures[*]: https://alpha.gnu.org/gnu/bison/bison-3.7.91.tar.gz.sig https://alpha.gnu.org/gnu/bison/bison-3.7.91.tar.lz.sig https://alpha.gnu.org/gnu/bison/bison-3.7.91.tar.xz.sig Use a mirror for higher download bandwidth: https://www.gnu.org/order/ftp.html Here are the SHA1 and SHA256 checksums: aa743c5a4d931108bdd419a62a906d8df2c7f6e3 bison-3.7.91.tar.gz 2q4fi2S8shDkuS0r7IOSKLpYx+leEJ3+WF9PQM9dWuw bison-3.7.91.tar.gz 573ee882470cc1404c3511691b93ad476ac0fe5e bison-3.7.91.tar.lz SLtogiFh1hBldiExE3o7D7yMy9/o4meB4HICGa0XVa8 bison-3.7.91.tar.lz 7faa822a1a4c3564aa9d73c03c7277dcb847d4de bison-3.7.91.tar.xz NvESKtwyWp6rVBN6+fT9HjOdCfLFajlRkTF6Y5UzYWU bison-3.7.91.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.7.91.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 NEWS * Noteworthy changes in release 3.7.91 (2021-09-02) [beta] Portability issues in the test suite and in C++ skeletons. * Noteworthy changes in release 3.7.90 (2021-08-13) [beta] ** 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.
