]> git.saurik.com Git - bison.git/blobdiff - ChangeLog
Fail on parse error in calc++.
[bison.git] / ChangeLog
index 83ae569ce52c786934d13d3e919976de0306fd03..c8bb301693b0357d2f688dabee8aa2b7ebdc42f6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,180 @@
+2008-11-03  Akim Demaille  <demaille@gostai.com>
+
+       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  <demaille@gostai.com>
+
+       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  <demaille@gostai.com>
+
+       bench: Improve output.
+       * etc/bench.pl.in (bench_grammar): Tune the printf format.
+
+2008-11-03  Akim Demaille  <demaille@gostai.com>
+
+       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  <demaille@gostai.com>
+
+       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  <demaille@gostai.com>
+
+       bench: More use of the verbosity level.
+       * etc/bench.pl.in ($verbose, &verbose): New.
+       Use them.
+       More POD documentation.
+
+2008-11-03  Akim Demaille  <demaille@gostai.com>
+
+       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  <demaille@gostai.com>
+
+       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  <demaille@gostai.com>
+
+       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  <demaille@gostai.com>
+
+       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  <demaille@gostai.com>
+
+       Add documentation to bench.pl.
+       * etc/bench.pl.in: Comment changes.
+
+2008-11-03  Akim Demaille  <demaille@gostai.com>
+
+       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  <demaille@gostai.com>
+
+       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  <demaille@gostai.com>
+
+       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  <demaille@gostai.com>
+
+       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  <demaille@gostai.com>
+
+       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  <demaille@gostai.com>
 
        Parameterize the extraction of semantic values.