Commit Graph
100 Commits
Author SHA1 Message Date
Akim Demaille d68f05d75c style: s/non-terminal/nonterminal/
I personally prefer 'non terminal', or 'non-terminal', but
'nonterminal' is the common spelling.

* data/glr.c, src/parse-gram.y, src/symtab.c, src/symtab.h,
* tests/input.at, doc/refcard.tex: here.
2018-12-11 06:55:41 +01:00
Akim Demaille b05aa7be2e style: rename error functions for clarity
* src/symtab.c (symbol_redeclaration, semantic_type_redeclaration)
(user_token_number_redeclaration):
Rename as...
(complain_symbol_redeclared, complain_semantic_type_redeclared)
(complain_user_token_number_redeclared):
this.
2018-12-11 06:55:35 +01:00
Akim Demaille 20b0746793 parser: improve the error message for symbol class redefinition
Currently our error messages include both "symbol redeclared" and
"symbol redefined", and they mean something different.  This is
obscure, let's make this clearer.

I think the idea between 'definition' vs. 'declaration' is that in the
case of the nonterminals, the actual definition is its set of rules,
so %nterm would be about declaration.  The case of %token is less
clear.

* src/symtab.c (complain_class_redefined): New.
(symbol_class_set): Use it.
Simplify the logic of this function to clearly skip its body when the
preconditions are not met.
* tests/input.at (Symbol class redefinition): New.
2018-12-11 06:53:25 +01:00
Akim Demaille afdefecab6 examples: simplify computation of yydebug
* examples/c/lexcalc/parse.y: here.
2018-12-11 06:53:25 +01:00
Akim Demaille 81dbd0d82e C++: support variadic emplace
Suggested by Askar Safin.
http://lists.gnu.org/archive/html/bug-bison/2018-12/msg00006.html

* data/variant.hh: Implement.
* tests/types.at: Check.
* doc/bison.texi: Document.
2018-12-10 17:50:12 +01:00
Akim Demaille d657da9fb4 examples: add a simple Flex+Bison example in C
Suggested by Askar Safin.
http://lists.gnu.org/archive/html/bug-bison/2018-12/msg00003.html

* examples/c/lexcalc/Makefile, examples/c/lexcalc/README.md,
* examples/c/lexcalc/lexcalc.test, examples/c/lexcalc/local.mk,
* examples/c/lexcalc/parse.y, examples/c/lexcalc/scan.l:
New.
2018-12-09 15:30:25 +01:00
Akim Demaille 4cbdcaa572 regen 2018-12-09 13:55:05 +01:00
Akim Demaille 85d303b713 examples: sort them per language and complete them
Convert some of the READMEs to Markdown, which is now more common, and
nicely displayed in some git hosting services.

Add missing READMEs and Makefiles.  Generate XML, HTML and Dot files.  Be
sure to ship the test files.  Complete CLEANFILES to remove all generated
files.

* examples/calc++: Move into...
* examples/c++: here.
* examples/mfcalc, examples/rpcalc: Move into...
* examples/c: here.

* examples/README.md, examples/c++/calc++/Makefile, examples/c/local.mk,
* examples/c/mfcalc/Makefile, examples/c/rpcalc/Makefile,
* examples/d/README.md, examples/java/README.md:
New files.

* examples/test (medir): Be robust to deeper directory nesting.
2018-12-09 13:55:05 +01:00
Akim Demaille 1e6a68858a regen 2018-12-09 12:50:53 +01:00
Akim Demaille 17730b0287 parser: minor refactoring
* src/parse-gram.y (symbol.prec): Reuse int.opt.
2018-12-09 12:50:53 +01:00
Akim Demaille 157f12c483 parser: move checks inside the called functions
Revamping the handling of the symbols is the grammar is much more
delicate than I anticipated.  Let's first move things around for
clarity.

