Bison News
----------

Changes in version 2.3, 2006-06-05:

* GLR grammars should now use `YYRECOVERING ()' instead of `YYRECOVERING',
  for compatibility with LALR(1) grammars.

* It is now documented that any definition of YYSTYPE or YYLTYPE should
  be to a type name that does not contain parentheses or brackets.

Changes in version 2.2, 2006-05-19:

* The distribution terms for all Bison-generated parsers now permit
  using the parsers in nonfree programs.  Previously, this permission
  was granted only for Bison-generated LALR(1) parsers in C.

* %name-prefix changes the namespace name in C++ outputs.

* The C++ parsers export their token_type.

* Bison now allows multiple %union declarations, and concatenates
  their contents together.

* New warning: unused values
  Right-hand side symbols whose values are not used are reported,
  if the symbols have destructors.  For instance:

     exp: exp "?" exp ":" exp { $1 ? $1 : $3; }
	| exp "+" exp
	;

  will trigger a warning about $$ and $5 in the first rule, and $3 in
  the second ($1 is copied to $$ by the default rule).  This example
  most likely contains three errors, and could be rewritten as:

     exp: exp "?" exp ":" exp
	    { $$ = $1 ? $3 : $5; free ($1 ? $5 : $3); free ($1); }
	| exp "+" exp
	    { $$ = $1 ? $1 : $3; if ($1) free ($3); }
	;

  However, if the original actions were really intended, memory leaks
  and all, the warnings can be suppressed by letting Bison believe the
  values are used, e.g.:

     exp: exp "?" exp ":" exp { $1 ? $1 : $3; (void) ($$, $5); }
	| exp "+" exp         { $$ = $1; (void) $3; }
	;

  If there are mid-rule actions, the warning is issued if no action
  uses it.  The following triggers no warning: $1 and $3 are used.

     exp: exp { push ($1); } '+' exp { push ($3); sum (); };

  The warning is intended to help catching lost values and memory leaks.
  If a value is ignored, its associated memory typically is not reclaimed.

* %destructor vs. YYABORT, YYACCEPT, and YYERROR.
  Destructors are now called when user code invokes YYABORT, YYACCEPT,
  and YYERROR, for all objects on the stack, other than objects
  corresponding to the right-hand side of the current rule.

* %expect, %expect-rr
  Incorrect numbers of expected conflicts are now actual errors,
  instead of warnings.

* GLR, YACC parsers.
  The %parse-params are available in the destructors (and the
  experimental printers) as per the documentation.

* Bison now warns if it finds a stray `$' or `@' in an action.

* %require "VERSION"
  This specifies that the grammar file depends on features implemented
  in Bison version VERSION or higher.

* lalr1.cc: The token and value types are now class members.
  The tokens were defined as free form enums and cpp macros.  YYSTYPE
  was defined as a free form union.  They are now class members:
  tokens are enumerations of the `yy::parser::token' struct, and the
  semantic values have the `yy::parser::semantic_type' type.

  If you do not want or can update to this scheme, the directive
  `%define "global_tokens_and_yystype" "1"' triggers the global
  definition of tokens and YYSTYPE.  This change is suitable both
  for previous releases of Bison, and this one.

  If you wish to update, then make sure older version of Bison will
  fail using `%require "2.2"'.

* DJGPP support added.

Changes in version 2.1, 2005-09-16:

* The C++ lalr1.cc skeleton supports %lex-param.

* Bison-generated parsers now support the translation of diagnostics like
  "syntax error" into languages other than English.  The default
  language is still English.  For details, please see the new
  Internationalization section of the Bison manual.  Software
  distributors should also see the new PACKAGING file.  Thanks to
  Bruno Haible for this new feature.

* Wording in the Bison-generated parsers has been changed slightly to
  simplify translation.  In particular, the message "memory exhausted"
  has replaced "parser stack overflow", as the old message was not
  always accurate for modern Bison-generated parsers.

* Destructors are now called when the parser aborts, for all symbols left
  behind on the stack.  Also, the start symbol is now destroyed after a
  successful parse.  In both cases, the behavior was formerly inconsistent.

* When generating verbose diagnostics, Bison-generated parsers no longer
  quote the literal strings associated with tokens.  For example, for
  a syntax error associated with '%token NUM "number"' they might
  print 'syntax error, unexpected number' instead of 'syntax error,
  unexpected "number"'.

Changes in version 2.0, 2004-12-25:

