Commit graph

155 commits

Author SHA1 Message Date
tnn
740b6a5843 bison: skip portability check for tests/local.mk 2020-03-12 20:47:12 +00:00
ryoon
6eee561cd2 bison: Fix POSIX shell portability issue in Makefile.in 2020-03-12 10:28:14 +00:00
rillig
508923f461 all: migrate several HOMEPAGEs to https
pkglint --only "https instead of http" -r -F

With manual adjustments afterwards since pkglint 19.4.4 fixed a few
indentations in unrelated lines.

This mainly affects projects hosted at SourceForce, as well as
freedesktop.org, CTAN and GNU.
2020-01-18 23:30:13 +00:00
jperkin
6b7be87090 bison: gettext-tools is required with nls for libtextstyle. 2020-01-03 19:23:27 +00:00
triaxx
7a2a036ee9 bison: make nls option enabled by default 2019-10-25 12:32:54 +00:00
jperkin
cefc6d925e bison: Remove broken and now entirely redundant nls section. 2019-10-24 10:53:23 +00:00
jperkin
8d0895b05f bison: Spell CONFIGURE_ARGS correctly. 2019-10-24 10:25:39 +00:00
triaxx
fc886c0506 bison: update to 3.4.2
upstream changes:
-----------------
GNU Bison NEWS

* Noteworthy changes in release 3.4.2 (2019-09-12) [stable]

** Bug fixes

  In some cases, when warnings are disabled, bison could emit tons of white
  spaces as diagnostics.

  When running out of memory, bison could crash (found by fuzzing).

  When defining twice the EOF token, bison would crash.

  New warnings from recent compilers have been addressed in the generated
  parsers (yacc.c, glr.c, glr.cc).

  When lone carriage-return characters appeared in the input file,
  diagnostics could hang forever.

* Noteworthy changes in release 3.4.1 (2019-05-22) [stable]

** Bug fixes

  Portability fixes.

* Noteworthy changes in release 3.4 (2019-05-19) [stable]

** Deprecated features

  The %pure-parser directive is deprecated in favor of '%define api.pure'
  since Bison 2.3b (2008-05-27), but no warning was issued; there is one
  now.  Note that since Bison 2.7 you are strongly encouraged to use
  '%define api.pure full' instead of '%define api.pure'.

** New features

*** Colored diagnostics

  As an experimental feature, diagnostics are now colored, controlled by the
  new options --color and --style.

  To use them, install the libtextstyle library before configuring Bison.
  It is available from

    https://alpha.gnu.org/gnu/gettext/

  for instance

    https://alpha.gnu.org/gnu/gettext/libtextstyle-0.8.tar.gz

  The option --color supports the following arguments:
    - always, yes: Enable colors.
    - never, no: Disable colors.
    - auto, tty (default): Enable colors if the output device is a tty.

  To customize the styles, create a CSS file similar to

    /* bison-bw.css */
    .warning   { }
    .error     { font-weight: 800; text-decoration: underline; }
    .note      { }

  then invoke bison with --style=bison-bw.css, or set the BISON_STYLE
  environment variable to "bison-bw.css".

*** Disabling output

  When given -fsyntax-only, the diagnostics are reported, but no output is
  generated.

  The name of this option is somewhat misleading as bison does more than
  just checking the syntax: every stage is run (including checking for
  conflicts for instance), except the generation of the output files.