* src/symtab.c (symbol_make_alias): Don't accept to alias
non-terminals.
(symbol_user_token_number_set): Don't accept user token numbers
for non-terminals.
Don't do anything in case of redefinition, instead of trying to
update.  The flow is eaier to follow this way.
2018-12-09 12:50:53 +01:00
Akim Demaille e1a843cc69 d: fix double definition of YYSemanticType
* data/lalr1.d: When moving to b4_user_union_members, it also defines
b4_tag_seen_flag, so we had two definitions.
2018-12-08 08:05:00 +01:00
Akim Demaille fe97793659 gnulib: update 2018-12-08 07:50:43 +01:00
Akim Demaille 401afe5cc2 parser: fix incorrect condition to raise a syntax error
* src/parse-gram.y (symbol_def): Fix test.
2018-12-06 17:50:54 +01:00
Akim Demaille 10e3ccac05 d: fix use of b4_union_members
* data/lalr1.d: Use b4_user_union_members instead.
2018-12-06 06:27:33 +01:00
Akim Demaille 3d5059f431 style: comment changes
* data/variant.hh: here.
2018-12-06 06:27:33 +01:00
Akim Demaille 9a5c12f160 java, d: add a Makefile for the example
* examples/java/Makefile, examples/d/Makefile: New.
2018-12-06 05:19:09 +01:00
Akim Demaille 156140dfc3 style: scope reduction in ielr.c
* src/ielr.c: here.
2018-12-05 07:12:12 +01:00
Akim Demaille 4176584062 style: scope reduction in lalr.c
* src/lalr.c: here.
2018-12-05 06:49:06 +01:00
Akim Demaille cfd682f46d d, java: compute static subtractions
* data/d.m4, data/java.m4: Use b4_subtract where appropriate.
2018-12-05 06:02:01 +01:00
Akim Demaille f15382f7d7 d: add an example
* examples/d/calc.test, examples/d/calc.y, examples/d/local.mk:
2018-12-04 20:43:01 +01:00
Akim Demaille 0ebcae4a54 d: update the skeleton
* data/d.m4, data/lalr1.d: Catch up with Bison.
And actually, also catch up with D.
2018-12-04 20:43:01 +01:00
Akim Demaille 22b2c286ff d: add experimental support for the D language
* configure.ac (ENABLE_D): New.
* src/getargs.c (valid_languages): Add d.
2018-12-04 20:29:33 +01:00
Akim Demaille 4a42a4f911 d: add skeleton for the D language
Contributed by Oliver Mangold.
https://lists.gnu.org/archive/html/help-bison/2012-01/msg00000.html

* README-D.txt, d-skel.m4, d.m4, lalr1.d: New.
2018-12-04 20:29:28 +01:00
Akim Demaille c20dd6279f examples: regenerate them when version.texi changes
When we extract the examples from the documentation, %require
"@value{VERSION}" is replaced with the current version.  If we change
the git branch, without changing the documentation, the generated
examples will %require a version of Bison that differs from the actual
version.

* examples/local.mk (extracted.stamp): Depend on doc/version.texi.
2018-12-04 08:36:52 +01:00
Akim Demaille 999277ddd8 skeletons: start some technical documentation
* data/README: Convert to Markdown.
Start documenting some of the macros used in all our skeletons.
Simplify and fix the documentation of the macros in the skeletons.
2018-12-04 08:36:52 +01:00
Akim Demaille f539a56620 regen 2018-12-03 18:42:00 +01:00
Akim Demaille c44a782a4e backend: revamp the handling of symbol types
Currently it is the front end that passes the symbol types to the
backend.  For instance:

  %token <ival> NUM
  %type <ival> exp1 exp2
  exp1: NUM { $$ = $1; }
  exp2: NUM { $<ival>$ = $<ival>1; }

In both cases, $$ and $1 are passed to the backend as having type
'ival' resulting in code like `val.ival`.  This is troublesome in the
case of api.value.type=union, since in that the case the code this:

  %define api.value.type union
  %token <int> NUM
  %type <int> exp1 exp2
  exp1: NUM { $$ = $1; }
  exp2: NUM { $<int>$ = $<int>1; }