* Possibly-incompatible changes

  - Bison-generated parsers no longer default to using the alloca function
    (when available) to extend the parser stack, due to widespread
    problems in unchecked stack-overflow detection.  You can "#define
    YYSTACK_USE_ALLOCA 1" to require the use of alloca, but please read
    the manual to determine safe values for YYMAXDEPTH in that case.

  - Error token location.
    During error recovery, the location of the syntax error is updated
    to cover the whole sequence covered by the error token: it includes
    the shifted symbols thrown away during the first part of the error
    recovery, and the lookahead rejected during the second part.

  - Semicolon changes:
    . Stray semicolons are no longer allowed at the start of a grammar.
    . Semicolons are now required after in-grammar declarations.

  - Unescaped newlines are no longer allowed in character constants or
    string literals.  They were never portable, and GCC 3.4.0 has
    dropped support for them.  Better diagnostics are now generated if
    forget a closing quote.

  - NUL bytes are no longer allowed in Bison string literals, unfortunately.

* New features

  - GLR grammars now support locations.

  - New directive: %initial-action.
    This directive allows the user to run arbitrary code (including
    initializing @$) from yyparse before parsing starts.

  - A new directive "%expect-rr N" specifies the expected number of
    reduce/reduce conflicts in GLR parsers.

  - %token numbers can now be hexadecimal integers, e.g., `%token FOO 0x12d'.
    This is a GNU extension.

  - The option `--report=lookahead' was changed to `--report=look-ahead'.
    The old spelling still works, but is not documented and will be
    removed.

  - Experimental %destructor support has been added to lalr1.cc.

  - New configure option --disable-yacc, to disable installation of the
    yacc command and -ly library introduced in 1.875 for POSIX conformance.

* Bug fixes

  - For now, %expect-count violations are now just warnings, not errors.
    This is for compatibility with Bison 1.75 and earlier (when there are
    reduce/reduce conflicts) and with Bison 1.30 and earlier (when there
    are too many or too few shift/reduce conflicts).  However, in future
    versions of Bison we plan to improve the %expect machinery so that
    these violations will become errors again.

  - Within Bison itself, numbers (e.g., goto numbers) are no longer
    arbitrarily limited to 16-bit counts.

  - Semicolons are now allowed before "|" in grammar rules, as POSIX requires.

Changes in version 1.875, 2003-01-01:

* The documentation license has been upgraded to version 1.2
  of the GNU Free Documentation License.

* syntax error processing

  - In Yacc-style parsers YYLLOC_DEFAULT is now used to compute error
    locations too.  This fixes bugs in error-location computation.

  - %destructor
    It is now possible to reclaim the memory associated to symbols
    discarded during error recovery.  This feature is still experimental.

  - %error-verbose
    This new directive is preferred over YYERROR_VERBOSE.

  - #defining yyerror to steal internal variables is discouraged.
    It is not guaranteed to work forever.

* POSIX conformance

  - Semicolons are once again optional at the end of grammar rules.
    This reverts to the behavior of Bison 1.33 and earlier, and improves
    compatibility with Yacc.

  - `parse error' -> `syntax error'
    Bison now uniformly uses the term `syntax error'; formerly, the code
    and manual sometimes used the term `parse error' instead.  POSIX
    requires `syntax error' in diagnostics, and it was thought better to
    be consistent.

  - The documentation now emphasizes that yylex and yyerror must be
    declared before use.  C99 requires this.

  - Bison now parses C99 lexical constructs like UCNs and
    backslash-newline within C escape sequences, as POSIX 1003.1-2001 requires.

  - File names are properly escaped in C output.  E.g., foo\bar.y is
    output as "foo\\bar.y".

  - Yacc command and library now available
    The Bison distribution now installs a `yacc' command, as POSIX requires.
    Also, Bison now installs a small library liby.a containing
    implementations of Yacc-compatible yyerror and main functions.
    This library is normally not useful, but POSIX requires it.

  - Type clashes now generate warnings, not errors.

  - If the user does not define YYSTYPE as a macro, Bison now declares it
    using typedef instead of defining it as a macro.
    For consistency, YYLTYPE is also declared instead of defined.

* Other compatibility issues

  - %union directives can now have a tag before the `{', e.g., the
    directive `%union foo {...}' now generates the C code
    `typedef union foo { ... } YYSTYPE;'; this is for Yacc compatibility.
    The default union tag is `YYSTYPE', for compatibility with Solaris 9 Yacc.
    For consistency, YYLTYPE's struct tag is now `YYLTYPE' not `yyltype'.
    This is for compatibility with both Yacc and Bison 1.35.

  - `;' is output before the terminating `}' of an action, for
    compatibility with Bison 1.35.

  - Bison now uses a Yacc-style format for conflict reports, e.g.,
    `conflicts: 2 shift/reduce, 1 reduce/reduce'.

  - `yystype' and `yyltype' are now obsolescent macros instead of being
    typedefs or tags; they are no longer documented and are planned to be
    withdrawn in a future release.

