X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/905f069774cbcf94c6f46e8768e1f6a4a2e72591..00a8a0832d880e704aad1b78549874d2ea2890aa:/ChangeLog diff --git a/ChangeLog b/ChangeLog index aaf9c616..8f973721 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,121 @@ +2008-11-11 Akim Demaille + + More TODO. + * TODO (single stack, yysyntax_error): New. + +2008-11-11 Akim Demaille + + Make it possible to return a symbol_type from yylex. + * data/lalr1.cc (b4_lex_symbol_if): New. + (parse): When lex_symbol is defined, expected yylex to return the + complete lookahead. + * etc/bench.pl.in (generate_grammar_list): Extend to support this + yylex interface. + (bench_variant_parser): Exercise it. + +2008-11-11 Akim Demaille + + Remove useless bench case. + * etc/bench.pl.in (bench_variant_parser): VARIANT_DESTROY is + no longer used. + +2008-11-11 Akim Demaille + + Improve display of directives. + * etc/bench.pl.in (parse_term): Don't add useless eol. + +2008-11-11 Akim Demaille + + Use string_cast in the bench. + * etc/bench.pl.in (generate_grammar_list): Define and use + string_cast. + +2008-11-11 Akim Demaille + + Replace yychar with a Boolean. + * data/lalr1.cc (parse::yychar): Replace by... + (parse::yyempty): this. + +2008-11-11 Akim Demaille + + Factor the tables. + * TODO: New item. + +2008-11-11 Akim Demaille + + Let yytranslate handle the eof case. + * data/lalr1.cc (yytranslate_): Handle the EOF case. + Adjust callers. + No longer expect yychar to be equal to yyeof_, rather, test the + lookahead's (translated) kind. + +2008-11-11 Akim Demaille + + yychar cannot be empty in yyerrlab. + * TODO (yychar == yyempty_): New. + * data/lalr1.cc: Remove the handling of this case. + This eases forthcoming changes related to yychar and yytranslate. + +2008-11-11 Akim Demaille + + Bench: syntactic sugar for %define/#define. + * etc/bench.pl.in (parse_dirs): Support %d and #d with arguments. + (&bench_push_parser, bench_variant_parser): Use this feature. + (&eat): New. + Use it. + +2008-11-11 Akim Demaille + + Less memory pressure on the "list" bench. + * etc/bench.pl.in (generate_grammar_list): Do not accumulate all + the values, to limit memory pressure. + +2008-11-11 Akim Demaille + + Introduce make_symbol. + make_symbol provides a means to construct a full symbol (kind, value, + location) in a single shot. It is meant to be a Symbol constructor, + parameterized by the symbol kind so that overloading would prevent + incorrect kind/value pairs. Unfortunately parameterized constructors do + not work well in C++ (unless the parameter also appears as an argument, + which is not acceptable), hence the use of a function instead of a + constructor. + + * data/lalr1.cc (b4_symbol_constructor_declaration_) + (b4_symbol_constructor_declarations) + (b4_symbol_constructor_specialization_) + (b4_symbol_constructor_specializations) + (b4_symbol_constructor_definition_) + (b4_symbol_constructor_definitions): New. + Use them where appropriate to generate declaration, declaration of + the specializations, and implementations of the templated + overloaded function "make_symbol". + (variant::variant): Always define a default ctor. + Also provide a copy ctor. + (symbol_base_type, symbol_type): New ctor overloads for value-less + symbols. + (symbol_type): Now public, so that functions such as yylex can use + it. + +2008-11-11 Akim Demaille + + Inform m4 whether a tag is a valid id. + * src/output.c (is_identifier): New. + (symbol_definitions_output): Use it to define tag_is_id. + But maybe this should be done at m4 level? + +2008-11-11 Akim Demaille + + Test 214 was failing: it greps with a pattern containing [ ]* + which obviously meant to catch spaces and tabs, but contained only + spaces. Tabulations in sources are a nuisance, so to simplify the + matter, get rid of all the tabulations in the Java sources. The + other skeletons will be treated equally later. + + * data/java.m4, data/lalr1.java: Untabify. + * tests/java.at: Simplify AT_CHECK_JAVA_GREP invocations: + tabulations are no longer generated. + 2008-11-11 Paolo Bonzini * bootstrap.conf: Replace m4/warning.m4 with warnings module. @@ -21,7 +139,7 @@ 2008-11-10 Di-an Jan * NEWS: Document them. - + General Java skeleton improvements. * configure.ac (gt_JAVACOMP): Request target of 1.4, which allows using gcj < 4.3 in the testsuite, according to comments in @@ -83,7 +201,7 @@ %define init_throws. * tests/java.at (Java %parse-param and %lex-param): Adjust grep. (Java constructor init and init_throws): Add tests. - + 2008-11-10 Akim Demaille Update TODO. @@ -116,7 +234,7 @@ Make parser::yytranslate static. Small speedup (1%) on the list grammar. And makes yytranslate_ available in non member functions. - + * data/lalr1.cc (yytranslate_): Does not need to be a instance function. @@ -136,7 +254,7 @@ Use "enum" for integral constants. This is just nicer to read, I observed no speedup. - + * data/lalr1.cc (yyeof_, yylast_, yynnts_, yyempty_, yyfinal_) (yterror_, yyerrcode_, yyntokens_): Define as members of an enum. (yyuser_token_number_max_, yyundef_token_): Move into... @@ -184,12 +302,12 @@ 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. @@ -223,7 +341,7 @@ 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. @@ -240,12 +358,12 @@ 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. @@ -378,7 +496,7 @@ 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. @@ -444,7 +562,7 @@ 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. @@ -509,19 +627,19 @@ 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. @@ -610,7 +728,7 @@ 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. @@ -805,22 +923,22 @@ 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 @@ -836,7 +954,7 @@ 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 @@ -869,11 +987,11 @@ 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. @@ -893,7 +1011,7 @@ 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.