because in this case, since the backend does not know the symbol being
processed, it is forced to generate casts in both cases: *(int*)(&val)`.
This is unfortunate in the first case (exp1) where there is no reason
at all to use a cast instead of `val.NUM` and `val.exp1`.

So instead delegate the computation of the actual value type to the
backend: pass $<ival>$ as `symbol-number, ival` and $$ as
`symbol-number, MULL`, instead of passing `ival` before.

* src/scan-code.l (handle_action_dollar): Find the symbol the action
is about, not just its tyye.  Pass both symbol-number, and explicit
type tag ($<tag>n when there is one) to b4_lhs_value and b4_rhs_value.

* data/bison.m4 (b4_symbol_action): adjust to the new signature to
b4_dollar_pushdef.

* data/c-like.m4 (_b4_dollar_dollar, b4_dollar_pushdef): Accept the
symbol-number as new argument.

* data/c.m4 (b4_symbol_value): Accept the symbol-number as new
argument, and use it.
(b4_symbol_value_union): Accept the symbol-number as new
argument, and use it to prefer ready a union member rather than
casting the union.
* data/yacc.c (b4_lhs_value, b4_rhs_value): Accept the new
symbol-number argument.
Adjust uses of b4_dollar_pushdef.
* data/glr.c (b4_lhs_value, b4_rhs_value): Adjust.

* data/lalr1.cc (b4_symbol_value_template, b4_lhs_value): Adjust
to the new symbol-number argument.
* data/variant.hh (b4_symbol_value, b4_symbol_value_template): Accept
the new symbol-number argument.

* data/java.m4 (b4_symbol_value, b4_rhs_data): New.
(b4_rhs_value): Use them.
* data/lalr1.java: Adjust to b4_dollar_pushdef, and use b4_rhs_data.
2018-12-03 18:40:26 +01:00
Akim Demaille e40db8976c style: comment and formatting changes
* data/bison.m4, data/c++.m4, data/glr.c, data/java.m4, data/lalr1.cc,
* data/yacc.c, src/scan-code.l:
Fix comments.
Prefer POS to denote the position of a symbol in a rule, since NUM
is also used to denote symbol numbers.
2018-12-03 08:42:26 +01:00
Akim Demaille d527b2d0f1 NEWS: update 2018-12-03 06:00:07 +01:00
Akim Demaille 1a27d0bf28 java: make sure the build dir exists
* examples/java/local.mk (%D%/Calc.java): here.
2018-12-03 05:45:11 +01:00
Akim Demaille e76a934853 c++: don't define variant<S>, directly define semantic_type
Instead of defining yy::variant<S> and then alias
yy::parser::semantic_type to variant<sizeof (union_type)>, directly
define yy::parser::semantic_type.

This model is more appropriate if we want to sit the storage on top of
unions in C++11.

* data/variant.hh (b4_variant_define): Specialize and inline the
definition into...
(b4_value_type_declare): Here.
Define union_type here.
* data/lalr1.cc: Adjust.
2018-12-03 05:40:46 +01:00
Akim Demaille 7d823c505e NEWS: update 2018-12-01 17:29:04 +01:00
Akim Demaille 6ef788f810 C++: use noexcept and constexpr
There are probably more opportunities for them.
So far, I observed no performance improvements.

* data/c++.m4, data/lalr1.cc, data/stack.hh: here.
2018-12-01 12:54:42 +01:00
Akim Demaille cc422ce677 CI: also display the examples' test suite log
* .travis.yml: here.
2018-12-01 11:13:08 +01:00
Akim Demaille d2386a35f5 java: add an example
* examples/java/Calc.y: New, based on test 495: "Calculator
parse.error=verbose %locations".
* examples/java/Calc.test, examples/java/local.mk: New.

* configure.ac (ENABLE_JAVA): New.
* examples/test (prog): Be ready to run Java programs.
2018-12-01 11:13:08 +01:00
Akim Demaille 3422ee7435 style: unsigned int -> unsigned
See
https://lists.gnu.org/archive/html/bison-patches/2018-08/msg00027.html

* src/output.c (muscle_insert_unsigned_int_table): Rename as...
(muscle_insert_unsigned_table): this.
2018-12-01 11:13:08 +01:00
Akim Demaille e1094c4c09 output: restore yyrhs and yyprhs
This was demanded several times.  See for instance:

- David M. Warme
  https://lists.gnu.org/archive/html/help-bison/2011-04/msg00003.html

- box12009
  http://lists.gnu.org/archive/html/bug-bison/2016-10/msg00001.html

Basically, this reverts:

- commit 3d3bc1fe30
  Get rid of (yy)rhs and (yy)prhs

- commit d333175f63
  Avoid compiler warning.

Note that since these tables are not needed in the generated parsers,
no skeleton requests them.  This change only brings back their
definition to M4, making it possible to user-defined skeletons to use
these tables.

* src/output.c (muscle_insert_item_number_table): Define.
(prepare_rules): Generate the rhs and prhs tables.
2018-12-01 11:12:59 +01:00
Akim Demaille 060da943bd regen 2018-11-30 06:10:21 +01:00
Akim Demaille b7577ea6f6 parser: shorten side-effects on current_type
* src/parse-gram.y (tag.opt): Don't change current_type.
Rather, return its value.
Adjust dependencies.
2018-11-30 06:07:56 +01:00
Akim Demaille 6220e96e76 style: reduce scopes
* src/symlist.c: here.
2018-11-30 06:04:03 +01:00
Akim Demaille 2c6b7c8b2c tests: don't name C++ files *.c
* tests/synclines.at (syncline escapes): Here.
Otherwise, Clang generates an error and skips the test.
2018-11-29 07:44:37 +01:00
Akim Demaille 36e587b1f6 gnulib: update 2018-11-29 06:16:20 +01:00
Akim Demaille b1d6c42ae5 regen 2018-11-29 06:16:20 +01:00
Akim Demaille 8e092082cb parser: factor the symbol definition
* src/parse-gram.y (int.opt, string_as_id.opt): New.
(symbol_def): Use it.
2018-11-29 06:16:20 +01:00
Akim Demaille 2c5e933672 parser: improve location of string alias errors
* src/parse-gram.y (symbol_def): Pass the right location for symbol_make_alias.
* tests/regression.at (Duplicate string): Move to...
* tests/input.at: here.
(Token collisions): New.
2018-11-29 06:16:20 +01:00
Akim Demaille ebe9b20841 doc: formatting changes
* doc/bison.texi: here.
2018-11-28 13:07:41 +01:00
Akim Demaille 23e022718b style: fix quotation in the test suite
* tests/input.at: here.
2018-11-27 20:08:18 +01:00
Akim Demaille 0e9eade009 regen 2018-11-27 08:32:49 +01:00
Akim Demaille 9686b585e7 %nterm: do not accept character literals
Reported by Rici Lake.
http://lists.gnu.org/archive/html/bug-bison/2018-10/msg00000.html

* src/complain.h: Formatting change.
* src/parse-gram.y (id): Reject character literals used in a context
for non-terminals.
* tests/input.at (Invalid %nterm uses): Check that.
2018-11-27 08:25:38 +01:00
Akim Demaille 4bddd33439 %nterm: do not accept numbers nor string alias
Reported by Rici Lake.
http://lists.gnu.org/archive/html/bug-bison/2018-10/msg00000.html

* src/parse-gram.y (symbol_def): Refuse string aliases and numbers
for non-terminals.
(prologue_declaration): Recover from errors ended with ';'.
* tests/input.at (Invalid %nterm uses): New.
2018-11-27 08:25:38 +01:00
Akim Demaille 4ad877fdab TODO: update 2018-11-27 06:12:48 +01:00
Akim Demaille 9476783307 doc: formatting changes
* doc/bison.texi: Here.
2018-11-26 07:56:06 +01:00
Akim Demaille e1c55d83f8 style: comment changes
* tests/testsuite.at: here.
2018-11-26 07:56:06 +01:00
Akim Demaille 647bf48797 gnulib: update ignores 2018-11-26 07:03:55 +01:00
Akim Demaille bcecfbafab gnulib: update to use its bitsets
Bison's bitset were moved to gnulib.

* lib/abitset.c, lib/abitset.h, lib/bbitset.h, lib/bitset.c,
* lib/bitset.h, lib/ebitset.c, lib/ebitset.h, lib/lbitset.c,
* lib/bitset_stats.c, lib/bitset_stats.h, lib/bitsetv-print.c,
* lib/bitsetv-print.h, lib/bitsetv.c, lib/bitsetv.h,
* lib/lbitset.h, lib/vbitset.c, lib/vbitset.h:
Remove.

* gnulib: Update.
* bootstrap.conf, lib/local.mk: Adjust.
2018-11-26 06:33:45 +01:00
Akim Demaille deb2fc1dfc gnulib: use conditional dependencies
* bootstrap.conf: here.
2018-11-25 19:57:08 +01:00
Akim Demaille 3a203e2e56 CI: run on xenial
Xenial (Ubuntu 16.04) is finally available on Travis.  Let's use it.

Among the changes:

- Automake 1.14.1 -> 1.15.0
- Doxygen  1.8.6  -> 1.8.11
- Flex     2.5.35 -> 2.6.0, with plenty of new compiler warnings
- Gettext  0.18.3 -> 0.19.7
- Graphviz 2.36.0 -> 2.38.0
- Texinfo  5.2    -> 6.1

* .travis.yml: here.
2018-11-25 13:22:54 +01:00
Akim Demaille 709c87bb41 CI: we don't need git show
* .travis.yml: Don't run it.
2018-11-25 11:34:10 +01:00
Akim Demaille 9ffed56cd9 regen 2018-11-25 11:27:08 +01:00
Akim Demaille cc050fd321 warning: avoid warnings about unreachable code
Reported by Uxio Prego.
https://lists.gnu.org/archive/html/help-bison/2018-11/msg00031.html

We also need to move the unreachable 'goto' to a reachable place,
otherwise clang complains about the code being unreachable anyway.
See also https://bugs.llvm.org/show_bug.cgi?id=39736.

Interestingly, we don't have to apply that trick to
`#define YYCDEBUG if (false) std::cerr`, clang does not warn when the
code comes from macro expansion.