* GLR parser notes

  - GLR and inline
    Users of Bison have to decide how they handle the portability of the
    C keyword `inline'.

  - `parsing stack overflow...' -> `parser stack overflow'
    GLR parsers now report `parser stack overflow' as per the Bison manual.

* Bison now warns if it detects conflicting outputs to the same file,
  e.g., it generates a warning for `bison -d -o foo.h foo.y' since
  that command outputs both code and header to foo.h.

* #line in output files
  - --no-line works properly.

* Bison can no longer be built by a K&R C compiler; it requires C89 or
  later to be built.  This change originally took place a few versions
  ago, but nobody noticed until we recently asked someone to try
  building Bison with a K&R C compiler.

Changes in version 1.75, 2002-10-14:

* Bison should now work on 64-bit hosts.

* Indonesian translation thanks to Tedi Heriyanto.

* GLR parsers
  Fix spurious parse errors.

* Pure parsers
  Some people redefine yyerror to steal yyparse' private variables.
  Reenable this trick until an official feature replaces it.

* Type Clashes
  In agreement with POSIX and with other Yaccs, leaving a default
  action is valid when $$ is untyped, and $1 typed:

	untyped: ... typed;

  but the converse remains an error:

	typed: ... untyped;

* Values of mid-rule actions
  The following code:

	foo: { ... } { $$ = $1; } ...

  was incorrectly rejected: $1 is defined in the second mid-rule
  action, and is equal to the $$ of the first mid-rule action.

Changes in version 1.50, 2002-10-04:

* GLR parsing
  The declaration
     %glr-parser
  causes Bison to produce a Generalized LR (GLR) parser, capable of handling
  almost any context-free grammar, ambiguous or not.  The new declarations
  %dprec and %merge on grammar rules allow parse-time resolution of
  ambiguities.  Contributed by Paul Hilfinger.

  Unfortunately Bison 1.50 does not work properly on 64-bit hosts
  like the Alpha, so please stick to 32-bit hosts for now.

* Output Directory
  When not in Yacc compatibility mode, when the output file was not
  specified, running `bison foo/bar.y' created `foo/bar.c'.  It
  now creates `bar.c'.

* Undefined token
  The undefined token was systematically mapped to 2 which prevented
  the use of 2 by the user.  This is no longer the case.

* Unknown token numbers
  If yylex returned an out of range value, yyparse could die.  This is
  no longer the case.

* Error token
  According to POSIX, the error token must be 256.
  Bison extends this requirement by making it a preference: *if* the
  user specified that one of her tokens is numbered 256, then error
  will be mapped onto another number.

* Verbose error messages
  They no longer report `..., expecting error or...' for states where
  error recovery is possible.

* End token
  Defaults to `$end' instead of `$'.

* Error recovery now conforms to documentation and to POSIX
  When a Bison-generated parser encounters a syntax error, it now pops
  the stack until it finds a state that allows shifting the error
  token.  Formerly, it popped the stack until it found a state that
  allowed some non-error action other than a default reduction on the
  error token.  The new behavior has long been the documented behavior,
  and has long been required by POSIX.  For more details, please see
  Paul Eggert, "Reductions during Bison error handling" (2002-05-20)
  <http://lists.gnu.org/archive/html/bug-bison/2002-05/msg00038.html>.

* Traces
  Popped tokens and nonterminals are now reported.

* Larger grammars
  Larger grammars are now supported (larger token numbers, larger grammar
  size (= sum of the LHS and RHS lengths), larger LALR tables).
  Formerly, many of these numbers ran afoul of 16-bit limits;
  now these limits are 32 bits on most hosts.

* Explicit initial rule
  Bison used to play hacks with the initial rule, which the user does
  not write.  It is now explicit, and visible in the reports and
  graphs as rule 0.

* Useless rules
  Before, Bison reported the useless rules, but, although not used,
  included them in the parsers.  They are now actually removed.

* Useless rules, useless nonterminals
  They are now reported, as a warning, with their locations.

* Rules never reduced
  Rules that can never be reduced because of conflicts are now
  reported.

* Incorrect `Token not used'
  On a grammar such as

           %token useless useful
           %%
           exp: '0' %prec useful;

  where a token was used to set the precedence of the last rule,
  bison reported both `useful' and `useless' as useless tokens.

* Revert the C++ namespace changes introduced in 1.31
  as they caused too many portability hassles.

