Bison test version 2.3b available

"Joel E. Denny" <jdenny@ces.clemson.edu>
Tue, 27 May 2008 23:08:29 -0400 (EDT)

          From comp.compilers

Related articles
Bison test version 2.3b available jdenny@ces.clemson.edu (Joel E. Denny) (2008-05-27)
| List of all articles for this month |

From: "Joel E. Denny" <jdenny@ces.clemson.edu>
Newsgroups: comp.compilers
Date: Tue, 27 May 2008 23:08:29 -0400 (EDT)
Organization: Compilers Central
Keywords: yacc, parse, available
Posted-Date: 27 May 2008 23:59:11 EDT

Bison test version 2.3b is now available. This version contains many bug
fixes and many exciting new features that need more user feedback. Some
of the more notable features are:


    1. XML or Graphviz DOT format for the LALR(1) automaton.
    2. Push parsers.
    3. Java-based parsers.
    4. %code, a flexible alternative to traditional Yacc prologue blocks.
    5. Default %destructor and %printer directives.


See "Bison News" below for further details.


Here is the URL where you can download Bison 2.3b:


    ftp://alpha.gnu.org/gnu/bison/bison-2.3b.tar.gz


Here are the MD5 and SHA512 checksums:


    f52b1fb9fce6d60d8a2e11fa5498fce0 bison-2.3b.tar.gz
    72660b254d285d7b88388d7aee613c47e7e671338ccebcb3e208e2aad816f14d45b25e579f624de375031b77ac648705ffea3a1e4c4727b4bf3f1758bfcedd47 bison-2.3b.tar.gz


To try this test version, please make sure you have at least GNU m4 1.4.6
<ftp://ftp.gnu.org/gnu/m4/m4-1.4.6.tar.gz> installed, and then execute the
following shell commands or their equivalents:


      wget ftp://alpha.gnu.org/gnu/bison/bison-2.3b.tar.gz
      gunzip <bison-2.3b.tar.gz | tar xf -
      cd bison-2.3b
      ./configure
      make
      make check


We particularly appreciate tests on unusual hosts.


Please report bugs to <bug-bison@gnu.org>.


Bison is a parser generator that is compatible with Yacc.
Please see <http://www.gnu.org/software/bison/> for more info about Bison.


Here is a list of user-visible changes in version 2.3b, compared to 2.3a:


Bison News
* The quotes around NAME that used to be required in the following directive
    are now deprecated:


        %define NAME "VALUE"


* The directive `%pure-parser' is now deprecated in favor of:


        %define api.pure


    which has the same effect except that Bison is more careful to warn about
    unreasonable usage in the latter case.


* Push Parsing


    Bison can now generate an LALR(1) parser in C with a push interface. That
    is, instead of invoking `yyparse', which pulls tokens from `yylex', you can
    push one token at a time to the parser using `yypush_parse', which will
    return to the caller after processing each token. By default, the push
    interface is disabled. Either of the following directives will enable it:


        %define api.push_pull "push" // Just push; does not require yylex.
        %define api.push_pull "both" // Push and pull; requires yylex.


    See the new section `A Push Parser' in the Bison manual for details.


    The current push parsing interface is experimental and may evolve. More user
    feedback will help to stabilize it.


* The -g and --graph options now output graphs in Graphviz DOT format,
    not VCG format. Like --graph, -g now also takes an optional FILE argument
    and thus cannot be bundled with other short options.


* Java


    Bison can now generate an LALR(1) parser in Java. The skeleton is
    `data/lalr1.java'. Consider using the new %language directive instead of
    %skeleton to select it.


    See the new section `Java Parsers' in the Bison manual for details.


    The current Java interface is experimental and may evolve. More user
    feedback will help to stabilize it.


* %language


    This new directive specifies the programming language of the generated
    parser, which can be C (the default), C++, or Java. This directive affects
    the skeleton used and the names of the generated files if the grammar file's
    name ends in ".y".