* configure.ac: Use -Wunreachable-code when supported.
* data/lalr1.cc, data/yacc.c: Pacify clang's warning about `if (0)`
by using a macro.
Another possibility was to move this statement to a reachable place.
* tests/actions.at, tests/c++.at: Avoid generating unreachable code.
2018-11-25 11:22:31 +01:00
Akim Demaille 660811a6c5 yacc.c: avoid generating dead code
We should probably introduce some struct and functions to deal with
stack management, rather than open coding it.  yyparse would be much
nicer to read, and a better model for possible other skeletons.

* data/yacc.c (yyparse::yysetstate): Avoid generating code when
neither yyoverflow nor YYSTACK_RELOCATE is defined.
2018-11-24 13:26:27 +01:00
Akim Demaille 7ded5bb764 %expect-rr: tune the number of conflicts per rule
Currently on a grammar such as

    exp : a '1' | a '2' | a '3' | b '1' | b '2' | b '3'
    a:
    b:

we count only one rr-conflict on the `b:` rule, i.e., we expect:

    b: %expect-rr 1

although there are 3 conflicts in total.  That's because in the
conflicted state we count only a single conflict, not three (one for
each of the lookaheads: '1', '2', '3').

    State 0

        0 $accept: . exp $end
        1 exp: . a '1'
        2    | . a '2'
        3    | . a '3'
        4    | . b '1'
        5    | . b '2'
        6    | . b '3'
        7 a: . %empty  ['1', '2', '3']
        8 b: . %empty  ['1', '2', '3']

        '1'       reduce using rule 7 (a)
        '1'       [reduce using rule 8 (b)]
        '2'       reduce using rule 7 (a)
        '2'       [reduce using rule 8 (b)]
        '3'       reduce using rule 7 (a)
        '3'       [reduce using rule 8 (b)]
        $default  reduce using rule 7 (a)

        exp  go to state 1
        a    go to state 2
        b    go to state 3