* Default locations
  By an accident of design, the default computation of @$ was
  performed after another default computation was performed: @$ = @1.
  The latter is now removed: YYLLOC_DEFAULT is fully responsible of
  the computation of @$.

* Token end-of-file
  The token end of file may be specified by the user, in which case,
  the user symbol is used in the reports, the graphs, and the verbose
  error messages instead of `$end', which remains being the default.
  For instance
     %token MYEOF 0
  or
     %token MYEOF 0 "end of file"

* Semantic parser
  This old option, which has been broken for ages, is removed.

* New translations
  Brazilian Portuguese, thanks to Alexandre Folle de Menezes.
  Croatian, thanks to Denis Lackovic.

* Incorrect token definitions
  When given `%token 'a' "A"', Bison used to output `#define 'a' 65'.

* Token definitions as enums
  Tokens are output both as the traditional #define's, and, provided
  the compiler supports ANSI C or is a C++ compiler, as enums.
  This lets debuggers display names instead of integers.

* Reports
  In addition to --verbose, bison supports --report=THINGS, which
  produces additional information:
  - itemset
    complete the core item sets with their closure
  - lookahead [changed to `look-ahead' in 1.875e and later]
    explicitly associate look-ahead tokens to items
  - solved
    describe shift/reduce conflicts solving.
    Bison used to systematically output this information on top of
    the report.  Solved conflicts are now attached to their states.

* Type clashes
  Previous versions don't complain when there is a type clash on
  the default action if the rule has a mid-rule action, such as in:

      %type <foo> bar
      %%
      bar: '0' {} '0';

  This is fixed.

* GNU M4 is now required when using Bison.

Changes in version 1.35, 2002-03-25:

* C Skeleton
  Some projects use Bison's C parser with C++ compilers, and define
  YYSTYPE as a class.  The recent adjustment of C parsers for data
  alignment and 64 bit architectures made this impossible.

  Because for the time being no real solution for C++ parser
  generation exists, kludges were implemented in the parser to
  maintain this use.  In the future, when Bison has C++ parsers, this
  kludge will be disabled.

  This kludge also addresses some C++ problems when the stack was
  extended.

Changes in version 1.34, 2002-03-12:

* File name clashes are detected
  $ bison foo.y -d -o foo.x
  fatal error: header and parser would both be named `foo.x'

* A missing `;' at the end of a rule triggers a warning
  In accordance with POSIX, and in agreement with other
  Yacc implementations, Bison will mandate this semicolon in the near
  future.  This eases the implementation of a Bison parser of Bison
  grammars by making this grammar LALR(1) instead of LR(2).  To
  facilitate the transition, this release introduces a warning.

* Revert the C++ namespace changes introduced in 1.31, as they caused too
  many portability hassles.

* DJGPP support added.

* Fix test suite portability problems.

Changes in version 1.33, 2002-02-07:

* Fix C++ issues
  Groff could not be compiled for the definition of size_t was lacking
  under some conditions.

* Catch invalid @n
  As is done with $n.

Changes in version 1.32, 2002-01-23:

* Fix Yacc output file names

* Portability fixes

* Italian, Dutch translations

Changes in version 1.31, 2002-01-14:

* Many Bug Fixes

* GNU Gettext and %expect
  GNU Gettext asserts 10 s/r conflicts, but there are 7.  Now that
  Bison dies on incorrect %expectations, we fear there will be
  too many bug reports for Gettext, so _for the time being_, %expect
  does not trigger an error when the input file is named `plural.y'.

* Use of alloca in parsers
  If YYSTACK_USE_ALLOCA is defined to 0, then the parsers will use
  malloc exclusively.  Since 1.29, but was not NEWS'ed.

  alloca is used only when compiled with GCC, to avoid portability
  problems as on AIX.

* yyparse now returns 2 if memory is exhausted; formerly it dumped core.

* When the generated parser lacks debugging code, YYDEBUG is now 0
  (as POSIX requires) instead of being undefined.

* User Actions
  Bison has always permitted actions such as { $$ = $1 }: it adds the
  ending semicolon.  Now if in Yacc compatibility mode, the semicolon
  is no longer output: one has to write { $$ = $1; }.

* Better C++ compliance
  The output parsers try to respect C++ namespaces.
  [This turned out to be a failed experiment, and it was reverted later.]

* Reduced Grammars
  Fixed bugs when reporting useless nonterminals.

* 64 bit hosts
  The parsers work properly on 64 bit hosts.

* Error messages
  Some calls to strerror resulted in scrambled or missing error messages.

* %expect
  When the number of shift/reduce conflicts is correct, don't issue
  any warning.

* The verbose report includes the rule line numbers.

* Rule line numbers are fixed in traces.

* Swedish translation

* Parse errors
  Verbose parse error messages from the parsers are better looking.
  Before: parse error: unexpected `'/'', expecting `"number"' or `'-'' or `'(''
     Now: parse error: unexpected '/', expecting "number" or '-' or '('

* Fixed parser memory leaks.
  When the generated parser was using malloc to extend its stacks, the
  previous allocations were not freed.

* Fixed verbose output file.
  Some newlines were missing.
  Some conflicts in state descriptions were missing.

* Fixed conflict report.
  Option -v was needed to get the result.

* %expect
  Was not used.
  Mismatches are errors, not warnings.

* Fixed incorrect processing of some invalid input.

* Fixed CPP guards: 9foo.h uses BISON_9FOO_H instead of 9FOO_H.

* Fixed some typos in the documentation.

* %token MY_EOF 0 is supported.
  Before, MY_EOF was silently renumbered as 257.

* doc/refcard.tex is updated.

* %output, %file-prefix, %name-prefix.
  New.

* --output
  New, aliasing `--output-file'.

Changes in version 1.30, 2001-10-26:

* `--defines' and `--graph' have now an optional argument which is the
  output file name. `-d' and `-g' do not change; they do not take any
  argument.

* `%source_extension' and `%header_extension' are removed, failed
  experiment.

* Portability fixes.

Changes in version 1.29, 2001-09-07:

* The output file does not define const, as this caused problems when used
  with common autoconfiguration schemes.  If you still use ancient compilers
  that lack const, compile with the equivalent of the C compiler option
  `-Dconst='.  autoconf's AC_C_CONST macro provides one way to do this.

* Added `-g' and `--graph'.

* The Bison manual is now distributed under the terms of the GNU FDL.

* The input and the output files has automatically a similar extension.

* Russian translation added.

* NLS support updated; should hopefully be less troublesome.

* Added the old Bison reference card.

* Added `--locations' and `%locations'.

* Added `-S' and `--skeleton'.

* `%raw', `-r', `--raw' is disabled.

* Special characters are escaped when output.  This solves the problems
  of the #line lines with path names including backslashes.

* New directives.
  `%yacc', `%fixed_output_files', `%defines', `%no_parser', `%verbose',
  `%debug', `%source_extension' and `%header_extension'.

* @$
  Automatic location tracking.

Changes in version 1.28, 1999-07-06:

* Should compile better now with K&R compilers.

* Added NLS.

* Fixed a problem with escaping the double quote character.

* There is now a FAQ.

Changes in version 1.27:

* The make rule which prevented bison.simple from being created on
  some systems has been fixed.

Changes in version 1.26:

* Bison now uses automake.

* New mailing lists: <bug-bison@gnu.org> and <help-bison@gnu.org>.

* Token numbers now start at 257 as previously documented, not 258.

* Bison honors the TMPDIR environment variable.

* A couple of buffer overruns have been fixed.

* Problems when closing files should now be reported.

* Generated parsers should now work even on operating systems which do
  not provide alloca().

Changes in version 1.25, 1995-10-16:

* Errors in the input grammar are not fatal; Bison keeps reading
the grammar file, and reports all the errors found in it.

* Tokens can now be specified as multiple-character strings: for
example, you could use "<=" for a token which looks like <=, instead
of chosing a name like LESSEQ.

* The %token_table declaration says to write a table of tokens (names
and numbers) into the parser file.  The yylex function can use this
table to recognize multiple-character string tokens, or for other
purposes.

* The %no_lines declaration says not to generate any #line preprocessor
directives in the parser file.

* The %raw declaration says to use internal Bison token numbers, not
Yacc-compatible token numbers, when token names are defined as macros.

* The --no-parser option produces the parser tables without including
the parser engine; a project can now use its own parser engine.
The actions go into a separate file called NAME.act, in the form of
a switch statement body.

Changes in version 1.23:

The user can define YYPARSE_PARAM as the name of an argument to be
passed into yyparse.  The argument should have type void *.  It should
actually point to an object.  Grammar actions can access the variable
by casting it to the proper pointer type.

Line numbers in output file corrected.

Changes in version 1.22:

--help option added.

Changes in version 1.20:

Output file does not redefine const for C++.

Local Variables:
mode: outline
End:

-----

Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
2004, 2005, 2006 Free Software Foundation, Inc.

This file is part of Bison, the GNU Compiler Compiler.

Bison is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.

Bison is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with autoconf; see the file COPYING.  If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
