Its value describes the states that are permitted to contain
default rules: "all", "consistent", or "accepting".
* src/reader.c (reader): Default lr.default_rules to "all".
Check for a valid lr.default_rules value.
* src/lalr.c (state_lookahead_tokens_count): If lr.default_rules
is "accepting", then only mark the accepting state as
consistent.
(initialize_LA): Tell state_lookahead_tokens_count whether
lr.default_rules is "accepting".
* src/tables.c (action_row): If lr.default_rules is not "all",
then disable default rules in inconsistent states.
* src/print.c (print_reductions): Use this opportunity to
perform some assertions about whether lr.default_rules was
obeyed correctly.
* tests/local.at (AT_TEST_TABLES_AND_PARSE): New macro that
helps with checking the parser tables for a grammar.
* tests/input.at (%define lr.default_rules invalid values): New
test group.
* tests/reduce.at (AT_TEST_LR_DEFAULT_RULES): New macro using
AT_TEST_TABLES_AND_PARSE.
(`no %define lr.default_rules'): New test group generated by
AT_TEST_LR_DEFAULT_RULES.
(`%define lr.default_rules "all"'): Likewise.
(`%define lr.default_rules "consistent"'): Likewise.
(`%define lr.default_rules "accepting"'): Likewise.
* data/bison.m4 (b4_percent_define_if_define_): Also map dashes to
underscores.
* src/scan-gram.l ({id}): Also accept dashes after the initial
letter.
({directive}): Use {id}.
* src/parse-gram.y: Comment and formatting changes.
* doc/bison.texinfo (Symbols): Adjust the lexical definitions of
symbols.
* src/complain.h, src/complain.c (yacc_at): New.
* src/symtab.c (symbol_new): Use yacc_at to report inappropriate
symbol names.
* src/output.c (token_definitions_output): Do not #define token
names with dashes.
* src/getargs.h, src/getargs.c (locations_flag): Remove.
* src/getargs.c, src/scan-code.l: Use muscle_percent_define_ensure
to set "locations" to true.
* src/output.c (prepare): Don't output "locations".
* src/scan-gram.l (%locations): Handle it as a %<flag>.
* src/parse-gram.y: It's no longer a token.
Don't handle it.
* data/bison.m4 (b4_locations_if): Define it with
b4_percent_define_if_define.
* data/c.m4, data/glr.cc: Adjust.
Suggested by Joel E. Denny.
* src/muscle_tab.h, src/muscle_tab.c (muscle_percent_define_ensure):
New, extracted from...
* src/parse-gram.y (prologue_declaration: pure-parser): here.
Remove it.
(prologue_declaration: "%<flag>"): Use
muscle_percent_define_ensure.
(%error-verbose, %pure-parser): No longer tokens.
* src/scan-gram.l (pure-parser): Return as a %<flag>.
* src/parse-gram.y (PERCENT_DEBUG, PERCENT_ERROR_VERBOSE): Token
definitions and associated rules, replaced by....
(PERCENT_FLAG): this new token type, and rule.
* src/scan-gram.l (RETURN_PERCENT_FLAG): New.
Use it for %debug and %error-verbose.
This allows to pass -Derror_verbose on the command line. Better yet, it
allows to pass -Derror_verbose=$(ERROR_VERBOSE), with ERROR_VERBOSE being
defined as false or true.
* data/bison.m4 (b4_percent_define_if_define): Instead of relying
on b4_percent_define_ifdef, for does not check the defined value,
but only whether the symbol is defined, rely on
b4_percent_define_flag_if, so that a value of "false" is processed
as a false.
If not defined, define the flag to "false".
(b4_error_verbose_if): New.
* data/glr.c, data/lalr1.cc, data/yacc.c: Use it instead of
b4_error_verbose_flag.
* src/getargs.h, src/getargs.c (error_verbose_flag): Remove.
* src/output.c (prepare): Don't output it.
* src/parse-gram.y (%error-verbose): Treat as %define error_verbose.
Reported by Akim Demaille at
<http://lists.gnu.org/archive/html/bug-bison/2007-12/msg00001.html>
and discussed again starting at
<http://lists.gnu.org/archive/html/bison-patches/2008-11/msg00102.html>.
* data/bison.m4 (b4_percent_define_default): Leave syncline blank
because location information is bogus.
Use angle brackets to delimit fake file name because square brackets
look like over-quoted m4. Choose a better fake file name.
Use negative line numbers.
* src/muscle_tab.c (muscle_percent_define_default): Likewise.
* src/location.c (location_print): If line for a boundary is negative,
only print that boundary's file name.
* src/location.h: Document that.
* tests/skeletons.at (%define Boolean variables: invalid skeleton
defaults): Update output.
* Makefile.am (AM_CFLAGS): Remove $(WERROR_CFLAGS) because many files
in lib won't compile with it.
* src/local.mk (src_bison_CFLAGS): Use $(WERROR_CFLAGS) here only.
if it seems necessary.
* src/scan-code.l (flex rules section): Flag cpp directive from
any `#' to the first unescaped end-of-line. Semicolon is not
needed after `;', `{', '}', or cpp directives and is needed after
any other token (whitespaces and comments have no effect).
* tests/actions.at (Fix user actions without a trailing semicolon):
New test.
* tests/input.at (AT_CHECK_UNUSED_VALUES): Add semicolons to
to make user actions complete statements.
Adjust column numbers in error messages.
* tests/regression.at (Fix user actions without a trailing semicolon):
Remove. Covered by new test.
* data/bison.m4 (b4_symbol_action_location): New.
* data/c.m4 (b4_symbol_actions): Remove.
Adjust all callers to use by b4_symbol_foreach and the corresponding
b4_symbol_printer/destructor macro.
* data/glr.cc: Adjust.
* data/lalr1.java: Adjust the %destructor sanity check.
* src/output.c (symbol_code_props_output): Remove, we no longer
need the b4_symbol_printers/destructors tables.
Instead of defining complex list of tuples to define various properties of
the symbols, we now prefer to define symbols as "structs" in m4: using the
symbol key (its number), and the property name, b4_symbol gives it value.
Use this to handle destructors and printers.
* src/output.c (CODE_PROP): New.
(prepare_symbol_definitions): Use it to define the printer and
destructor related attributes of the symbols.
* data/lalr1.cc (b4_symbol_actions): Rename as...
(b4_symbol_action): this.
Use b4_symbol instead of 6 arguments.
(b4_symbol_printer, b4_symbol_destructor): New.
Use them instead of b4_symbol_actions.
The real problem is rather gnulib.mk, which itself is extracted from a
Makefile.am that gnulib expects to the "recursive". The tool
prefix-gnulib-mk converts such a gnulib.mk to be non-recursive. Also,
some AC_SUBST variables need to be adjusted.
* etc/prefix-gnulib-mk: New.
* bootstrap (slurp): Use it to convert further gnulib.mk.
* lib/Makefile.am: Rename as...
* lib/local.mk: this.
Adjust to be prefixed.
* Makefile.am, configure.ac: Adjust.
* src/local.mk (AM_CPPFLAGS): Extend it, don't define it.
These tables are no longer needed in the parsers, and they don't seem to
be useful. They are not documented either.
* src/output.c (prepare_rules): Get rid of rhs and prhs.
Adjust the computation of (yy)r2.
* doc/bison.texinfo (-g, -x): Add space before argument.
(Option Cross Key): Implement FIXME: listing directives also.
* build-aux/cross-options.pl: Read from <STDIN> rather than <>.
(Short Option): Special case -d. Put arguments inside @option.
(Bison Directive): Add column, automatically extracted from
src/scan-gram.l (actual name passed as the first argument)
with special case for %define.
* doc/local.mk (doc/cross-options.texi): Pass src/scan-gram.l
to build-aux/cross-options.pl.
* src/getargs.c (usage): Document limitations of cross-options.pl.
* src/scan-gram.l: Likewise.
* src/getargs.c (command_line_location): Set parameters to void.
* src/output.c (symbol_type_name_cmp): Make static.
(symbols_by_type_name): Set parameters to void.
(symbol_definitions_output): Remove unused parameter. Rename as...
(prepare_symbol_definitions): this.
(muscles_output): Move symbol_definitions_output to...
(output): here as prepare_symbol_definitions.
* tests/c++.at (AT_CHECK_VARIANTS): Remove unused parameters of main.
(AT_CHECK_NAMESPACE): Make unused parameter lloc unnamed.
There are two issues to handle: first scanning nested angle bracket pairs
to support types such as std::pair< std::string, std::list<std::string> > >.
Another issue is to address idiosyncracies of C++: do not glue two closing
angle brackets together (otherwise it's operator>>), and avoid sticking
blindly a TYPE to the opening <, as it can result in '<:' which is a
digraph for '['.
* src/scan-gram.l (brace_level): Rename as...
(nesting): this.
(SC_TAG): New.
Implement support for complex tags.
(tag): Accept \n, but not <.
* data/lalr1.cc (b4_symbol_value, b4_symbol_value_template)
(b4_symbol_variant): Leave space around types as parameters.
* examples/variant.yy: Use nested template types and leading ::.
* src/parse-gram.y (TYPE, TYPE_TAG_ANY, TYPE_TAG_NONE, type.opt):
Rename as...
(TAG, TAG_ANY, TAG_NONE, tag.opt): these.
* tests/c++.at: Test parametric types.
It does not work, and I don't know how it was supposed to work: it seems
to be looking for sources in the build tree. I just moved it at a better
place, fixing it is still required.
* src/local.mk (echo): Remove.
(sc_tight_scope): Move to...
* maint.mk: here.
* src/Makefile.am: Rename as...
* src/local.mk: this.
Prefix all the paths with src/.
(AUTOMAKE_OPTIONS): Build object files in the sub dirs.
(AM_CPPFLAGS): Find find in builddir/src.
(YACC): Move the flags into...
(AM_YFLAGS): here.
* maint.mk (sc_tight_scope): Disable.
It used to bounce to the version in src/Makefile.am which is now
part of this very Makefile.
* Makefile.am, configure.ac: Adjust.
* src/scan-code-c.c, src/scan-code.l: We can no longer rely on
include "..." to find files "here": we are no longer in src/, so
qualify the includes with src/.
* doc/Makefile.am (PREPATH): No longer include the top_builddir
prefix.
(.x.1): Adjust to be able to create src/foo from the top level
Makefile, instead of going bounce to src/Makefile the creation of
foo.
Symbols may have several string representations, for instance if they
have an alias. What I call its "id" is a string that can be used as
an identifier. May not exist.
Currently the symbols which have the "tag_is_id" flag set are those that
don't have an alias. Look harder for the id.
* src/output.c (is_identifier): Move to...
* src/symtab.c (is_identifier): here.
* src/symtab.h, src/symtab.c (symbol_id_get): New.
* src/output.c (symbol_definitions_output): Use it to define "id"
and "has_id".
Remove the definition of "tag_is_id".
* data/lalr1.cc: Use the "id" and "has_id" whereever "tag" and
"tag_is_id" were used to produce code.
We still use "tag" for documentation.