See https://lists.gnu.org/archive/html/bison-patches/2013-02/msg00106.html.

* src/conflicts.c (rule_has_state_rr_conflicts): Rename as...
(count_rule_state_sr_conflicts): this.
DWIM.
(count_rule_rr_conflicts): Adjust.
* tests/conflicts.at (%expect-rr in grammar rules)
(%expect-rr too much in grammar rules)
(%expect-rr not enough in grammar rules): New.
2018-11-22 08:34:10 +01:00
Akim Demaille ad0b4661d1 %expect-rr: fix the computation of the overall number of conflicts
On a grammar such as

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

we currently report only one RR conflict, instead of two.

This bug is present since the origins of Bison

    commit 08089d5d35
    Author: David MacKenzie <[email protected]>
    Date:   Tue Apr 20 05:42:52 1993 +0000

       Initial revision

and was preserved in

    commit 676385e29c
    Author: Paul Hilfinger <[email protected]>
    Date:   Fri Jun 28 02:26:44 2002 +0000

       Initial check-in introducing experimental GLR parsing.  See entry in
       ChangeLog dated 2002-06-27 from Paul Hilfinger for details.

See
https://lists.gnu.org/archive/html/bison-patches/2018-11/msg00011.html

* src/conflicts.h, src/conflicts.c (count_state_rr_conflicts)
(count_rr_conflicts): Use only the correct count of conflicts.
* tests/glr-regression.at: Fix expectations.
2018-11-22 08:34:07 +01:00
Akim Demaille 260ae5481c tests: generate *.output files
* tests/glr-regression.at: here.
2018-11-21 22:10:35 +01:00
Akim Demaille e51fd547ca %expect: tune the number of conflicts per rule
Currently on a grammar such as

    exp: "number" | exp "+" exp | exp "*" exp