*** Include the generated header (yacc.c)

  Before, when --defines is used, bison generated a header, and pasted an
  exact copy of it into the generated parser implementation file.  If the
  header name is not "y.tab.h", it is now #included instead of being
  duplicated.

  To use an '#include' even if the header name is "y.tab.h" (which is what
  happens with --yacc, or when using the Autotools' ylwrap), define
  api.header.include to the exact argument to pass to #include.  For
  instance:

    %define api.header.include {"parse.h"}

  or

    %define api.header.include {<parser/parse.h>}

*** api.location.type is now supported in C (yacc.c, glr.c)

  The %define variable api.location.type defines the name of the type to use
  for locations.  When defined, Bison no longer defines YYLTYPE.

  This can be used in programs with several parsers to factor their
  definition of locations: let one of them generate them, and the others
  just use them.

** Changes

*** Graphviz output

  In conformance with the recommendations of the Graphviz team, if %require
  "3.4" (or better) is specified, the option --graph generates a *.gv file
  by default, instead of *.dot.

*** Diagnostics overhaul

  Column numbers were wrong with multibyte characters, which would also
  result in skewed diagnostics with carets.  Beside, because we were
  indenting the quoted source with a single space, lines with tab characters
  were incorrectly underlined.

  To address these issues, and to be clearer, Bison now issues diagnostics
  as GCC9 does.  For instance it used to display (there's a tab before the
  opening brace):

    foo.y:3.37-38: error: $2 of ‘expr’ has no declared type
     expr: expr '+' "number"        { $$ = $1 + $2; }
                                         ^~
  It now reports

    foo.y:3.37-38: error: $2 of ‘expr’ has no declared type
        3 | expr: expr '+' "number" { $$ = $1 + $2; }
          |                                     ^~

  Other constructs now also have better locations, resulting in more precise
  diagnostics.

*** Fix-it hints for %empty

  Running Bison with -Wempty-rules and --update will remove incorrect %empty
  annotations, and add the missing ones.

*** Generated reports

  The format of the reports (parse.output) was improved for readability.

*** Better support for --no-line.

  When --no-line is used, the generated files are now cleaner: no lines are
  generated instead of empty lines.  Together with using api.header.include,
  that should help people saving the generated files into version control
  systems get smaller diffs.

** Documentation

  A new example in C shows an simple infix calculator with a hand-written
  scanner (examples/c/calc).

  A new example in C shows a reentrant parser (capable of recursive calls)
  built with Flex and Bison (examples/c/reccalc).

  There is a new section about the history of Yaccs and Bison.

** Bug fixes

  A few obscure bugs were fixed, including the second oldest (known) bug in
  Bison: it was there when Bison was entered in the RCS version control
  system, in December 1987.  See the NEWS of Bison 3.3 for the previous
  oldest bug.

* Noteworthy changes in release 3.3.2 (2019-02-03) [stable]

** Bug fixes

  Bison 3.3 failed to generate parsers for grammars with unused nonterminal
  symbols.

* Noteworthy changes in release 3.3.1 (2019-01-27) [stable]

** Changes

  The option -y/--yacc used to imply -Werror=yacc, which turns uses of Bison
  extensions into errors.  It now makes them simple warnings (-Wyacc).

* Noteworthy changes in release 3.3 (2019-01-26) [stable]

  A new mailing list was created, Bison Announce.  It is low traffic, and is
  only about announcing new releases and important messages (e.g., polls
  about major decisions to make).

  https://lists.gnu.org/mailman/listinfo/bison-announce

** Backward incompatible changes

  Support for DJGPP, which has been unmaintained and untested for years, is
  removed.

** Deprecated features

  A new feature, --update (see below) helps adjusting existing grammars to
  deprecations.

*** Deprecated directives

  The %error-verbose directive is deprecated in favor of '%define
  parse.error verbose' since Bison 3.0, but no warning was issued.

  The '%name-prefix "xx"' directive is deprecated in favor of '%define
  api.prefix {xx}' since Bison 3.0, but no warning was issued.  These
  directives are slightly different, you might need to adjust your code.
  %name-prefix renames only symbols with external linkage, while api.prefix
  also renames types and macros, including YYDEBUG, YYTOKENTYPE,
  yytokentype, YYSTYPE, YYLTYPE, etc.

  Users of Flex that move from '%name-prefix "xx"' to '%define api.prefix
  {xx}' will typically have to update YY_DECL from

    #define YY_DECL int xxlex (YYSTYPE *yylval, YYLTYPE *yylloc)

  to

    #define YY_DECL int xxlex (XXSTYPE *yylval, XXLTYPE *yylloc)

*** Deprecated %define variable names

  The following variables, mostly related to parsers in Java, have been
  renamed for consistency.  Backward compatibility is ensured, but upgrading
  is recommended.

    abstract           -> api.parser.abstract
    annotations        -> api.parser.annotations
    extends            -> api.parser.extends
    final              -> api.parser.final
    implements         -> api.parser.implements
    parser_class_name  -> api.parser.class
    public             -> api.parser.public
    strictfp           -> api.parser.strictfp

** New features

*** Generation of fix-its for IDEs/Editors

  When given the new option -ffixit (aka -fdiagnostics-parseable-fixits),
  bison now generates machine readable editing instructions to fix some
  issues.  Currently, this is mostly limited to updating deprecated
  directives and removing duplicates.  For instance:

    $ cat foo.y
    %error-verbose
    %define parser_class_name "Parser"
    %define api.parser.class "Parser"
    %%
    exp:;

  See the "fix-it:" lines below:

    $ bison -ffixit foo.y
    foo.y:1.1-14: warning: deprecated directive, use '%define parse.error verbose' [-Wdeprecated]
     %error-verbose
     ^~~~~~~~~~~~~~
    fix-it:"foo.y":{1:1-1:15}:"%define parse.error verbose"
    foo.y:2.1-34: warning: deprecated directive, use '%define api.parser.class {Parser}' [-Wdeprecated]
     %define parser_class_name "Parser"
     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    fix-it:"foo.y":{2:1-2:35}:"%define api.parser.class {Parser}"
    foo.y:3.1-33: error: %define variable 'api.parser.class' redefined
     %define api.parser.class "Parser"
     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    foo.y:2.1-34:     previous definition
     %define parser_class_name "Parser"
     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    fix-it:"foo.y":{3:1-3:34}:""
    foo.y: warning: fix-its can be applied.  Rerun with option '--update'. [-Wother]

  This uses the same output format as GCC and Clang.

*** Updating grammar files

  Fixes can be applied on the fly.  The previous example ends with the
  suggestion to re-run bison with the option -u/--update, which results in a
  cleaner grammar file.

    $ bison --update foo.y
    [...]
    bison: file 'foo.y' was updated (backup: 'foo.y~')

    $ cat foo.y
    %define parse.error verbose
    %define api.parser.class {Parser}
    %%
    exp:;

*** Bison is now relocatable

  If you pass '--enable-relocatable' to 'configure', Bison is relocatable.

  A relocatable program can be moved or copied to a different location on
  the file system.  It can also be used through mount points for network
  sharing.  It is possible to make symbolic links to the installed and moved
  programs, and invoke them through the symbolic link.

*** %expect and %expect-rr modifiers on individual rules

  One can now document (and check) which rules participate in shift/reduce
  and reduce/reduce conflicts.  This is particularly important GLR parsers,
  where conflicts are a normal occurrence.  For example,

      %glr-parser
      %expect 1
      %%

      ...

      argument_list:
        arguments %expect 1
      | arguments ','
      | %empty
      ;

      arguments:
        expression
      | argument_list ',' expression
      ;

      ...

  Looking at the output from -v, one can see that the shift-reduce conflict
  here is due to the fact that the parser does not know whether to reduce
  arguments to argument_list until it sees the token _after_ the following
  ','.  By marking the rule with %expect 1 (because there is a conflict in
  one state), we document the source of the 1 overall shift-reduce conflict.

  In GLR parsers, we can use %expect-rr in a rule for reduce/reduce
  conflicts.  In this case, we mark each of the conflicting rules.  For
  example,

      %glr-parser
      %expect-rr 1

      %%

      stmt:
        target_list '=' expr ';'
      | expr_list ';'
      ;

      target_list:
        target
      | target ',' target_list
      ;

      target:
        ID %expect-rr 1
      ;

      expr_list:
        expr
      | expr ',' expr_list
      ;

      expr:
        ID %expect-rr 1
      | ...
      ;

  In a statement such as

      x, y = 3, 4;

  the parser must reduce x to a target or an expr, but does not know which
  until it sees the '='.  So we notate the two possible reductions to
  indicate that each conflicts in one rule.

  This feature needs user feedback, and might evolve in the future.

*** C++: Actual token constructors

  When variants and token constructors are enabled, in addition to the
  type-safe named token constructors (make_ID, make_INT, etc.), we now
  generate genuine constructors for symbol_type.

  For instance with these declarations

    %token           ':'
       <std::string> ID
       <int>         INT;

  you may use these constructors:

    symbol_type (int token, const std::string&);
    symbol_type (int token, const int&);
    symbol_type (int token);

  Correct matching between token types and value types is checked via
  'assert'; for instance, 'symbol_type (ID, 42)' would abort.  Named
  constructors are preferable, as they offer better type safety (for
  instance 'make_ID (42)' would not even compile), but symbol_type
  constructors may help when token types are discovered at run-time, e.g.,

     [a-z]+   {
                if (auto i = lookup_keyword (yytext))
                  return yy::parser::symbol_type (i);
                else
                  return yy::parser::make_ID (yytext);
              }

*** C++: Variadic emplace

  If your application requires C++11 and you don't use symbol constructors,
  you may now use a variadic emplace for semantic values:

    %define api.value.type variant
    %token <std::pair<int, int>> PAIR

  in your scanner:

    int yylex (parser::semantic_type *lvalp)
    {
      lvalp->emplace <std::pair<int, int>> (1, 2);
      return parser::token::PAIR;
    }

*** C++: Syntax error exceptions in GLR

  The glr.cc skeleton now supports syntax_error exceptions thrown from user
  actions, or from the scanner.

*** More POSIX Yacc compatibility warnings

  More Bison specific directives are now reported with -y or -Wyacc.  This
  change was ready since the release of Bison 3.0 in September 2015.  It was
  delayed because Autoconf used to define YACC as `bison -y`, which resulted
  in numerous warnings for Bison users that use the GNU Build System.

  If you still experience that problem, either redefine YACC as `bison -o
  y.tab.c`, or pass -Wno-yacc to Bison.

*** The tables yyrhs and yyphrs are back

  Because no Bison skeleton uses them, these tables were removed (no longer
  passed to the skeletons, not even computed) in 2008.  However, some users
  have expressed interest in being able to use them in their own skeletons.

** Bug fixes

*** Incorrect number of reduce-reduce conflicts

  On a grammar such as

     exp: "num" | "num" | "num"

  bison used to report a single RR conflict, instead of two.  This is now
  fixed.  This was the oldest (known) bug in Bison: it was there when Bison
  was entered in the RCS version control system, in December 1987.

  Some grammar files might have to adjust their %expect-rr.

*** Parser directives that were not careful enough

  Passing invalid arguments to %nterm, for instance character literals, used
  to result in unclear error messages.

** Documentation

  The examples/ directory (installed in .../share/doc/bison/examples) has
  been restructured per language for clarity.  The examples come with a
  README and a Makefile.  Not only can they be used to toy with Bison, they
  can also be starting points for your own grammars.

  There is now a Java example, and a simple example in C based on Flex and
  Bison (examples/c/lexcalc/).

** Changes

*** Parsers in C++

  They now use noexcept and constexpr.  Please, report missing annotations.

*** Symbol Declarations

  The syntax of the variation directives to declare symbols was overhauled
  for more consistency, and also better POSIX Yacc compliance (which, for
  instance, allows "%type" without actually providing a type).  The %nterm
  directive, supported by Bison since its inception, is now documented and
  officially supported.

  The syntax is now as follows:

    %token TAG? ( ID NUMBER? STRING? )+ ( TAG ( ID NUMBER? STRING? )+ )*
    %left  TAG? ( ID NUMBER? )+ ( TAG ( ID NUMBER? )+ )*
    %type  TAG? ( ID | CHAR | STRING )+ ( TAG ( ID | CHAR | STRING )+ )*
    %nterm TAG? ID+ ( TAG ID+ )*

  where TAG denotes a type tag such as ‘<ival>’, ID denotes an identifier
  such as ‘NUM’, NUMBER a decimal or hexadecimal integer such as ‘300’ or
  ‘0x12d’, CHAR a character literal such as ‘'+'’, and STRING a string
  literal such as ‘"number"’.  The post-fix quantifiers are ‘?’ (zero or
  one), ‘*’ (zero or more) and ‘+’ (one or more).
2019-10-23 12:17:33 +00:00
triaxx
a647fa8d91 bison: make nls support optional
pkgsrc changes:
---------------
- add option for nls disabled by default (consistency with gmake)
- bump revision
2019-10-23 11:58:01 +00:00
wiz
84e123ddd2 Bump PKGREVISIONs for perl 5.30.0 2019-08-11 13:17:48 +00:00
wiz
5443ee727a bison: update to 3.2.4.
* Noteworthy changes in release 3.2.4 (2018-12-24) [stable]

** Bug fixes

  Fix the move constructor of symbol_type.

  Always provide a copy constructor for symbol_type, even in modern C++.

* Noteworthy changes in release 3.2.3 (2018-12-18) [stable]

** Bug fixes

  Properly support token constructors in C++ with types that include commas
  (e.g., std::pair<int, int>).  A regression introduced in Bison 3.2.

* Noteworthy changes in release 3.2.2 (2018-11-21) [stable]

** Bug fixes

  C++ portability issues.

* Noteworthy changes in release 3.2.1 (2018-11-09) [stable]

** Bug fixes

  Several portability issues have been fixed in the build system, in the
  test suite, and in the generated parsers in C++.

* Noteworthy changes in release 3.2 (2018-10-29) [stable]

** Backward incompatible changes

  Support for DJGPP, which have been unmaintained and untested for years, is
  obsolete.  Unless there is activity to revive it, it will be removed.

** Changes

  %printers should use yyo rather than yyoutput to denote the output stream.

  Variant-based symbols in C++ should use emplace() rather than build().

  In C++ parsers, parser::operator() is now a synonym for the parser::parse.

** Documentation

  A new section, "A Simple C++ Example", is a tutorial for parsers in C++.

  A comment in the generated code now emphasizes that users should not
  depend upon non-documented implementation details, such as macros starting
  with YY_.

** New features

*** C++: Support for move semantics (lalr1.cc)

  The lalr1.cc skeleton now fully supports C++ move semantics, while
  maintaining compatibility with C++98.  You may now store move-only types
  when using Bison's variants.  For instance:

    %code {
      #include <memory>
      #include <vector>
    }

    %skeleton "lalr1.cc"
    %define api.value.type variant

    %%

    %token <int> INT "int";
    %type <std::unique_ptr<int>> int;
    %type <std::vector<std::unique_ptr<int>>> list;

    list:
      %empty    {}
    | list int  { $$ = std::move($1); $$.emplace_back(std::move($2)); }

    int: "int"  { $$ = std::make_unique<int>($1); }

*** C++: Implicit move of right-hand side values (lalr1.cc)

  In modern C++ (C++11 and later), you should always use 'std::move' with
  the values of the right-hand side symbols ($1, $2, etc.), as they will be
  popped from the stack anyway.  Using 'std::move' is mandatory for
  move-only types such as unique_ptr, and it provides a significant speedup
  for large types such as std::string, or std::vector, etc.

  If '%define api.value.automove' is set, every occurrence '$n' is replaced
  by 'std::move ($n)'.  The second rule in the previous grammar can be
  simplified to:

    list: list int  { $$ = $1; $$.emplace_back($2); }

  With automove enabled, the semantic values are no longer lvalues, so do
  not use the swap idiom:

    list: list int  { std::swap($$, $1); $$.emplace_back($2); }

  This idiom is anyway obsolete: it is preferable to move than to swap.

  A warning is issued when automove is enabled, and a value is used several
  times.

    input.yy:16.31-32: warning: multiple occurrences of $2 with api.value.automove enabled [-Wother]
    exp: "twice" exp   { $$ = $2 + $2; }
                                   ^^

  Enabling api.value.automove does not require support for modern C++.  The
  generated code is valid C++98/03, but will use copies instead of moves.

  The new examples/c++/variant-11.yy shows these features in action.

*** C++: The implicit default semantic action is always run

  When variants are enabled, the default action was not run, so

    exp: "number"

  was equivalent to

    exp: "number"  {}

  It now behaves like in all the other cases, as

    exp: "number"  { $$ = $1; }

  possibly using std::move if automove is enabled.

  We do not expect backward compatibility issues.  However, beware of
  forward compatibility issues: if you rely on default actions with
  variants, be sure to '%require "3.2"' to avoid older versions of Bison to
  generate incorrect parsers.

*** C++: Renaming location.hh

  When both %defines and %locations are enabled, Bison generates a
  location.hh file.  If you don't use locations outside of the parser, you
  may avoid its creation with:

    %define api.location.file none

  However this file is useful if, for instance, your parser builds an AST
  decorated with locations: you may use Bison's location independently of
  Bison's parser.  You can now give it another name, for instance:

    %define api.location.file "my-location.hh"

  This name can have directory components, and even be absolute.  The name
  under which the location file is included is controlled by
  api.location.include.

  This way it is possible to have several parsers share the same location
  file.

  For instance, in src/foo/parser.hh, generate the include/ast/loc.hh file:

    %locations
    %define api.namespace {foo}
    %define api.location.file "include/ast/loc.hh"
    %define api.location.include {<ast/loc.hh>}

  and use it in src/bar/parser.hh:

    %locations
    %define api.namespace {bar}
    %code requires {#include <ast/loc.hh>}
    %define api.location.type {bar::location}

  Absolute file names are supported, so in your Makefile, passing the flag
  -Dapi.location.file='"$(top_srcdir)/include/ast/location.hh"' to bison is
  safe.

*** C++: stack.hh and position.hh are deprecated

  When asked to generate a header file (%defines), the lalr1.cc skeleton
  generates a stack.hh file.  This file had no interest for users; it is now
  made useless: its content is included in the parser definition.  It is
  still generated for backward compatibility.

  When in addition to %defines, location support is requested (%locations),
  the file position.hh is also generated.  It is now also useless: its
  content is now included in location.hh.

  These files are no longer generated when your grammar file requires at
  least Bison 3.2 (%require "3.2").

** Bug fixes

  Portability issues on MinGW and VS2015.

  Portability issues in the test suite.

  Portability/warning issues with Flex.

* Noteworthy changes in release 3.1 (2018-08-27) [stable]

** Backward incompatible changes

  Compiling Bison now requires a C99 compiler---as announced during the
  release of Bison 3.0, five years ago.  Generated parsers do not require a
  C99 compiler.

  Support for DJGPP, which have been unmaintained and untested for years, is
  obsolete. Unless there is activity to revive it, the next release of Bison
  will have it removed.

** New features

*** Typed midrule actions

  Because their type is unknown to Bison, the values of midrule actions are
  not treated like the others: they don't have %printer and %destructor
  support.  It also prevents C++ (Bison) variants to handle them properly.

  Typed midrule actions address these issues.  Instead of:

    exp: { $<ival>$ = 1; } { $<ival>$ = 2; }   { $$ = $<ival>1 + $<ival>2; }

  write:

    exp: <ival>{ $$ = 1; } <ival>{ $$ = 2; }   { $$ = $1 + $2; }

*** Reports include the type of the symbols

  The sections about terminal and nonterminal symbols of the '*.output' file
  now specify their declared type.  For instance, for:

    %token <ival> NUM

  the report now shows '<ival>':

    Terminals, with rules where they appear

    NUM <ival> (258) 5

*** Diagnostics about useless rules

  In the following grammar, the 'exp' nonterminal is trivially useless.  So,
  of course, its rules are useless too.

    %%
    input: '0' | exp
    exp: exp '+' exp | exp '-' exp | '(' exp ')'

  Previously all the useless rules were reported, including those whose
  left-hand side is the 'exp' nonterminal:

    warning: 1 nonterminal useless in grammar [-Wother]
    warning: 4 rules useless in grammar [-Wother]
    2.14-16: warning: nonterminal useless in grammar: exp [-Wother]
     input: '0' | exp
                  ^^^
    2.14-16: warning: rule useless in grammar [-Wother]
     input: '0' | exp
                  ^^^
    3.6-16: warning: rule useless in grammar [-Wother]
     exp: exp '+' exp | exp '-' exp | '(' exp ')'
          ^^^^^^^^^^^
    3.20-30: warning: rule useless in grammar [-Wother]
     exp: exp '+' exp | exp '-' exp | '(' exp ')'
                        ^^^^^^^^^^^
    3.34-44: warning: rule useless in grammar [-Wother]
     exp: exp '+' exp | exp '-' exp | '(' exp ')'
                                      ^^^^^^^^^^^

  Now, rules whose left-hand side symbol is useless are no longer reported
  as useless.  The locations of the errors have also been adjusted to point
  to the first use of the nonterminal as a left-hand side of a rule:

    warning: 1 nonterminal useless in grammar [-Wother]
    warning: 4 rules useless in grammar [-Wother]
    3.1-3: warning: nonterminal useless in grammar: exp [-Wother]
     exp: exp '+' exp | exp '-' exp | '(' exp ')'
     ^^^
    2.14-16: warning: rule useless in grammar [-Wother]
     input: '0' | exp
                  ^^^

*** C++: Generated parsers can be compiled with -fno-exceptions (lalr1.cc)

  When compiled with exceptions disabled, the generated parsers no longer
  uses try/catch clauses.

  Currently only GCC and Clang are supported.

** Documentation

*** A demonstration of variants

  A new example was added (installed in .../share/doc/bison/examples),
  'variant.yy', which shows how to use (Bison) variants in C++.

  The other examples were made nicer to read.

*** Some features are no longer 'experimental'

  The following features, mature enough, are no longer flagged as
  experimental in the documentation: push parsers, default %printer and
  %destructor (typed: <*> and untyped: <>), %define api.value.type union and
  variant, Java parsers, XML output, LR family (lr, ielr, lalr), and
  semantic predicates (%?).

** Bug fixes

*** GLR: Predicates support broken by #line directives

  Predicates (%?) in GLR such as

    widget:
      %? {new_syntax} 'w' id new_args
    | %?{!new_syntax} 'w' id old_args

  were issued with #lines in the middle of C code.

*** Printer and destructor with broken #line directives

  The #line directives were not properly escaped when emitting the code for
  %printer/%destructor, which resulted in compiler errors if there are
  backslashes or double-quotes in the grammar file name.

*** Portability on ICC

  The Intel compiler claims compatibility with GCC, yet rejects its _Pragma.
  Generated parsers now work around this.

*** Various

  There were several small fixes in the test suite and in the build system,
  many warnings in bison and in the generated parsers were eliminated.  The
  documentation also received its share of minor improvements.

  Useless code was removed from C++ parsers, and some of the generated
  constructors are more 'natural'.
2019-02-13 20:05:14 +00:00
ryoon
554781a58c Update to 3.0.5
Changelog:
* Noteworthy changes in release 3.0.5 (2018-05-27) [stable]

** Bug fixes

*** C++: Fix support of 'syntax_error'

  One incorrect 'inline' resulted in linking errors about the constructor of
  the syntax_error exception.

*** C++: Fix warnings

  GCC 7.3 (with -O1 or -O2 but not -O0 or -O3) issued null-dereference
  warnings about yyformat being possibly null.  It also warned about the
  deprecated implicit definition of copy constructors when there's a
  user-defined (copy) assignment operator.

*** Location of errors

  In C++ parsers, out-of-bounds errors can happen when a rule with an empty
  ride-hand side raises a syntax error.  The behavior of the default parser
  (yacc.c) in such a condition was undefined.

  Now all the parsers match the behavior of glr.c: @$ is used as the
  location of the error.  This handles gracefully rules with and without
  rhs.

*** Portability fixes in the test suite

  On some platforms, some Java and/or C++ tests were failing.
2019-01-22 03:20:40 +00:00
gutteridge
82a72d47ee devel/bison: add patches to fix building with glibc >= 2.27
Relates to PR pkg/53826, further details are provided there. This is a
temporary fix: the newest release of Bison addresses this by including
a newer version of gnulib. I'm applying this less obtrusive change for
now. No PKGREVISION, because there should be no change to existing
packages, it addresses build failures only.
2019-01-16 00:19:31 +00:00
wiz
9bd737fe76 Recursive bump for perl5-5.28.0 2018-08-22 09:42:51 +00:00
adam
148fdced9e Fix crash on macOS 10.13 (Darwin 7). 2017-08-18 21:41:19 +00:00
wiz
2b0a009d0e Bump PKGREVISION for perl-5.24.0 for everything mentioning perl. 2016-07-09 06:37:46 +00:00
jperkin
a7efdccd6c Use OPSYSVARS. 2016-02-25 12:12:47 +00:00
agc
d9e4cfe05d Add SHA512 digests for distfiles for devel category
Issues found with existing distfiles:
	distfiles/eclipse-sourceBuild-srcIncluded-3.0.1.zip
	distfiles/fortran-utils-1.1.tar.gz
	distfiles/ivykis-0.39.tar.gz
	distfiles/enum-1.11.tar.gz
	distfiles/pvs-3.2-libraries.tgz
	distfiles/pvs-3.2-linux.tgz
	distfiles/pvs-3.2-solaris.tgz
	distfiles/pvs-3.2-system.tgz
No changes made to these distinfo files.

Otherwise, existing SHA1 digests verified and found to be the same on
the machine holding the existing distfiles (morden).  All existing
SHA1 digests retained for now as an audit trail.
2015-11-03 03:27:11 +00:00
richard
0749753e83 Bison needs perl and sh replacements for testsuite to run, plus
a patch to gnulib/stdio.in.h to avoid warnings with g++.
Revision bump.
2015-06-30 21:39:09 +00:00
wiz
0982effce2 Recursive PKGREVISION bump for all packages mentioning 'perl',
having a PKGNAME of p5-*, or depending such a package,
for perl-5.22.0.
2015-06-12 10:48:20 +00:00
dsainty
90740f0404 Remove hash for deleted patch patch-Makefile.in 2015-03-24 08:03:54 +00:00
wiz
e84651971d Update to 3.0.4:
* Noteworthy changes in release 3.0.4 (2015-01-23) [stable]

** Bug fixes

*** C++ with Variants (lalr1.cc)

  Fix a compiler warning when no %destructor use $$.

*** Test suites

  Several portability issues in tests were fixed.
2015-01-30 01:27:14 +00:00
mef
ed4fac6431 based on PR pkg/49589
(pkgsrc)
 - Add comment on patch-lib_isnan.c (from cvs log)
(upstream)
 - Update devel/bison 3.0.2 to 3.0.3
Thanks obache and wiz for review.
---------------------------------
* Noteworthy changes in release 3.0.3 (2015-01-15) [stable]

** Bug fixes

*** C++ with Variants (lalr1.cc)

  Problems with %destructor and '%define parse.assert' have been fixed.

*** Named %union support (yacc.c, glr.c)

  Bison 3.0 introduced a regression on named %union such as

    %union foo { int ival; };

  The possibility to use a name was introduced "for Yacc compatibility".
  It is however not required by POSIX Yacc, and its usefulness is not clear.

*** %define api.value.type union with %defines (yacc.c, glr.c)

  The C parsers were broken when %defines was used together with "%define
  api.value.type union".

*** Redeclarations are reported in proper order

  On

    %token FOO "foo"
    %printer {} "foo"
    %printer {} FOO

  bison used to report:

    /tmp/foo.yy:2.10-11: error: %printer redeclaration for FOO
     %printer {} "foo"
              ^^
    /tmp/foo.yy:3.10-11:     previous declaration
     %printer {} FOO
              ^^

  Now, the "previous" declaration is always the first one.


** Documentation

  Bison now installs various files in its docdir (which defaults to
  '/usr/local/share/doc/bison'), including the three fully blown examples
  extracted from the documentation:

   - rpcalc
     Reverse polish calculator, a simple introductory example.
   - mfcalc
     Multi-function Calc, a calculator with memory and functions and located
     error messages.
   - calc++
     a calculator in C++ using variant support and token constructors.
2015-01-22 04:57:57 +00:00
pho
d5f28785d3 patches/patch-Makefile.in: Add a note that the patch has been sent to the upstream and will hopefully be merged soon. 2015-01-19 15:40:03 +00:00
rumko
911565911a devel/bison: resulting glr.c contains incorrect attribute order
For yyFail and yyMemoryExhausted, the ordering of _Noreturn is
incorrect on at least fbsd with clang.

Runtime issue, PKGREVISION bumped.

Ok@ joerg
2015-01-16 19:34:44 +00:00
jperkin
c24ed9c54f The "rename" rule is a published synonym for the "opt" transform rule, however
only the latter is supported by cwrappers.  Change them all to "opt" rules for
consistency and to gain compatibility with cwrappers.
2014-12-15 11:46:34 +00:00
wiz
cda18437be Remove pkgviews: don't set PKG_INSTALLATION_TYPES in Makefiles. 2014-10-09 14:05:50 +00:00
wiz
7eeb51b534 Bump for perl-5.20.0.
Do it for all packages that
* mention perl, or
* have a directory name starting with p5-*, or
* depend on a package starting with p5-
like last time, for 5.18, where this didn't lead to complaints.
Let me know if you have any this time.
2014-05-29 23:35:13 +00:00
pho
570a6db62e Fix build on Darwin 9 and possibly some other platforms. 2014-01-10 09:40:44 +00:00
wiz
2f888bd61f Update to 3.0.2:
* Noteworthy changes in release 3.0.2 (2013-12-05) [stable]

** Bug fixes

*** Generated source files when errors are reported

  When warnings are issued and -Werror is set, bison would still generate
  the source files (*.c, *.h...).  As a consequence, some runs of "make"
  could fail the first time, but not the second (as the files were generated
  anyway).

  This is fixed: bison no longer generates this source files, but, of
  course, still produces the various reports (*.output, *.xml, etc.).

*** %empty is used in reports

  Empty right-hand sides are denoted by '%empty' in all the reports (text,
  dot, XML and formats derived from it).

*** YYERROR and variants

  When C++ variant support is enabled, an error triggered via YYERROR, but
  not caught via error recovery, resulted in a double deletion.

* Noteworthy changes in release 3.0.1 (2013-11-12) [stable]

** Bug fixes

*** Errors in caret diagnostics

  On some platforms, some errors could result in endless diagnostics.

*** Fixes of the -Werror option

  Options such as "-Werror -Wno-error=foo" were still turning "foo"
  diagnostics into errors instead of warnings.  This is fixed.

  Actually, for consistency with GCC, "-Wno-error=foo -Werror" now also
  leaves "foo" diagnostics as warnings.  Similarly, with "-Werror=foo
  -Wno-error", "foo" diagnostics are now errors.

*** GLR Predicates

  As demonstrated in the documentation, one can now leave spaces between
  "%?" and its "{".

*** Installation

  The yacc.1 man page is no longer installed if --disable-yacc was
  specified.

*** Fixes in the test suite

  Bugs and portability issues.
2013-12-06 12:02:46 +00:00
ryoon
b7af49af3b Bump PKGREVISION for previous 2013-11-09 05:36:26 +00:00
ryoon
75467e2f92 Adopt NetBSD/earmhf for hack for net/libIDL 2013-11-09 05:32:46 +00:00
joerg
f79869d7bd Needs the same __fpending workaround on Cygwin as devel/m4. 2013-09-20 20:08:17 +00:00
jmcneill
db10b13599 apply arm hack to earm too 2013-08-05 18:41:11 +00:00
wiz
c7a4de2456 Update to 3.0:
* Noteworthy changes in release 3.0 (2013-07-25) [stable]

** WARNING: Future backward-incompatibilities!

  Like other GNU packages, Bison will start using some of the C99 features
  for its own code, especially the definition of variables after statements.
  The generated C parsers still aim at C90.

** Backward incompatible changes

*** Obsolete features

  Support for YYFAIL is removed (deprecated in Bison 2.4.2): use YYERROR.

  Support for yystype and yyltype is removed (deprecated in Bison 1.875):
  use YYSTYPE and YYLTYPE.

  Support for YYLEX_PARAM and YYPARSE_PARAM is removed (deprecated in Bison
  1.875): use %lex-param, %parse-param, or %param.

  Missing semicolons at the end of actions are no longer added (as announced
  in the release 2.5).

*** Use of YACC='bison -y'

  TL;DR: With Autoconf <= 2.69, pass -Wno-yacc to (AM_)YFLAGS if you use
  Bison extensions.

  Traditional Yacc generates 'y.tab.c' whatever the name of the input file.
  Therefore Makefiles written for Yacc expect 'y.tab.c' (and possibly
  'y.tab.h' and 'y.outout') to be generated from 'foo.y'.

  To this end, for ages, AC_PROG_YACC, Autoconf's macro to look for an
  implementation of Yacc, was using Bison as 'bison -y'.  While it does
  ensure compatible output file names, it also enables warnings for
  incompatibilities with POSIX Yacc.  In other words, 'bison -y' triggers
  warnings for Bison extensions.

  Autoconf 2.70+ fixes this incompatibility by using YACC='bison -o y.tab.c'
  (which also generates 'y.tab.h' and 'y.output' when needed).
  Alternatively, disable Yacc warnings by passing '-Wno-yacc' to your Yacc
  flags (YFLAGS, or AM_YFLAGS with Automake).

** Bug fixes

*** The epilogue is no longer affected by internal #defines (glr.c)

  The glr.c skeleton uses defines such as #define yylval (yystackp->yyval) in
  generated code.  These weren't properly undefined before the inclusion of
  the user epilogue, so functions such as the following were butchered by the
  preprocessor expansion:

    int yylex (YYSTYPE *yylval);

  This is fixed: yylval, yynerrs, yychar, and yylloc are now valid
  identifiers for user-provided variables.

*** stdio.h is no longer needed when locations are enabled (yacc.c)

  Changes in Bison 2.7 introduced a dependency on FILE and fprintf when
  locations are enabled.  This is fixed.

*** Warnings about useless %pure-parser/%define api.pure are restored

** Diagnostics reported by Bison

  Most of these features were contributed by Théophile Ranquet and Victor
  Santet.

*** Carets

  Version 2.7 introduced caret errors, for a prettier output.  These are now
  activated by default.  The old format can still be used by invoking Bison
  with -fno-caret (or -fnone).

  Some error messages that reproduced excerpts of the grammar are now using
  the caret information only.  For instance on:

    %%
    exp: 'a' | 'a';

  Bison 2.7 reports:

    in.y: warning: 1 reduce/reduce conflict [-Wconflicts-rr]
    in.y:2.12-14: warning: rule useless in parser due to conflicts: exp: 'a' [-Wother]

  Now bison reports:

    in.y: warning: 1 reduce/reduce conflict [-Wconflicts-rr]
    in.y:2.12-14: warning: rule useless in parser due to conflicts [-Wother]
     exp: 'a' | 'a';
                ^^^

  and "bison -fno-caret" reports:

    in.y: warning: 1 reduce/reduce conflict [-Wconflicts-rr]
    in.y:2.12-14: warning: rule useless in parser due to conflicts [-Wother]

*** Enhancements of the -Werror option

  The -Werror=CATEGORY option is now recognized, and will treat specified
  warnings as errors. The warnings need not have been explicitly activated
  using the -W option, this is similar to what GCC 4.7 does.

  For example, given the following command line, Bison will treat both
  warnings related to POSIX Yacc incompatibilities and S/R conflicts as
  errors (and only those):

    $ bison -Werror=yacc,error=conflicts-sr input.y

  If no categories are specified, -Werror will make all active warnings into
  errors. For example, the following line does the same the previous example:

    $ bison -Werror -Wnone -Wyacc -Wconflicts-sr input.y

  (By default -Wconflicts-sr,conflicts-rr,deprecated,other is enabled.)

  Note that the categories in this -Werror option may not be prefixed with
  "no-". However, -Wno-error[=CATEGORY] is valid.

  Note that -y enables -Werror=yacc. Therefore it is now possible to require
  Yacc-like behavior (e.g., always generate y.tab.c), but to report
  incompatibilities as warnings: "-y -Wno-error=yacc".

*** The display of warnings is now richer

  The option that controls a given warning is now displayed:

    foo.y:4.6: warning: type clash on default action: <foo> != <bar> [-Wother]

  In the case of warnings treated as errors, the prefix is changed from
  "warning: " to "error: ", and the suffix is displayed, in a manner similar
  to GCC, as [-Werror=CATEGORY].

  For instance, where the previous version of Bison would report (and exit
  with failure):

    bison: warnings being treated as errors
    input.y:1.1: warning: stray ',' treated as white space

  it now reports:

    input.y:1.1: error: stray ',' treated as white space [-Werror=other]

*** Deprecated constructs

  The new 'deprecated' warning category flags obsolete constructs whose
  support will be discontinued.  It is enabled by default.  These warnings
  used to be reported as 'other' warnings.

*** Useless semantic types

  Bison now warns about useless (uninhabited) semantic types.  Since
  semantic types are not declared to Bison (they are defined in the opaque
  %union structure), it is %printer/%destructor directives about useless
  types that trigger the warning:

    %token <type1> term
    %type  <type2> nterm
    %printer    {} <type1> <type3>
    %destructor {} <type2> <type4>
    %%
    nterm: term { $$ = $1; };

    3.28-34: warning: type <type3> is used, but is not associated to any symbol
    4.28-34: warning: type <type4> is used, but is not associated to any symbol

*** Undefined but unused symbols

  Bison used to raise an error for undefined symbols that are not used in
  the grammar.  This is now only a warning.

    %printer    {} symbol1
    %destructor {} symbol2
    %type <type>   symbol3
    %%
    exp: "a";

*** Useless destructors or printers

  Bison now warns about useless destructors or printers.  In the following
  example, the printer for <type1>, and the destructor for <type2> are
  useless: all symbols of <type1> (token1) already have a printer, and all
  symbols of type <type2> (token2) already have a destructor.

    %token <type1> token1
           <type2> token2
           <type3> token3
           <type4> token4
    %printer    {} token1 <type1> <type3>
    %destructor {} token2 <type2> <type4>

*** Conflicts

  The warnings and error messages about shift/reduce and reduce/reduce
  conflicts have been normalized.  For instance on the following foo.y file:

    %glr-parser
    %%
    exp: exp '+' exp | '0' | '0';

  compare the previous version of bison:

    $ bison foo.y
    foo.y: conflicts: 1 shift/reduce, 2 reduce/reduce
    $ bison -Werror foo.y
    bison: warnings being treated as errors
    foo.y: conflicts: 1 shift/reduce, 2 reduce/reduce

  with the new behavior:

    $ bison foo.y
    foo.y: warning: 1 shift/reduce conflict [-Wconflicts-sr]
    foo.y: warning: 2 reduce/reduce conflicts [-Wconflicts-rr]
    $ bison -Werror foo.y
    foo.y: error: 1 shift/reduce conflict [-Werror=conflicts-sr]
    foo.y: error: 2 reduce/reduce conflicts [-Werror=conflicts-rr]

  When %expect or %expect-rr is used, such as with bar.y:

    %expect 0
    %glr-parser
    %%
    exp: exp '+' exp | '0' | '0';

  Former behavior:

    $ bison bar.y
    bar.y: conflicts: 1 shift/reduce, 2 reduce/reduce
    bar.y: expected 0 shift/reduce conflicts
    bar.y: expected 0 reduce/reduce conflicts

  New one:

    $ bison bar.y
    bar.y: error: shift/reduce conflicts: 1 found, 0 expected
    bar.y: error: reduce/reduce conflicts: 2 found, 0 expected

** Incompatibilities with POSIX Yacc

  The 'yacc' category is no longer part of '-Wall', enable it explicitly
  with '-Wyacc'.

** Additional yylex/yyparse arguments

  The new directive %param declares additional arguments to both yylex and
  yyparse.  The %lex-param, %parse-param, and %param directives support one
  or more arguments.  Instead of

    %lex-param   {arg1_type *arg1}
    %lex-param   {arg2_type *arg2}
    %parse-param {arg1_type *arg1}
    %parse-param {arg2_type *arg2}

  one may now declare

    %param {arg1_type *arg1} {arg2_type *arg2}

** Types of values for %define variables

  Bison used to make no difference between '%define foo bar' and '%define
  foo "bar"'.  The former is now called a 'keyword value', and the latter a
  'string value'.  A third kind was added: 'code values', such as '%define
  foo {bar}'.

  Keyword variables are used for fixed value sets, e.g.,

    %define lr.type lalr

  Code variables are used for value in the target language, e.g.,

    %define api.value.type {struct semantic_type}

  String variables are used remaining cases, e.g. file names.

** Variable api.token.prefix

  The variable api.token.prefix changes the way tokens are identified in
  the generated files.  This is especially useful to avoid collisions
  with identifiers in the target language.  For instance

    %token FILE for ERROR
    %define api.token.prefix {TOK_}
    %%
    start: FILE for ERROR;

  will generate the definition of the symbols TOK_FILE, TOK_for, and
  TOK_ERROR in the generated sources.  In particular, the scanner must
  use these prefixed token names, although the grammar itself still
  uses the short names (as in the sample rule given above).

** Variable api.value.type

  This new %define variable supersedes the #define macro YYSTYPE.  The use
  of YYSTYPE is discouraged.  In particular, #defining YYSTYPE *and* either
  using %union or %defining api.value.type results in undefined behavior.

  Either define api.value.type, or use "%union":

    %union
    {
      int ival;
      char *sval;
    }
    %token <ival> INT "integer"
    %token <sval> STRING "string"
    %printer { fprintf (yyo, "%d", $$); } <ival>
    %destructor { free ($$); } <sval>

    /* In yylex().  */
    yylval.ival = 42; return INT;
    yylval.sval = "42"; return STRING;

  The %define variable api.value.type supports both keyword and code values.

  The keyword value 'union' means that the user provides genuine types, not
  union member names such as "ival" and "sval" above (WARNING: will fail if
  -y/--yacc/%yacc is enabled).

    %define api.value.type union
    %token <int> INT "integer"
    %token <char *> STRING "string"
    %printer { fprintf (yyo, "%d", $$); } <int>
    %destructor { free ($$); } <char *>

    /* In yylex().  */
    yylval.INT = 42; return INT;
    yylval.STRING = "42"; return STRING;

  The keyword value variant is somewhat equivalent, but for C++ special
  provision is made to allow classes to be used (more about this below).

    %define api.value.type variant
    %token <int> INT "integer"
    %token <std::string> STRING "string"

  Code values (in braces) denote user defined types.  This is where YYSTYPE
  used to be used.

    %code requires
    {
      struct my_value
      {
        enum
        {
          is_int, is_string
        } kind;
        union
        {
          int ival;
          char *sval;
        } u;
      };
    }
    %define api.value.type {struct my_value}
    %token <u.ival> INT "integer"
    %token <u.sval> STRING "string"
    %printer { fprintf (yyo, "%d", $$); } <u.ival>
    %destructor { free ($$); } <u.sval>

    /* In yylex().  */
    yylval.u.ival = 42; return INT;
    yylval.u.sval = "42"; return STRING;

** Variable parse.error

  This variable controls the verbosity of error messages.  The use of the
  %error-verbose directive is deprecated in favor of "%define parse.error
  verbose".

** Renamed %define variables

  The following variables have been renamed for consistency.  Backward
  compatibility is ensured, but upgrading is recommended.

    lr.default-reductions      -> lr.default-reduction
    lr.keep-unreachable-states -> lr.keep-unreachable-state
    namespace                  -> api.namespace
    stype                      -> api.value.type

** Semantic predicates

  Contributed by Paul Hilfinger.

  The new, experimental, semantic-predicate feature allows actions of the
  form "%?{ BOOLEAN-EXPRESSION }", which cause syntax errors (as for
  YYERROR) if the expression evaluates to 0, and are evaluated immediately
  in GLR parsers, rather than being deferred.  The result is that they allow
  the programmer to prune possible parses based on the values of run-time
  expressions.

** The directive %expect-rr is now an error in non GLR mode

  It used to be an error only if used in non GLR mode, _and_ if there are
  reduce/reduce conflicts.

** Tokens are numbered in their order of appearance

  Contributed by Valentin Tolmer.

  With '%token A B', A had a number less than the one of B.  However,
  precedence declarations used to generate a reversed order.  This is now
  fixed, and introducing tokens with any of %token, %left, %right,
  %precedence, or %nonassoc yields the same result.

  When mixing declarations of tokens with a litteral character (e.g., 'a')
  or with an identifier (e.g., B) in a precedence declaration, Bison
  numbered the litteral characters first.  For example

    %right A B 'c' 'd'

  would lead to the tokens declared in this order: 'c' 'd' A B.  Again, the
  input order is now preserved.

  These changes were made so that one can remove useless precedence and
  associativity declarations (i.e., map %nonassoc, %left or %right to
  %precedence, or to %token) and get exactly the same output.

** Useless precedence and associativity

  Contributed by Valentin Tolmer.

  When developing and maintaining a grammar, useless associativity and
  precedence directives are common.  They can be a nuisance: new ambiguities
  arising are sometimes masked because their conflicts are resolved due to
  the extra precedence or associativity information.  Furthermore, it can
  hinder the comprehension of a new grammar: one will wonder about the role
  of a precedence, where in fact it is useless.  The following changes aim
  at detecting and reporting these extra directives.

*** Precedence warning category

  A new category of warning, -Wprecedence, was introduced. It flags the
  useless precedence and associativity directives.

*** Useless associativity

  Bison now warns about symbols with a declared associativity that is never
  used to resolve conflicts.  In that case, using %precedence is sufficient;
  the parsing tables will remain unchanged.  Solving these warnings may raise
  useless precedence warnings, as the symbols no longer have associativity.
  For example:

    %left '+'
    %left '*'
    %%
    exp:
      "number"
    | exp '+' "number"
    | exp '*' exp
    ;

  will produce a

    warning: useless associativity for '+', use %precedence [-Wprecedence]
     %left '+'
           ^^^

*** Useless precedence

  Bison now warns about symbols with a declared precedence and no declared
  associativity (i.e., declared with %precedence), and whose precedence is
  never used.  In that case, the symbol can be safely declared with %token
  instead, without modifying the parsing tables.  For example:

    %precedence '='
    %%
    exp: "var" '=' "number";

  will produce a

    warning: useless precedence for '=' [-Wprecedence]
     %precedence '='
                 ^^^

*** Useless precedence and associativity

  In case of both useless precedence and associativity, the issue is flagged
  as follows:

    %nonassoc '='
    %%
    exp: "var" '=' "number";

  The warning is:

    warning: useless precedence and associativity for '=' [-Wprecedence]
     %nonassoc '='
               ^^^

** Empty rules

  With help from Joel E. Denny and Gabriel Rassoul.

  Empty rules (i.e., with an empty right-hand side) can now be explicitly
  marked by the new %empty directive.  Using %empty on a non-empty rule is
  an error.  The new -Wempty-rule warning reports empty rules without
  %empty.  On the following grammar:

    %%
    s: a b c;
    a: ;
    b: %empty;
    c: 'a' %empty;

  bison reports:

    3.4-5: warning: empty rule without %empty [-Wempty-rule]
     a: {}
        ^^
    5.8-13: error: %empty on non-empty rule
     c: 'a' %empty {};
            ^^^^^^

** Java skeleton improvements

  The constants for token names were moved to the Lexer interface.  Also, it
  is possible to add code to the parser's constructors using "%code init"
  and "%define init_throws".
  Contributed by Paolo Bonzini.

  The Java skeleton now supports push parsing.
  Contributed by Dennis Heimbigner.

** C++ skeletons improvements

*** The parser header is no longer mandatory (lalr1.cc, glr.cc)

  Using %defines is now optional.  Without it, the needed support classes
  are defined in the generated parser, instead of additional files (such as
  location.hh, position.hh and stack.hh).

*** Locations are no longer mandatory (lalr1.cc, glr.cc)

  Both lalr1.cc and glr.cc no longer require %location.

*** syntax_error exception (lalr1.cc)

  The C++ parser features a syntax_error exception, which can be
  thrown from the scanner or from user rules to raise syntax errors.
  This facilitates reporting errors caught in sub-functions (e.g.,
  rejecting too large integral literals from a conversion function
  used by the scanner, or rejecting invalid combinations from a
  factory invoked by the user actions).

*** %define api.value.type variant

  This is based on a submission from Michiel De Wilde.  With help
  from Théophile Ranquet.

  In this mode, complex C++ objects can be used as semantic values.  For
  instance:

    %token <::std::string> TEXT;
    %token <int> NUMBER;
    %token SEMICOLON ";"
    %type <::std::string> item;
    %type <::std::list<std::string>> list;
    %%
    result:
      list  { std::cout << $1 << std::endl; }
    ;

    list:
      %empty        { /* Generates an empty string list. */ }
    | list item ";" { std::swap ($$, $1); $$.push_back ($2); }
    ;

    item:
      TEXT    { std::swap ($$, $1); }
    | NUMBER  { $$ = string_cast ($1); }
    ;

*** %define api.token.constructor

  When variants are enabled, Bison can generate functions to build the
  tokens.  This guarantees that the token type (e.g., NUMBER) is consistent
  with the semantic value (e.g., int):

    parser::symbol_type yylex ()
    {
      parser::location_type loc = ...;
      ...
      return parser::make_TEXT ("Hello, world!", loc);
      ...
      return parser::make_NUMBER (42, loc);
      ...
      return parser::make_SEMICOLON (loc);
      ...
    }

*** C++ locations

  There are operator- and operator-= for 'location'.  Negative line/column
  increments can no longer underflow the resulting value.
2013-07-28 12:43:50 +00:00
adam
f144f554c5 Changes 2.7.1:
* Bug fixes
  * Fix compiler attribute portability (yacc.c)
    With locations enabled, __attribute__ was used unprotected.
  * Fix some compiler warnings (lalr1.cc)
2013-04-15 19:19:09 +00:00
wiz
6d80b0f636 Update to 2.7:
* Noteworthy changes in release 2.7 (2012-12-12) [stable]

** Bug fixes

  Warnings about uninitialized yylloc in yyparse have been fixed.

  Restored C90 compliance (yet no report was ever made).

** Diagnostics are improved

*** Changes in the format of error messages

  This used to be the format of many error reports:

    input.y:2.7-12: %type redeclaration for exp
    input.y:1.7-12: previous declaration

  It is now:

    input.y:2.7-12: error: %type redeclaration for exp
    input.y:1.7-12:     previous declaration

*** New format for error reports: carets

  Caret errors have been added to Bison:

    input.y:2.7-12: error: %type redeclaration for exp
     %type <sval> exp
           ^^^^^^
    input.y:1.7-12:     previous declaration
     %type <ival> exp
           ^^^^^^

  or

    input.y:3.20-23: error: ambiguous reference: '$exp'
     exp: exp '+' exp { $exp = $1 + $3; };
                        ^^^^
    input.y:3.1-3:       refers to: $exp at $$
     exp: exp '+' exp { $exp = $1 + $3; };
     ^^^
    input.y:3.6-8:       refers to: $exp at $1
     exp: exp '+' exp { $exp = $1 + $3; };
          ^^^
    input.y:3.14-16:     refers to: $exp at $3
     exp: exp '+' exp { $exp = $1 + $3; };
                  ^^^

  The default behaviour for now is still not to display these unless
  explictly asked with -fcaret (or -fall). However, in a later release, it
  will be made the default behavior (but may still be deactivated with
  -fno-caret).

** New value for %define variable: api.pure full

  The %define variable api.pure requests a pure (reentrant) parser. However,
  for historical reasons, using it in a location-tracking Yacc parser
  resulted in a yyerror function that did not take a location as a
  parameter. With this new value, the user may request a better pure parser,
  where yyerror does take a location as a parameter (in location-tracking
  parsers).

  The use of "%define api.pure true" is deprecated in favor of this new
  "%define api.pure full".

** New %define variable: api.location.type (glr.cc, lalr1.cc, lalr1.java)

  The %define variable api.location.type defines the name of the type to use
  for locations.  When defined, Bison no longer generates the position.hh
  and location.hh files, nor does the parser will include them: the user is
  then responsible to define her type.

  This can be used in programs with several parsers to factor their location
  and position files: let one of them generate them, and the others just use
  them.

  This feature was actually introduced, but not documented, in Bison 2.5,
  under the name "location_type" (which is maintained for backward
  compatibility).

  For consistency, lalr1.java's %define variables location_type and
  position_type are deprecated in favor of api.location.type and
  api.position.type.

** Exception safety (lalr1.cc)

  The parse function now catches exceptions, uses the %destructors to
  release memory (the lookahead symbol and the symbols pushed on the stack)
  before re-throwing the exception.

  This feature is somewhat experimental.  User feedback would be
  appreciated.

** Graph improvements in DOT and XSLT

  The graphical presentation of the states is more readable: their shape is
  now rectangular, the state number is clearly displayed, and the items are
  numbered and left-justified.

  The reductions are now explicitly represented as transitions to other
  diamond shaped nodes.

  These changes are present in both --graph output and xml2dot.xsl XSLT
  processing, with minor (documented) differences.

** %language is no longer an experimental feature.

  The introduction of this feature, in 2.4, was four years ago. The
  --language option and the %language directive are no longer experimental.

** Documentation

  The sections about shift/reduce and reduce/reduce conflicts resolution
  have been fixed and extended.

  Although introduced more than four years ago, XML and Graphviz reports
  were not properly documented.

  The translation of mid-rule actions is now described.
2012-12-16 10:46:17 +00:00
wiz
6cfe43c264 Update to 2.6.5:
* Noteworthy changes in release 2.6.5 (2012-11-07) [stable]

  We consider compiler warnings about Bison generated parsers to be bugs.
  Rather than working around them in your own project, please consider
  reporting them to us.

** Bug fixes

  Warnings about uninitialized yylval and/or yylloc for push parsers with a
  pure interface have been fixed for GCC 4.0 up to 4.8, and Clang 2.9 to
  3.2.

  Other issues in the test suite have been addressed.

  Nul characters are correctly displayed in error messages.

  When possible, yylloc is correctly initialized before calling yylex.  It
  is no longer necessary to initialize it in the %initial-action.
2012-12-08 23:53:09 +00:00
wiz
7fdd7d9286 Update to 2.6.4:
* Noteworthy changes in release 2.6.4 (2012-10-23) [stable]

  Bison 2.6.3's --version was incorrect.  This release fixes this issue.

* Noteworthy changes in release 2.6.3 (2012-10-22) [stable]

** Bug fixes

  Bugs and portability issues in the test suite have been fixed.

  Some errors in translations have been addressed, and --help now directs
  users to the appropriate place to report them.

  Stray Info files shipped by accident are removed.

  Incorrect definitions of YY_, issued by yacc.c when no parser header is
  generated, are removed.

  All the generated headers are self-contained.

** Header guards (yacc.c, glr.c, glr.cc)

  In order to avoid collisions, the header guards are now
  YY_<PREFIX>_<FILE>_INCLUDED, instead of merely <PREFIX>_<FILE>.
  For instance the header generated from

    %define api.prefix "calc"
    %defines "lib/parse.h"

  will use YY_CALC_LIB_PARSE_H_INCLUDED as guard.

** Fix compiler warnings in the generated parser (yacc.c, glr.c)

  The compilation of pure parsers (%define api.pure) can trigger GCC
  warnings such as:

    input.c: In function 'yyparse':
    input.c:1503:12: warning: 'yylval' may be used uninitialized in this
                              function [-Wmaybe-uninitialized]
       *++yyvsp = yylval;
                ^

  This is now fixed; pragmas to avoid these warnings are no longer needed.

  Warnings from clang ("equality comparison with extraneous parentheses" and
  "function declared 'noreturn' should not return") have also been
  addressed.
2012-11-03 01:02:23 +00:00
asau
e1ab7079b6 Drop superfluous PKG_DESTDIR_SUPPORT, "user-destdir" is default these days. 2012-10-31 11:16:30 +00:00
adam
c091b605f5 Changes 2.6.2:
* Bug fixes
  Buffer overruns, complaints from Flex, and portability issues in the test
  suite have been fixed.
* Spaces in %lex- and %parse-param (lalr1.cc, glr.cc)
  Trailing end-of-lines in %parse-param or %lex-param would result in
  invalid C++.  This is fixed.
* Spurious spaces and end-of-lines
  The generated files no longer end (nor start) with empty lines.
2012-08-06 06:25:02 +00:00
wiz
56efd29235 Update to 2.6:
* Noteworthy changes in release 2.6 (2012-07-19) [stable]

** Future Changes

  The next major release of Bison will drop support for the following
  deprecated features.  Please report disagreements to bug-bison@gnu.org.

*** K&C parsers

  Support for generating parsers in K&R C will be removed.  Parsers
  generated for C support ISO C90, and are tested with ISO C99 and ISO C11
  compilers.

*** Features deprecated since Bison 1.875

  The definitions of yystype and yyltype will be removed; use YYSTYPE and
  YYLTYPE.

  YYPARSE_PARAM and YYLEX_PARAM, deprecated in favor of %parse-param and
  %lex-param, will no longer be supported.

  Support for the preprocessor symbol YYERROR_VERBOSE will be removed, use
  %error-verbose.

*** The generated header will be included (yacc.c)

  Instead of duplicating the content of the generated header (definition of
  YYSTYPE, yyparse declaration etc.), the generated parser will include it,
  as is already the case for GLR or C++ parsers.  This change is deferred
  because existing versions of ylwrap (e.g., Automake 1.12.1) do not support
  it.

** Generated Parser Headers

*** Guards (yacc.c, glr.c, glr.cc)

  The generated headers are now guarded, as is already the case for C++
  parsers (lalr1.cc).  For instance, with --defines=foo.h:

    #ifndef YY_FOO_H
    # define YY_FOO_H
    ...
    #endif /* !YY_FOO_H  */

*** New declarations (yacc.c, glr.c)

  The generated header now declares yydebug and yyparse.  Both honor
  --name-prefix=bar_, and yield

    int bar_parse (void);

  rather than

    #define yyparse bar_parse
    int yyparse (void);

  in order to facilitate the inclusion of several parser headers inside a
  single compilation unit.

*** Exported symbols in C++

  The symbols YYTOKEN_TABLE and YYERROR_VERBOSE, which were defined in the
  header, are removed, as they prevent the possibility of including several
  generated headers from a single compilation unit.

*** YYLSP_NEEDED

  For the same reasons, the undocumented and unused macro YYLSP_NEEDED is no
  longer defined.

** New %define variable: api.prefix

  Now that the generated headers are more complete and properly protected
  against multiple inclusions, constant names, such as YYSTYPE are a
  problem.  While yyparse and others are properly renamed by %name-prefix,
  YYSTYPE, YYDEBUG and others have never been affected by it.  Because it
  would introduce backward compatibility issues in projects not expecting
  YYSTYPE to be renamed, instead of changing the behavior of %name-prefix,
  it is deprecated in favor of a new %define variable: api.prefix.

  The following examples compares both:

    %name-prefix "bar_"               | %define api.prefix "bar_"
    %token <ival> FOO                   %token <ival> FOO
    %union { int ival; }                %union { int ival; }
    %%                                  %%
    exp: 'a';                           exp: 'a';

  bison generates:

    #ifndef BAR_FOO_H                   #ifndef BAR_FOO_H
    # define BAR_FOO_H                  # define BAR_FOO_H

    /* Enabling traces.  */             /* Enabling traces.  */
    # ifndef YYDEBUG                  | # ifndef BAR_DEBUG
                                      > #  if defined YYDEBUG
                                      > #   if YYDEBUG
                                      > #    define BAR_DEBUG 1
                                      > #   else
                                      > #    define BAR_DEBUG 0
                                      > #   endif
                                      > #  else
    #  define YYDEBUG 0               | #   define BAR_DEBUG 0
                                      > #  endif
    # endif                           | # endif

    # if YYDEBUG                      | # if BAR_DEBUG
    extern int bar_debug;               extern int bar_debug;
    # endif                             # endif

    /* Tokens.  */                      /* Tokens.  */
    # ifndef YYTOKENTYPE              | # ifndef BAR_TOKENTYPE
    #  define YYTOKENTYPE             | #  define BAR_TOKENTYPE
       enum yytokentype {             |    enum bar_tokentype {
         FOO = 258                           FOO = 258
       };                                  };
    # endif                             # endif

    #if ! defined YYSTYPE \           | #if ! defined BAR_STYPE \
     && ! defined YYSTYPE_IS_DECLARED |  && ! defined BAR_STYPE_IS_DECLARED
    typedef union YYSTYPE             | typedef union BAR_STYPE
    {                                   {
     int ival;                           int ival;
    } YYSTYPE;                        | } BAR_STYPE;
    # define YYSTYPE_IS_DECLARED 1    | # define BAR_STYPE_IS_DECLARED 1
    #endif                              #endif

    extern YYSTYPE bar_lval;          | extern BAR_STYPE bar_lval;

    int bar_parse (void);               int bar_parse (void);

    #endif /* !BAR_FOO_H  */            #endif /* !BAR_FOO_H  */
2012-07-29 19:25:53 +00:00
obache
9f94f69ecc flex is required to build bison-2.5.1.
PR 46554.
2012-06-08 07:33:46 +00:00
wiz
78919f749f Update to 2.5.1:
* Noteworthy changes in release 2.5.1 (2012-06-05) [stable]

** Future changes:

  The next major release will drop support for generating parsers in K&R C.

** yacc.c: YYBACKUP works as expected.

** glr.c improvements:

*** Location support is eliminated when not requested:

  GLR parsers used to include location-related code even when locations were
  not requested, and therefore not even usable.

*** __attribute__ is preserved:

  __attribute__ is no longer disabled when __STRICT_ANSI__ is defined (i.e.,
  when -std is passed to GCC).

** lalr1.java: several fixes:

  The Java parser no longer throws ArrayIndexOutOfBoundsException if the
  first token leads to a syntax error.  Some minor clean ups.

** Changes for C++:

*** C++11 compatibility:

  C and C++ parsers use "nullptr" instead of "0" when __cplusplus is 201103L
  or higher.

*** Header guards

  The header files such as "parser.hh", "location.hh", etc. used a constant
  name for preprocessor guards, for instance:

  #ifndef BISON_LOCATION_HH
  # define BISON_LOCATION_HH
  ...
  #endif // !BISON_LOCATION_HH

  The inclusion guard is now computed from "PREFIX/FILE-NAME", where lower
  case characters are converted to upper case, and series of
  non-alphanumerical characters are converted to an underscore.

  With "bison -o lang++/parser.cc", "location.hh" would now include:

  #ifndef YY_LANG_LOCATION_HH
  # define YY_LANG_LOCATION_HH
  ...
  #endif // !YY_LANG_LOCATION_HH

*** C++ locations:

  The position and location constructors (and their initialize methods)
  accept new arguments for line and column.  Several issues in the
  documentation were fixed.

** liby is no longer asking for "rpl_fprintf" on some platforms.

** Changes in the manual:

*** %printer is documented

  The "%printer" directive, supported since at least Bison 1.50, is finally
  documented.  The "mfcalc" example is extended to demonstrate it.

  For consistency with the C skeletons, the C++ parsers now also support
  "yyoutput" (as an alias to "debug_stream ()").

*** Several improvements have been made:

  The layout for grammar excerpts was changed to a more compact scheme.
  Named references are motivated.  The description of the automaton
  description file (*.output) is updated to the current format.  Incorrect
  index entries were fixed.  Some other errors were fixed.

** Building bison:

*** Conflicting prototypes with recent/modified Flex.

  Fixed build problems with the current, unreleased, version of Flex, and
  some modified versions of 2.5.35, which have modified function prototypes.

*** Warnings during the build procedure have been eliminated.

*** Several portability problems in the test suite have been fixed:

  This includes warnings with some compilers, unexpected behavior of tools
  such as diff, warning messages from the test suite itself, etc.

*** The install-pdf target work properly:

  Running "make install-pdf" (or -dvi, -html, -info, and -ps) no longer
  halts in the middle of its course.
2012-06-06 07:20:35 +00:00
schwarz
95ae97b56b corrected patch-lib_isnan.c to correctly terminate with a '\' the line within
a multi-line statement. Gcc does not seem to care about this, however for Sun
cc the missing '\' broke things.
2012-04-07 15:14:04 +00:00
jklos
a4b36dbce2 Fix definition of NaN on VAX. 2012-03-15 07:50:21 +00:00
tsutsui
0d68480154 Add workaround optimization hacks for bison that dumps core in net/libIDL
on NetBSD/arm -current with gcc-4.5.3. PR pkg/45834

Bump PKGREVISION.
2012-01-19 13:32:05 +00:00
obache
ead94c212e revert change for PR#45826.
libiconv is not used by bison directly.
2012-01-15 13:19:29 +00:00
morr
9883d8c346 Add missing converters/libiconv buildlink, fixes PR 45826.
Bump PKGREVISION
2012-01-13 17:13:39 +00:00
wiz
1080e82dfa Do not install yacc.1. Addresses PR 45161 by Thomas Cort.
Add comment to patch-aa while here.
2011-08-06 17:15:42 +00:00