bison @ Savannah: Bison 3.8.1 released

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.

#gnu #gnuorg #opensource

There are no comments yet.