* XML Automaton Report


    Bison can now generate an XML report of the LALR(1) automaton using the new
    `--xml' option. The current XML schema is experimental and may evolve. More
    user feedback will help to stabilize it.


* The grammar file may now specify the name of the parser header file using
    %defines. For example:


        %defines "parser.h"


* When reporting useless rules, useless nonterminals, and unused terminals,
    Bison now employs the terms "useless in grammar" instead of "useless",
    "useless in parser" instead of "never reduced", and "unused in grammar"
    instead of "unused".


* Unreachable State Removal


    Previously, Bison sometimes generated parser tables containing unreachable
    states. A state can become unreachable during conflict resolution if Bison
    disables a shift action leading to it from a predecessor state. Bison now:


        1. Removes unreachable states.


        2. Does not report any conflicts that appeared in unreachable states.
              WARNING: As a result, you may need to update %expect and %expect-rr
              directives in existing grammar files.


        3. For any rule used only in such states, Bison now reports the rule as
              "useless in parser due to conflicts".


    This feature can be disabled with the following directive:


        %define lr.keep_unreachable_states


    See the %define entry in the `Bison Declaration Summary' in the Bison manual
    for further discussion.


* Lookahead Set Correction in the `.output' Report


    When instructed to generate a `.output' file including lookahead sets
    (using `--report=lookahead', for example), Bison now prints each reduction's
    lookahead set only next to the associated state's one item that (1) is
    associated with the same rule as the reduction and (2) has its dot at the end
    of its RHS. Previously, Bison also erroneously printed the lookahead set
    next to all of the state's other items associated with the same rule. This
    bug affected only the `.output' file and not the generated parser source
    code.


* --report-file=FILE is a new option to override the default `.output' file
    name.


* The `=' that used to be required in the following directives is now
    deprecated:


        %file-prefix "parser"
        %name-prefix "c_"
        %output "parser.c"


* An Alternative to `%{...%}' -- `%code QUALIFIER {CODE}'


    Bison 2.3a provided a new set of directives as a more flexible alternative to
    the traditional Yacc prologue blocks. Those have now been consolidated into
    a single %code directive with an optional qualifier field, which identifies
    the purpose of the code and thus the location(s) where Bison should generate
    it:


        1. `%code {CODE}' replaces `%after-header {CODE}'
        2. `%code requires {CODE}' replaces `%start-header {CODE}'
        3. `%code provides {CODE}' replaces `%end-header {CODE}'
        4. `%code top {CODE}' replaces `%before-header {CODE}'


    See the %code entries in section `Bison Declaration Summary' in the Bison
    manual for a summary of the new functionality. See the new section `Prologue
    Alternatives' for a detailed discussion including the advantages of %code
    over the traditional Yacc prologues.


    The prologue alternatives are experimental. More user feedback will help to
    determine whether they should become permanent features.


* Revised warning: unset or unused mid-rule values


    Since Bison 2.2, Bison has warned about mid-rule values that are set but not
    used within any of the actions of the parent rule. For example, Bison warns
    about unused $2 in:


        exp: '1' { $$ = 1; } '+' exp { $$ = $1 + $4; };


    Now, Bison also warns about mid-rule values that are used but not set. For
    example, Bison warns about unset $$ in the mid-rule action in:


        exp: '1' { $1 = 1; } '+' exp { $$ = $2 + $4; };


    However, Bison now disables both of these warnings by default since they
    sometimes prove to be false alarms in existing grammars employing the Yacc
    constructs $0 or $-N (where N is some positive integer).


    To enable these warnings, specify the option `--warnings=midrule-values' or
    `-W', which is a synonym for `--warnings=all'.


* Default %destructor or %printer with `<*>' or `<>'


    Bison now recognizes two separate kinds of default %destructor's and
    %printer's:


        1. Place `<*>' in a %destructor/%printer symbol list to define a default
              %destructor/%printer for all grammar symbols for which you have formally
              declared semantic type tags.


        2. Place `<>' in a %destructor/%printer symbol list to define a default
              %destructor/%printer for all grammar symbols without declared semantic
              type tags.


    Bison no longer supports the `%symbol-default' notation from Bison 2.3a.
    `<*>' and `<>' combined achieve the same effect with one exception: Bison no
    longer applies any %destructor to a mid-rule value if that mid-rule value is
    not actually ever referenced using either $$ or $n in a semantic action.


    The default %destructor's and %printer's are experimental. More user
    feedback will help to determine whether they should become permanent
    features.


    See the section `Freeing Discarded Symbols' in the Bison manual for further
    details.


* %left, %right, and %nonassoc can now declare token numbers. This is required
    by POSIX. However, see the end of section `Operator Precedence' in the Bison
    manual for a caveat concerning the treatment of literal strings.


* The nonfunctional --no-parser, -n, and %no-parser options have been
    completely removed from Bison.


Post a followup to this message

Return to the comp.compilers page.
Search the comp.compilers archives again.