we count only one sr-conflict for both binary rules, i.e., we expect:

    exp: "number" | exp "+" exp  %expect 1 | exp "*" exp  %expect 1

although there are 4 conflicts in total.  That's because in the states
in conflict, for instance that for the "+" rule:

    State 6

        2 exp: exp . "+" exp
        2    | exp "+" exp .  [$end, "+", "*"]
        3    | exp . "*" exp

        "+"  shift, and go to state 4
        "*"  shift, and go to state 5

        "+"       [reduce using rule 2 (exp)]
        "*"       [reduce using rule 2 (exp)]
        $default  reduce using rule 2 (exp)

we count only a single conflict, although there are two (one on "+"
and another with "*").

See https://lists.gnu.org/archive/html/bison-patches/2013-02/msg00106.html.

* src/conflicts.c (rule_has_state_sr_conflicts): Rename as...
(count_rule_state_sr_conflicts): this.
DWIM.
(count_rule_sr_conflicts): Adjust.
* tests/conflicts.at (%expect in grammar rules): New.
2018-11-21 22:10:35 +01:00
Akim Demaille 4ebebcc438 regen 2018-11-21 22:10:35 +01:00
Akim Demaille 487a2a9eca NEWS: update 2018-11-21 22:05:45 +01:00
Akim Demaille 559114c3cb gnulib: update 2018-11-21 22:03:50 +01:00
Akim Demaille dee62718ae remove ancient lint directives
* data/c++.m4, data/yacc.c: Remove surprising remains of lint
directives.
2018-11-21 08:59:38 +01:00
Akim Demaille 6bc54a934e style: harmonize the labels of yyparse
* data/glr.c, data/lalr1.cc, data/yacc.c: Fix indentation and
other formatting issues.
2018-11-20 20:52:58 +01:00
Akim Demaille ebb92c0545 regen 2018-11-20 20:04:06 +01:00
Akim Demaille e0de1020ea style: avoid lengthy actions
We also lack a consistent naming for directive implementations.
`directive_skeleton` is too long, `percent_skeleton` is not very nice
looking, `process_skeleton` looks ambiguous, `do_skeleton` is somewhat
ambiguous too, but seems a better track.

