X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/241fda7a8d1b4bee368798867c87c635ee074a5d..b9855ea55b31ff6c05a29f54ae860d06a56695ab:/ChangeLog?ds=sidebyside diff --git a/ChangeLog b/ChangeLog index deae34b5..036491a2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,770 @@ +2008-11-10 Akim Demaille + + Formatting changes. + * data/lalr1.cc: here. + +2008-11-10 Akim Demaille + + Adjust verbose message to using emacs. + * etc/bench.pl.in: Inform compilation-mode when we change the + directory. + (generate_grammar_list): Recognize %define "variant" in addition + to %define variant. + +2008-11-10 Akim Demaille + + Classify symbols by type-name. + * src/uniqstr.h (UNIQSTR_CMP): New. + * src/output.c (symbol_type_name_cmp, symbols_by_type_name) + (type_names_output): New. + (muscles_output): Use it. + * data/lalr1.cc (b4_symbol_action_): Remove. + (b4_symbol_case_, b4_type_action_): New. + Adjust uses of b4_symbol_action_ to use b4_type_action_. + +2008-11-10 Akim Demaille + + Change the handling of the symbols in the skeletons. + Before we were using tables which lines were the symbols and which + columns were things like number, tag, type-name etc. It is was + difficult to extend: each time a column was added, all the numbers had + to be updated (you asked for colon $2, not for "tag"). Also, it was + hard to filter these tables when only a subset of the symbols (say the + tokens, or the nterms, or the tokens that have and external number + *and* a type-name) was of interest. + + Now instead of monolithic tables, we define one macro per cell. For + instance "b4_symbol(0, tag)" is a macro name which contents is + self-decriptive. The macro "b4_symbol" provides easier access to + these cells. + + * src/output.c (type_names_output): Remove. + (symbol_numbers_output, symbol_definitions_output): New. + (muscles_output): Call them. + (prepare_symbols): Define b4_symbols_number. + +2008-11-10 Akim Demaille + + --trace=muscles + * src/getargs.h, src/getargs.c (trace_muscle): New. + (trace_types, trace_args): Support it. + * src/output.c (output_skeleton): Use it. + +2008-11-10 Akim Demaille + + muscles_output. + * src/output.c (muscles_output): New, extracted from... + (output_skeleton): here. + Adjust. + +2008-11-10 Akim Demaille + + Formatting changes. + +2008-11-10 Akim Demaille + + Update the variant example. + * examples/variant.yy: Formatting changes. + One stage build. + +2008-11-10 Akim Demaille + + Support constructor with an argument. + This improves the "list" bench by 2%. + + * data/lalr1.cc (variant::build): Add an overloaded version with + an argument. + * tests/c++.at (AT_CHECK_VARIANT): Check it. + +2008-11-10 Akim Demaille + + Test variants. + * tests/c++.at (AT_CHECK_VARIANTS): New. + Use it with and without %define assert. + +2008-11-10 Akim Demaille + + Add %precedence support. + Unfortunately it is not possible to reuse the %prec directive. This + is because to please POSIX, we do not require to end the rules with a + semicolon. As a result, + + foo: bar %prec baz + + is ambiguous: either a rule which precedence is that of baz, or a rule, + and then a declaration of the precedence of the token baz. + + * doc/bison.texinfo: Document %precedence. + (Precedence Only): New. + * src/assoc.h, src/assoc.c (precedence_assoc): New. + * src/conflicts.c (resolve_sr_conflict): Support it. + * src/scan-gram.l, src/parse-gram.y (%precedence): New token. + Parse it. + * tests/calc.at: Use %precedence for NEG. + * tests/conflicts.at (%precedence does not suffice) + (%precedence suffices): New tests. + +2008-11-09 Akim Demaille + + Make benches in a sub dirs. + * etc/bench.pl.in ($dir): New. + Use it. + Check the use of constructors with an argument. + (bench_variant_parser): Fix. + +2008-11-09 Akim Demaille + + fix eof condition + +2008-11-09 Akim Demaille + + Fix --help. + +2008-11-09 Akim Demaille + + Require the generation of parse-gram.output. + * src/Makefile.am (YACC): Pass --report=all. + +2008-11-09 Akim Demaille + + Formatting changes. + +2008-11-09 Akim Demaille + + Update TODO. + * TODO: Remove obsolete items. + Update others. + +2008-11-09 Akim Demaille + + Enhance bench.pl. + * etc/bench.pl.in (parse, parse_expr, parse_term, parse_fact) + (@token, $grammar, $bench): New. + (generate_grammar_variant): Rename as... + (generate_grammar_list): this. + (generate_grammar): Adjust. + (bench_grammar): Rename as... + (bench): this. + Use it in the various bench-marking routines. + (-b, -g): New options. + +2008-11-09 Akim Demaille + + Use a static hierarchy for symbols in the C++ parser. + * data/lalr1.cc (symbol_base_type, symbol_type) + (stack_symbol_type): Make it a static hierarchy. + Adjust dependencies. + +2008-11-09 Akim Demaille + + bench.pl -d, --directive. + * etc/bench.pl.in (@directive): New. + (&bench_grammar): Use it. + (&bench_list_grammar): New, to provide access to the "variant" + grammar. + Use it. + (getopts): Support -d, --directive. + +2008-11-09 Akim Demaille + + Use inline for small operations. + * data/lalr1.cc (symbol_base_type, symbol_type) + (stack_symbol_type): Declare constructor and other operations as + inline. + (yy_destroy_): Inline. + +2008-11-09 Akim Demaille + + Introduce a hierarchy for symbols. + * data/lalr1.cc (symbol_base_type, symbol_type): New. + (data_type): Rename as... + (stack_symbol_type): this. + Derive from symbol_base_type. + (yy_symbol_value_print_): Merge into... + (yy_symbol_print_): this. + Rename as... + (yy_print_): this. + (yydestruct_): Rename as... + (yy_destroy_): this. + (b4_symbols_actions, YY_SYMBOL_PRINT): Adjust. + (parser::parse): yyla is now of symbol_type. + Use its type member instead of yytoken. + +2008-11-09 Akim Demaille + + Rename data_type and stack_symbol_type. + * data/lalr1.cc (data_type): Rename as... + (stack_symbol_type): this. + +2008-11-09 Akim Demaille + + Handle semantic value and location together. + * data/lalr1.cc (b4_symbol_actions): Bounce $$ and @$ to + yydata.value and yydata.location. + (yy_symbol_value_print_, yy_symbol_print_, yydestruct_) + (YY_SYMBOL_PRINT): Now take semantic value and location as a + single arg. + Adjust all callers. + (yydestruct_): New overload for a stack symbol. + +2008-11-09 Akim Demaille + + Push a complete symbol, not connected parts. + * data/lalr1.cc (yypush_): Take a data_type&, not disconnected + state, value and location. + Adjust callers. + +2008-11-09 Akim Demaille + + Agregate yylval and yylloc. + * data/lalr1.cc (parser::yylval, parser::yylloc): Replace by... + (parser::yyla): this. + +2008-11-09 Akim Demaille + + Rely on the state stack to display reduction traces. + To display rhs symbols before a reduction, we used information about the rule + reduced, which required the tables yyrhs and yyprhs. Now use rely only on the + state stack to get the same information. + + * data/lalr1.cc (b4_rhs_data, b4_rhs_state): New. + Use them. + (parser::yyrhs_, parser::yyprhs_): Remove. + (parser::yy_reduce_print_): Use the state stack. + +2008-11-09 Akim Demaille + + Fuse yyval and yyloc into yylhs. + * data/lalr1.cc (b4_lhs_value, b4_lhs_location): Adjust to using + yylhs. + (parse): Replace yyval and yyloc with yylhs.value and + yylhs.location. + After a user action, compute yylhs.state earlier. + (yyerrlab1): Do not play tricks with yylhs.location, rather, use a + fresh error_token. + +2008-11-09 Di-an Jan + + Remove unused variable. + * src/output.c (type_names_output): Remove unused variable sep. + +2008-11-09 Paolo Bonzini + + Change tests/output.at quoting. + * tests/output.at (AT_CHECK_OUTPUT): Use conventional m4 quoting when + expanding arguments. + +2008-11-07 Joel E. Denny + + Don't add a semicolon to actions for %skeleton or %language. + It breaks Java test cases as reported by Akim Demaille. + * src/scan-code.l: Implement. + +2008-11-07 Joel E. Denny + + Clean up %skeleton and %language priority implementation. + * src/getargs.c (skeleton_prio): Use default_prio rather than 2, and + remove static qualifier because others will soon need to see it. + (language_prio): Likewise. + (getargs): Use command_line_prio rather than 0. + * src/getargs.h (command_line_prio, grammar_prio, default_prio): New + enum fields. + (skeleton_prio): Extern it. + (language_prio): Extern it. + * src/parse-gram.y: Use grammar_prio rather than 1. + +2008-11-07 Akim Demaille + + Moving push traces into yypush_. + * data/lalr1.cc (yypush_): Now takes a optional trace message. + Adjust all uses. + +2008-11-07 Akim Demaille + + The single-stack C++ parser is now the standard one. + * data/lalr1.cc: Rename as... + * data/lalr1-split.cc: this. + * data/lalr1-fusion.cc: Rename as... + * data/lalr1.cc: this. + * etc/bench.pl.in: Adjust. + +2008-11-07 Akim Demaille + + Avoid empty-if warnings. + Reported by Quentin Hocquet. + + * data/lalr1-fusion.cc (YY_SYMBOL_PRINT, YY_REDUCE_PRINT) + (YY_STACK_PRINT): Provide some contents even when !YYDEBUG. + +2008-11-07 Akim Demaille + + Pass command line location to skeleton_arg and language_argmatch. + * src/getargs.h, src/getargs.c (skeleton_arg, language_argmatch): + The location argument is now mandatory. + Adjust all dependencies. + (getargs): Use command_line_location. + +2008-11-07 Akim Demaille + + -D, --define. + * src/getargs.c (usage): Document -D. + Fix help string for --locations. + (command_line_location): New. + (short_options, long_options, getargs): Support -D, --define. + (getargs): Move -d support at the right place. + * doc/bison.texinfo (Bison Options): Update. + * tests/input.at (%define, --define): New. + +2008-11-07 Akim Demaille + + Initialize the muscle table before parsing the command line. + * src/getargs.c (quotearg.h, muscle_tab.h): Include. + (getargs): Define file_name. + * src/main.c (main): Initialize muscle_tab before calling + getargs. + * src/muscle_tab.c (muscle_init): No longer define file_name, as + its value is not available yet. + +2008-11-07 Akim Demaille + + Locations without columns for command line arguments. + * src/location.c (location_print): Don't display negative columns. + * src/location.h: Document this. + +2008-11-07 Akim Demaille + + Fix --help. + * src/getargs.c (usage): Fix help string for -W. + +2008-11-07 Akim Demaille + + Handle more general types of option arguments. + * build-aux/cross-options.pl: The argument ends at the first + space, not the first non-symbol character. + Use @var for each word appearing the argument description. + +2008-11-07 Akim Demaille + + Destroy the variants that remain on the stack in case of error. + * data/lalr1-fusion.cc (yydestruct_): Invoke the variant's + destructor. + Display the value only if yymsg is nonnull. + (yyreduce): Invoke yydestruct_ when popping lhs symbols. + +2008-11-07 Akim Demaille + + Add "%define assert" to variants. + This is used to help the user catch cases where some value gets + ovewritten by a new one. This should not happen, as this will + probably leak. + + Unfortunately this uncovered a bug in the C++ parser itself: the + lookahead value was not destroyed between two calls to yylex. For + instance if the previous lookahead was a std::string, and then an int, + then the value of the std::string was correctly taken (i.e., the + lookahead was now an empty string), but std::string structure itself + was not reclaimed. + + This is now done in variant::build(other&) (which is used to take the + value of the lookahead): other is not only stolen from its value, it + is also destroyed. This incurs a new performance penalty of a few + percent, and union becomes faster again. + + * data/lalr1-fusion.cc (variant::build(other&)): Destroy other. + (b4_variant_if): New. + (variant::built): New. + Use it whereever the status of the variant changes. + * etc/bench.pl.in: Check the penalty of %define assert. + +2008-11-07 Akim Demaille + + Use "%define variant" in bench.pl. + * etc/bench.pl.in: No longer use the pseudo directive %variants, + just use %define variants. + +2008-11-07 Akim Demaille + + Regen. + * src/parse-gram.h, src/parse-gram.c: Regen. + +2008-11-04 Joel E. Denny + + Fix user actions without a trailing semicolon. + Reported by Sergei Steshenko at + . + * THANKS (Sergei Steshenko): Add. + * src/scan-code.l (SC_RULE_ACTION): Fix it. + * tests/regression.at (Fix user actions without a trailing semicolon): + New test case. + +2008-11-04 Akim Demaille + + Use b4_copyright_years. + * data/yacc.c (b4_copyright_years): New. + Fix its value according to the comments in the file. + Use it and undefine it. + +2008-11-04 Akim Demaille + + Formatting changes. + * data/lalr1-fusion.cc, src/parse-gram.y: here. + +2008-11-04 Akim Demaille + + Formatting changes. + * data/lalr1-fusion.cc: here. + +2008-11-04 Akim Demaille + + Use strict on bench.pl. + * etc/bench.pl.in (&run, &generate_grammar): New. + Rename the grammar generating functions for consistency. + Change the interface so that the list of benches to run is passed + as (optionless) arguments. + (&compile): Use &run. + +2008-11-04 Akim Demaille + + Remove spurious initial empty lines. + * data/glr.c, data/glr.cc, data/lalr1.cc, data/lalr1.java, + * data/yacc.c: End the @output lines with an @. + +2008-11-04 Akim Demaille + + Improve the display of sizes. + * etc/bench.p.in: Higher precision. + Sort by decreasing size. + +2008-11-04 Akim Demaille + + Don't memcpy C++ structures. + * data/lalr1-fusion.cc (b4_symbol_variant): Adjust additional + arguments. + (variant::build): New overload for + copy-construction-that-destroys. + (variant::swap): New. + (parser::yypush_): Use it in variant mode. + +2008-11-04 Akim Demaille + + Better defaults for bench.pl. + * etc/bench.pl.in ($verbose, $cflags, $iterations): Change the + default values. + Adjust &verbose uses. + (-q, --quiet): New. + +2008-11-04 Akim Demaille + + Make variant.yy more complex. + std::list cannot be copied via memcpy, they are more demanding than + std::string. Use one std::list to strengthen the test. + + * examples/variant.yy: Use lalr1-fusion.cc, not lalr1.cc. + Adjust. + Create a list of strings, instead of a single large string. + +2008-11-04 Akim Demaille + + bench.pl --bench. + * etc/bench.pl.in (--bench, $bench): New. + +2008-11-04 Akim Demaille + + Sort methods. + * data/lalr1-fusion.cc (destroy): Use as() in its definition. + Define it after as(). + +2008-11-04 Akim Demaille + + Useless parens. + * data/lalr1-fusion.cc (b4_rhs_location): Remove useless parens. + +2008-11-04 Akim Demaille + + Issue missing synclines after user actions. + * data/c.m4 (b4_case): Issue synclines on the output file. + +2008-11-04 Akim Demaille + + Remove trailing empty line. + * data/lalr1-fusion.cc: Don't add an empty line after the user's + epilogue. + +2008-11-04 Akim Demaille + + Fix output of copyright years. + * data/bison.m4 (b4_copyright): Fix the indentation of the + copyright year paragraph. + Use b4_copyright_years when no years are given. + * data/lalr1.cc, data/lalr1-fusion.cc, data/location.cc + (b4_copyright_years): New. + Use it. + +2008-11-04 Akim Demaille + + Avoid the spurious initial empty line. + * data/lalr1-fusion.cc, data/location.cc: Put a trailing "@" at + the end of @output request to suppress the empty line that + results. + +2008-11-04 Akim Demaille + + Remove parser::rhs_number_type. + * data/lalr1-fusion.cc (rhs_number_type): No longer define it. + (yyrhs_): Use b4_table_define. + +2008-11-04 Akim Demaille + + Fix iteration type. + * data/lalr1-fusion.cc: Use an int to iterate up to an int. + +2008-11-04 Akim Demaille + + Factor the declaration of the integer tables. + * data/lalr1-fusion.cc (b4_table_define): New. + Use it. + +2008-11-03 Akim Demaille + + Fix indentation of tables in lalr1.cc + * data/lalr1-fusion.cc: Fix the indentation. + +2008-11-03 Akim Demaille + + Destroy the lhs symbols after reduction. + * data/lalr1-fusion.cc (parse): After the user action, when in + variant mode, destroy the lhs symbols. + +2008-11-03 Akim Demaille + + Simplify yysyntax_error_ use. + * data/lalr1-fusion.cc (yysyntax_error_): Always pass it the token + type, but make it unnamed in the declaration when it is not used. + +2008-11-03 Akim Demaille + + Let yy::variant::build return an lvalue. + * data/lalr1-fusion.cc (variant::build): Return a reference to the + object. + +2008-11-03 Akim Demaille + + Define yy::variant only when needed. + * data/lalr1-fusion.cc (yy::variant): Define only if variants are + used. + +2008-11-03 Akim Demaille + + Bench the three-stack lalr1.cc. + * etc/bench.pl.in: Bench the three-stack lalr1.cc vs. the + one-stack one. + +2008-11-03 Akim Demaille + + Fail on parse error in calc++. + * doc/bison.texinfo (calc++.cc): Propagate failures to the exit + status. + * examples/calc++/test ($me, $number, $exit, run): New. + Use them to propagate errors to the exit status. + +2008-11-03 Akim Demaille + + Don't specify the skeleton twice in the example. + * examples/calc++/Makefile.am: Don't pass -S to Bison, the grammar + file does what is needed. + +2008-11-03 Akim Demaille + + bench: Improve output. + * etc/bench.pl.in (bench_grammar): Tune the printf format. + +2008-11-03 Akim Demaille + + bench: check impact of %debug on variants. + * etc/bench.pl.in (variant_grammar): Fix the computation of + $variant. + Generate a grammar file that can work with or without %debug. + Do use the @directive. + (bench_variant_parser): Check impact of %debug. + (@directives): Rename all the occurrences to... + (@directive): this, for consistency. + +2008-11-03 Akim Demaille + + bench: report the size too. + * etc/bench.pl.in ($iterations): Defaults to -3. + (&bench_grammar): Require hireswallclock. + Compute and display the size of the result. + More comments. + +2008-11-03 Akim Demaille + + bench: More use of the verbosity level. + * etc/bench.pl.in ($verbose, &verbose): New. + Use them. + More POD documentation. + +2008-11-03 Akim Demaille + + bench.pl: a command line interface + * etc/bench.pl.in: More doc. + Some fixes in the documentation. + ($cflags, $iterations, &help, &getopt): New. + Use them. + (&variant_grammar): Let the number of stages be 10 times what is + specified. + +2008-11-03 Akim Demaille + + Bench the use of Boost.Variants. + * etc/bench.pl.in ($cxx, &variant_grammar, &bench_variant_parser): + New. + (&compile): Be ready to compile C++ parsers. + (&bench_push_parser): Move debug information to the outermost + level. + * THANKS: Add Michiel De Wilde. + +2008-11-03 Akim Demaille + + bench.pl: Pass directives as a list instead of as a string. + * etc/bench.pl.in (&directives): New. + (&triangular_grammar, &calc_grammar): Use it to format the Bison + directives. + (&triangular_grammar): Do use the directives (were ignored). + (&bench_grammar, &bench_push_parser): Adjust to pass lists of + directives. + +2008-11-03 Akim Demaille + + Improve genericity of bench.pl. + * etc/bench.pl.in (&bench_grammar): Take the set of benches as + argument. + (&bench_push_parser): New. + Call it. + +2008-11-03 Akim Demaille + + Add documentation to bench.pl. + * etc/bench.pl.in: Comment changes. + +2008-11-03 Akim Demaille + + Fuse the three stacks into a single one. + In order to make it easy to perform benchmarks to ensure that there are no + performance loss, lalr1.cc is forked into lalr1-fusion.cc. Eventually, + lalr1-fusion.cc will replace lalr1.cc. + + Meanwhile, to make sure that lalr1-fusion.cc is correctly exercized by the + test suite, the user must install a symbolic link from lalr1.cc to it. + + Instead of having three stacks (state, value, location), use a stack + of triples. This considerably simplifies the code (and it will be + easier not to require locations as currently does the C++ parser), + and also gives a 10% speedup according to etc/bench (probably mainly since + memory allocation is done once instead of three times). + + Another motivation is to make it easier to destruct properly + semantic values: now that they are bound to their state (hence + symbol type) it will be easier to call the appropriate destructor. + + These changes should probably benefit the C parser too. + + * data/lalr1.cc: Copy as... * data/lalr1-fusion.cc: this new + file. + (b4_rhs_value, b4_rhs_location): New definitions overriding those + from c++.m4. + (state_stack_type, semantic_stack_type, location_stack_type) + (yystate_stack_, yysemantic_stack_, yylocation_stack_): Remove. + (data_type, stack_type, yystack_): New. + (YYLLOC_DEFAULT, yypush_): Adjust. + (yyerror_range): Now based on data_type, not location_type. + +2008-11-03 Akim Demaille + + Push the state, value, and location at the same time. + This is needed to prepare a forthcoming patch that fuses the three + stacks into one. + + * data/lalr1.cc (parser::yypush_): New. + (parser::yynewstate): Change the semantics: instead of arriving to + this label when value and location have been pushed, but yystate + is to be pushed on the state stack, now the three of them must + have been pushed before. yystate still must be the new state. + This allows to use yypush_ everywhere instead of individual + handling of the stacks. + +2008-11-03 Akim Demaille + + Prefer references to pointers. + * data/lalr1.cc (b4_symbol_actions): New, overrides the default C + definition to use references instead of pointers. + (yy_symbol_value_print_, yy_symbol_print_, yydestruct_): + Take the value and location as references. + Adjust callers. + +2008-11-03 Akim Demaille + + stack::size instead of stack::height. + * data/lalr1.cc (stack::height): Rename as... + (stack::size): this. + Fix the output type. + Comment changes. + +2008-11-03 Akim Demaille + + Use variants to support objects as semantic values. + This patch was inspired by work by Michiel De Wilde. But he used Boost + variants which (i) requires Boost on the user side, (ii) is slow, and + (iii) has useless overhead (the parser knows the type of the semantic value + there is no reason to duplicate this information as Boost.Variants do). + + This implementation reserves a buffer large enough to store the largest + objects. yy::variant implements this buffer. It was implemented with + Quentin Hocquet. + + * src/output.c (type_names_output): New. + (output_skeleton): Invoke it. + * data/c++.m4 (b4_variant_if): New. + (b4_symbol_value): If needed, provide a definition for variants. + * data/lalr1.cc (b4_symbol_value, b4_symbol_action_) + (b4_symbol_variant, _b4_char_sizeof_counter, _b4_char_sizeof_dummy) + (b4_char_sizeof, yy::variant): New. + (parser::parse): If variants are requested, define + parser::union_type, parser::variant, change the definition of + semantic_type, construct $$ before running the user action instead + of performing a default $$ = $1. + * examples/variant.yy: New. + Based on an example by Michiel De Wilde. + +2008-11-03 Akim Demaille + + Parameterize the extraction of semantic values. + To make future changes easier, no longer rely on ".TYPE" being the + way to get a semantic value. + + * data/c.m4 (b4_symbol_value): New. + Use it. + * data/c++.m4, data/yacc.c: Use it. + * data/glr.c: Use b4_symbol_value. + (b4_rhs_data): New. + Use it. + +2008-11-03 Akim Demaille + + Prepare easier M4 changes. + * data/lalr1.cc: Use escaped [] instead of literals to prepare + future changes. + +2008-11-02 Joel E. Denny + + Initiate further development. + * NEWS: Create an empty section for new entries. + * gnulib: Update submodule to HEAD. + +2008-11-02 Joel E. Denny + + * NEWS: Version 2.4. + 2008-11-02 Joel E. Denny Prepare for next release.