* src/parse-gram.y (version_check): Rename as...
(do_require): this.
(do_skeleton): New.
Use it.
2018-11-20 20:03:01 +01:00
Akim Demaille 4e510c69b1 c++: using macros around user types breaks when they include comma
We may generate code such as

    basic_symbol (typename Base::kind_type t, YY_RVREF (std::pair<int,int>) v);

which, of course, breaks, because YY_RVREF sees two arguments.  Let's
not play tricks with _VA_ARGS__, I'm unsure about it portability.
Anyway, I plan to change more things in this area.

Reported by Sébastien Villemot.
http://lists.gnu.org/archive/html/bug-bison/2018-11/msg00014.html

* data/variant.hh (b4_basic_symbol_constructor_declare)
(b4_basic_symbol_constructor_define): Don't use macro on user types.
* tests/types.at: Check that we support pairs.
2018-11-20 20:01:50 +01:00
Akim Demaille b72d654fa2 README: update 2018-11-16 17:37:47 +01:00
Akim Demaille 77086ab57d tests: remove duplicate definition
Probably imported by 6d58c63202, a merge
commit.

* tests/atlocal.in (POSIXLY_CORRECT_IS_EXPORTED): Define it once.
2018-11-16 17:37:47 +01:00
Akim Demaille 8474dbc09e glr.c: fix use of _Noreturn
In C++, [[noreturn]] must not be between "static" and the rest of the
function signature, it must precede it.  C's _Noreturn does not seem
to have such a constraint, but it is therefore compatible with the C++
constraint.  Since we #define _Noreturn as [[noreturn]] is modern C++,
be sure to push the _Noreturn first.

Unfortunately this was not caught by the test suite, because it always
loads config.h first, and config.h contains another definition of
_Noreturn that does not use [[noreturn]], and hides ours.  That's
probably a sign we should avoid always loading config.h.

* data/glr.c (yyFail, yyMemoryExhausted): here.
2018-11-16 17:37:47 +01:00
Akim Demaille 8eb1d79333 tests: run the api.value.type tests for all C++ standards
* tests/local.at (AT_LANG_FOR_EACH_STD): New.
(AT_REQUIRE_CXX_VERSION): Rename as...
(AT_REQUIRE_CXX_STD): this.
Accept an argument for what to do when the requirement is not met.
* tests/types.at (api.value.type): Check all the C++ stds.
2018-11-16 17:37:47 +01:00
Akim Demaille 7bd7644702 CI: split the ASAN job in two
The following commit introduce even more compilations/runs than
before, and with ASAN on, we go beyond to 50min credit from Travis.

* .travis.yml (Clang 7 libc++ and ASAN): Split in two.
2018-11-16 17:36:28 +01:00
Akim Demaille 037eff335b c++: use YY_CPLUSPLUS
* data/c++.m4: here.
2018-11-14 21:25:29 +01:00
Akim Demaille 7adeb80765 c++: factor the handling of __cplusplus into YY_CPLUSPLUS
* data/c++.m4 (b4_cxx_portability): Define it.
Use it.
* data/lalr1.cc, data/variant.hh: Use it.
2018-11-13 07:46:08 +01:00
Akim Demaille a52723e3e8 style: formatting changes
* src/scan-gram.l: here.
2018-11-13 07:46:08 +01:00
Akim Demaille e4fd17bffa tests: clarify some magic constant
* tests/c++.at (C++ Variant-based Symbols Unit Tests): here.
2018-11-13 07:46:08 +01:00
Akim Demaille 8ff6ff3ab0 examples: remove useless includes
* examples/c++/variant-11.yy, examples/c++/variant.yy: here.
Fix warning when storing a long into an int.
2018-11-13 06:53:21 +01:00
Akim Demaille 868ea55b7c tests: compile the C++ examples with warnings
* examples/c++/local.mk: Pass $(WARN_CXXFLAGS_TEST).
2018-11-12 18:20:21 +01:00
Akim Demaille 4810ed8107 regen 2018-11-12 07:41:46 +01:00
Akim Demaille 35b8e0e947 parser: deprecate %error-verbose
It is unfortunate that %error_verbose was properly diagnosed as
obsoleted by "%define parse.error verbose", but %error-verbose was
not.

* src/parse-gram.y (%error-verbose): Remove support.
* src/scan-gram.l: Do it here instead, with a warning.
* tests/input.at (Deprecated directives): Check it.
2018-11-12 07:41:46 +01:00
Akim Demaille be7c620d65 tests: migrate from %error-verbose to %define parse.error verbose
* tests/actions.at, tests/c++.at, tests/conflicts.at,
* tests/cxx-type.at, tests/existing.at, tests/glr-regression.at,
* tests/headers.at, tests/input.at, tests/java.at, tests/javapush.at,
* tests/local.at, tests/regression.at, tests/skeletons.at,
* tests/torture.at:
Here.
2018-11-12 07:28:23 +01:00
Akim Demaille 7928c3e6fb parser: deprecate %nterm
It has several weaknesses.
Reported by Rici Lake.
http://lists.gnu.org/archive/html/bug-bison/2018-10/msg00000.html

* src/scan-gram.l: here.
2018-11-12 07:28:20 +01:00
Akim Demaille 8d454b843c tests: fix syncline tests
These tests are skipped with GCC:

    "\"".c:1:5: error: function declaration isn't a prototype [-Werror=strict-prototypes]
     int main() { return 0; }
         ^~~~

* tests/synclines.at: Stop writing C++ in C.
* tests/local.at: Formatting changes.
2018-11-12 07:10:04 +01:00
Akim Demaille 7823c65ee9 NEWS: expected features of Bison 3.3 2018-11-11 08:57:55 +01:00
Akim Demaille e4ee138f64 yacc: reduce scope in push mode
* data/yacc.c (yypull_parse): Here.
2018-11-11 08:57:55 +01:00
Akim Demaille 7d1b1133d0 style: comment changes
* data/c++.m4, data/glr.c, data/lalr1.java, data/yacc.c
(yytranslate, YYTRANSLATE): Harmonize comments.
2018-11-11 07:59:55 +01:00
Akim Demaille 2deb687446 c++: simplify a default construction
* data/lalr1.cc (yytnamerr_): here.
2018-11-10 17:03:36 +01:00
Akim Demaille 3d601616da regen 2018-11-10 17:03:36 +01:00
Akim Demaille bda2bed459 reader: no longer accept %define variable names in quotes
It was never documented.

* src/parse-gram.y (variable): Here.
2018-11-10 17:02:50 +01:00
Akim Demaille 3ae81aa338 dogfooding: use api.value.type union
* src/parse-gram.y (api.value.type): Set to union.
Replace occurrences of %union with explicit %types.
* src/scan-gram.l: Adjust yylval's field names.
(RETURN_VALUE): No longer needs the Field argument.
Use it more.
2018-11-10 17:02:50 +01:00
Akim Demaille c239e53bab djgpp: remove
Support for DJGPP was announced to be removed in the NEWS of Bison
3.1 (2018-08-27) unless someone expressed interest.  There was no answer.

* djgpp: Remove.
* NEWS, Makefile.am, cfg.mk, po/POTFILES.in: Adjust.
2018-11-10 17:02:50 +01:00
Akim Demaille eee37354b5 scanner: simplify use of gettext
* src/scan-gram.l (unexpected_end): Leave the actual call to gettext
to the caller.
2018-11-10 17:02:50 +01:00
Akim Demaille be737c3dd6 style: clean up the scanner and parser
* src/scan-gram.l: Formatting changes.
Add "missing" assertion for symmetry.
* src/parse-gram.y: Formatting changes.
2018-11-10 17:02:50 +01:00