From 3ebecc240d845191154734074e64dc9d15cb1daa Mon Sep 17 00:00:00 2001 From: "Joel E. Denny" Date: Tue, 21 Nov 2006 00:43:26 +0000 Subject: [PATCH 1/1] Rename to <>. Discussed starting at . * NEWS (2.3a+): Update. * doc/bison.texinfo (Freeing Discarded Symbols, Bison Symbols): Update. * src/parse-gram.y (TYPE_TAG_NONE, generic_symlist_item): Implement. * src/scan-gram.l (INITIAL): Implement. * src/symlist.c (symbol_list_default_tagless_new): Update comment. * src/symlist.h (symbol_list, symbol_list_default_tagless_new): Update comment. * tests/actions.at (Default tagless %printer and %destructor, Default tagged and per-type %printer and %destructor, Default %printer and %destructor are not for error or $undefined, Default %printer and %destructor are not for $accept, Default %printer and %destructor for mid-rule values): Update. * tests/input.at (Default %printer and %destructor redeclared, Unused values with default %destructor): Update. --- ChangeLog | 22 +++++++++++++++++++++- NEWS | 4 ++-- doc/bison.texinfo | 12 ++++++------ src/parse-gram.c | 2 +- src/parse-gram.y | 4 ++-- src/scan-gram.l | 2 +- src/symlist.c | 6 +++--- src/symlist.h | 4 ++-- tests/actions.at | 48 +++++++++++++++++++++++------------------------ tests/input.at | 14 +++++++------- 10 files changed, 69 insertions(+), 49 deletions(-) diff --git a/ChangeLog b/ChangeLog index 33c3e2da..ac07c074 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,23 @@ +2006-11-20 Joel E. Denny + + Rename to <>. Discussed starting at + . + * NEWS (2.3a+): Update. + * doc/bison.texinfo (Freeing Discarded Symbols, Bison Symbols): + Update. + * src/parse-gram.y (TYPE_TAG_NONE, generic_symlist_item): Implement. + * src/scan-gram.l (INITIAL): Implement. + * src/symlist.c (symbol_list_default_tagless_new): Update comment. + * src/symlist.h (symbol_list, symbol_list_default_tagless_new): Update + comment. + * tests/actions.at (Default tagless %printer and %destructor, + Default tagged and per-type %printer and %destructor, + Default %printer and %destructor are not for error or $undefined, + Default %printer and %destructor are not for $accept, + Default %printer and %destructor for mid-rule values): Update. + * tests/input.at (Default %printer and %destructor redeclared, + Unused values with default %destructor): Update. + 2006-11-17 Joel E. Denny Don't let %prec take a nonterminal. @@ -160,7 +180,7 @@ * doc/bison.texinfo (Freeing Discarded Symbols): Document this and the previous change today related to mid-rules. (Bison Symbols): Remove %symbol-default and add <*> and . - * src/parser-gram.y (PERCENT_SYMBOL_DEFAULT): Remove. + * src/parse-gram.y (PERCENT_SYMBOL_DEFAULT): Remove. (TYPE_TAG_ANY): Add as <*>. (TYPE_TAG_NONE): Add as . (generic_symlist_item): Remove RHS for %symbol-default and add RHS's diff --git a/NEWS b/NEWS index b1371ae7..607c23ef 100644 --- a/NEWS +++ b/NEWS @@ -33,12 +33,12 @@ Changes in version 2.3a+ (????-??-??): %destructor/%printer for all grammar symbols for which you have formally declared semantic type tags. - 2. Place `' in a %destructor/%printer symbol list to define a default + 2. Place `<>' in a %destructor/%printer symbol list to define a default %destructor/%printer for all grammar symbols without declared semantic type tags. Bison no longer supports the `%symbol-default' notation from Bison 2.3a. - `<*>' and `' combined achieve the same effect with one exception: Bison no + `<*>' and `<>' combined achieve the same effect with one exception: Bison no longer applies any %destructor to a mid-rule value if that mid-rule value is not actually ever referenced using either $$ or $n in a semantic action. diff --git a/doc/bison.texinfo b/doc/bison.texinfo index 8c382520..af4cf4f0 100644 --- a/doc/bison.texinfo +++ b/doc/bison.texinfo @@ -4237,7 +4237,7 @@ For instance, if your locations use a file name, you may use @cindex freeing discarded symbols @findex %destructor @findex <*> -@findex +@findex <> During error recovery (@pxref{Error Recovery}), symbols already pushed on the stack and tokens coming from the rest of the file are discarded until the parser falls on its feet. If the parser runs out of memory, @@ -4271,7 +4271,7 @@ grammar symbol that has that semantic type tag unless that symbol has its own per-symbol @code{%destructor}. Finally, you can define two different kinds of default @code{%destructor}s. -You can place each of @code{<*>} and @code{} in the @var{symbols} list of +You can place each of @code{<*>} and @code{<>} in the @var{symbols} list of exactly one @code{%destructor} declaration in your grammar file. The parser will invoke the @var{code} associated with one of these whenever it discards any user-defined grammar symbol that has no per-symbol and no per-type @@ -4279,7 +4279,7 @@ discards any user-defined grammar symbol that has no per-symbol and no per-type The parser uses the @var{code} for @code{<*>} in the case of such a grammar symbol for which you have formally declared a semantic type tag (@code{%type} counts as such a declaration, but @code{$$} does not). -The parser uses the @var{code} for @code{} in the case of such a grammar +The parser uses the @var{code} for @code{<>} in the case of such a grammar symbol that has no declared semantic type tag. @end deffn @@ -4300,7 +4300,7 @@ For example: %destructor @{ @} %destructor @{ free ($$); @} <*> %destructor @{ free ($$); printf ("%d", @@$.first_line); @} STRING1 string1 -%destructor @{ printf ("Discarding tagless symbol.\n"); @} +%destructor @{ printf ("Discarding tagless symbol.\n"); @} <> @end smallexample @noindent @@ -4339,7 +4339,7 @@ not reference @code{$$} in the mid-rule's action or @code{$@var{n}} (where @var{n} is the RHS symbol position of the mid-rule) in any later action in that rule. However, if you do reference either, the Bison-generated parser will invoke the -@code{} @code{%destructor} whenever it discards the mid-rule symbol. +@code{<>} @code{%destructor} whenever it discards the mid-rule symbol. @ignore @noindent @@ -8572,7 +8572,7 @@ Used to define a default tagged @code{%destructor} or default tagged @xref{Destructor Decl, , Freeing Discarded Symbols}. @end deffn -@deffn {Directive} +@deffn {Directive} <> Used to define a default tagless @code{%destructor} or default tagless @code{%printer}. @xref{Destructor Decl, , Freeing Discarded Symbols}. diff --git a/src/parse-gram.c b/src/parse-gram.c index 62e0afd4..0d1acd70 100644 --- a/src/parse-gram.c +++ b/src/parse-gram.c @@ -699,7 +699,7 @@ static const char *const yytname[] = "\"%requires\"", "\"%skeleton\"", "\"%start\"", "\"%token-table\"", "\"%verbose\"", "\"%yacc\"", "\"{...}\"", "\"char\"", "\"epilogue\"", "\"=\"", "\"identifier\"", "\"identifier:\"", "\"%%\"", "\"|\"", - "\"%{...%}\"", "\";\"", "\"type\"", "\"<*>\"", "\"\"", "\"%union\"", + "\"%{...%}\"", "\";\"", "\"type\"", "\"<*>\"", "\"<>\"", "\"%union\"", "$accept", "input", "prologue_declarations", "prologue_declaration", "grammar_declaration", "union_name", "symbol_declaration", "$@1", "$@2", "precedence_declaration", "precedence_declarator", "type.opt", diff --git a/src/parse-gram.y b/src/parse-gram.y index 522540ac..a277ba79 100644 --- a/src/parse-gram.y +++ b/src/parse-gram.y @@ -176,7 +176,7 @@ static int current_prec = 0; %token SEMICOLON ";" %token TYPE "type" %token TYPE_TAG_ANY "<*>" -%token TYPE_TAG_NONE "" +%token TYPE_TAG_NONE "<>" %type CHAR %printer { fputs (char_name ($$), stderr); } CHAR @@ -397,7 +397,7 @@ generic_symlist_item: symbol { $$ = symbol_list_sym_new ($1, @1); } | TYPE { $$ = symbol_list_type_new ($1, @1); } | "<*>" { $$ = symbol_list_default_tagged_new (@1); } -| "" { $$ = symbol_list_default_tagless_new (@1); } +| "<>" { $$ = symbol_list_default_tagless_new (@1); } ; /* One token definition. */ diff --git a/src/scan-gram.l b/src/scan-gram.l index 88369ea6..55203a09 100644 --- a/src/scan-gram.l +++ b/src/scan-gram.l @@ -210,7 +210,7 @@ splice (\\[ \f\t\v]*\n)* "|" return PIPE; ";" return SEMICOLON; "<*>" return TYPE_TAG_ANY; - "" return TYPE_TAG_NONE; + "<>" return TYPE_TAG_NONE; {id} { val->uniqstr = uniqstr_new (yytext); diff --git a/src/symlist.c b/src/symlist.c index 245196b2..40dc5132 100644 --- a/src/symlist.c +++ b/src/symlist.c @@ -91,9 +91,9 @@ symbol_list_default_tagged_new (location loc) } -/*----------------------------------------. -| Create a list containing a at LOC. | -`----------------------------------------*/ +/*---------------------------------------. +| Create a list containing a <> at LOC. | +`---------------------------------------*/ symbol_list * symbol_list_default_tagless_new (location loc) diff --git a/src/symlist.h b/src/symlist.h index 9da8afe5..8bb7e897 100644 --- a/src/symlist.h +++ b/src/symlist.h @@ -30,7 +30,7 @@ typedef struct symbol_list { /** * Whether this node contains a symbol, a semantic type, a \c <*>, or a - * \c . + * \c <>. */ enum { SYMLIST_SYMBOL, SYMLIST_TYPE, @@ -81,7 +81,7 @@ symbol_list *symbol_list_type_new (uniqstr type_name, location loc); /** Create a list containing a \c <*> at \c loc. */ symbol_list *symbol_list_default_tagged_new (location loc); -/** Create a list containing a \c at \c loc. */ +/** Create a list containing a \c <> at \c loc. */ symbol_list *symbol_list_default_tagless_new (location loc); /** Print this list. diff --git a/tests/actions.at b/tests/actions.at index 672a4dbf..66dc6277 100644 --- a/tests/actions.at +++ b/tests/actions.at @@ -614,11 +614,11 @@ AT_DATA_GRAMMAR([[input.y]], } <*> %printer { - fprintf (yyoutput, " printer for '%c' @ %d", $$, @$.first_column); -} + fprintf (yyoutput, "<> printer for '%c' @ %d", $$, @$.first_column); +} <> %destructor { - fprintf (stdout, " destructor for '%c' @ %d.\n", $$, @$.first_column); -} + fprintf (stdout, "<> destructor for '%c' @ %d.\n", $$, @$.first_column); +} <> %printer { fprintf (yyoutput, "'b'/'c' printer for '%c' @ %d", $$, @$.first_column); @@ -667,15 +667,15 @@ main (void) AT_CHECK([bison -o input.c input.y]) AT_COMPILE([input]) AT_PARSER_CHECK([./input], 1, -[[ destructor for 'd' @ 4. +[[<> destructor for 'd' @ 4. 'b'/'c' destructor for 'c' @ 3. 'b'/'c' destructor for 'b' @ 2. - destructor for 'a' @ 1. +<> destructor for 'a' @ 1. ]], [[Starting parse Entering state 0 -Reading a token: Next token is token 'a' (1.1-1.1: printer for 'a' @ 1) -Shifting token 'a' (1.1-1.1: printer for 'a' @ 1) +Reading a token: Next token is token 'a' (1.1-1.1: <> printer for 'a' @ 1) +Shifting token 'a' (1.1-1.1: <> printer for 'a' @ 1) Entering state 1 Reading a token: Next token is token 'b' (1.2-1.2: 'b'/'c' printer for 'b' @ 2) Shifting token 'b' (1.2-1.2: 'b'/'c' printer for 'b' @ 2) @@ -683,18 +683,18 @@ Entering state 3 Reading a token: Next token is token 'c' (1.3-1.3: 'b'/'c' printer for 'c' @ 3) Shifting token 'c' (1.3-1.3: 'b'/'c' printer for 'c' @ 3) Entering state 5 -Reading a token: Next token is token 'd' (1.4-1.4: printer for 'd' @ 4) -Shifting token 'd' (1.4-1.4: printer for 'd' @ 4) +Reading a token: Next token is token 'd' (1.4-1.4: <> printer for 'd' @ 4) +Shifting token 'd' (1.4-1.4: <> printer for 'd' @ 4) Entering state 6 Reading a token: Now at end of input. syntax error, unexpected $end, expecting 'e' -Error: popping token 'd' (1.4-1.4: printer for 'd' @ 4) +Error: popping token 'd' (1.4-1.4: <> printer for 'd' @ 4) Stack now 0 1 3 5 Error: popping token 'c' (1.3-1.3: 'b'/'c' printer for 'c' @ 3) Stack now 0 1 3 Error: popping token 'b' (1.2-1.2: 'b'/'c' printer for 'b' @ 2) Stack now 0 1 -Error: popping token 'a' (1.1-1.1: printer for 'a' @ 1) +Error: popping token 'a' (1.1-1.1: <> printer for 'a' @ 1) Stack now 0 Cleanup: discarding lookahead token $end (1.5-1.5: ) Stack now 0 @@ -723,8 +723,8 @@ AT_DATA_GRAMMAR([[input.y]], %} %printer { - fprintf (yyoutput, " printer should not be called.\n"); -} + fprintf (yyoutput, "<> printer should not be called.\n"); +} <> %union { int field0; int field1; int field2; } %type start 'a' 'g' @@ -750,8 +750,8 @@ AT_DATA_GRAMMAR([[input.y]], %destructor { fprintf (stdout, "'d' destructor.\n"); } 'd' %destructor { - fprintf (yyoutput, " destructor should not be called.\n"); -} + fprintf (yyoutput, "<> destructor should not be called.\n"); +} <> %% @@ -851,8 +851,8 @@ AT_SETUP([Default %printer and %destructor for user-defined end token]) # ----------------------------------------------------------------------------- m4_define([_AT_CHECK_DEFAULT_PRINTER_AND_DESTRUCTOR_FOR_END_TOKEN], [m4_if($1, 0, - [m4_pushdef([kind], [!]) m4_pushdef([not_kind], [*])], - [m4_pushdef([kind], [*]) m4_pushdef([not_kind], [!])]) + [m4_pushdef([kind], []) m4_pushdef([not_kind], [*])], + [m4_pushdef([kind], [*]) m4_pushdef([not_kind], [])]) AT_DATA_GRAMMAR([[input]]$1[[.y]], [[%error-verbose @@ -983,10 +983,10 @@ AT_DATA_GRAMMAR([[input.y]], %printer { fprintf (yyoutput, "'%c'", $$); -} <*> +} <> <*> %destructor { fprintf (stderr, "DESTROY '%c'\n", $$); -} <*> +} <> <*> %% @@ -1098,11 +1098,11 @@ AT_DATA_GRAMMAR([[input.y]], %printer { char chr = $$; fprintf (yyoutput, "'%c'", chr); -} <*> +} <> <*> %destructor { char chr = $$; fprintf (stderr, "DESTROY '%c'\n", chr); -} <*> +} <> <*> %union { char chr; } %type start @@ -1162,8 +1162,8 @@ AT_DATA_GRAMMAR([[input.y]], # define YY_LOCATION_PRINT(File, Loc) %} -%printer { fprintf (yyoutput, "%d", @$); } -%destructor { fprintf (stderr, "DESTROY %d\n", @$); } +%printer { fprintf (yyoutput, "%d", @$); } <> +%destructor { fprintf (stderr, "DESTROY %d\n", @$); } <> %printer { fprintf (yyoutput, "<*> printer should not be called"); } <*> %destructor { fprintf (yyoutput, "<*> destructor should not be called"); } <*> diff --git a/tests/input.at b/tests/input.at index dfcebfd9..5df3d5af 100644 --- a/tests/input.at +++ b/tests/input.at @@ -188,11 +188,11 @@ AT_DATA([[input.y]], %destructor { destroy ($$); } <*> %printer { destroy ($$); } <*> -%destructor { destroy ($$); } -%printer { destroy ($$); } +%destructor { destroy ($$); } <> <> +%printer { destroy ($$); } <> <> -%destructor { destroy ($$); } -%printer { destroy ($$); } +%destructor { destroy ($$); } <> +%printer { destroy ($$); } <> %% @@ -201,8 +201,8 @@ start: ; %destructor { destroy ($$); } <*>; %printer { destroy ($$); } <*>; -%destructor { destroy ($$); } ; -%printer { destroy ($$); } ; +%destructor { destroy ($$); } <>; +%printer { destroy ($$); } <>; ]]) AT_CHECK([bison input.y], [1], [], @@ -285,7 +285,7 @@ AT_CLEANUP AT_SETUP([Unused values with default %destructor]) AT_DATA([[input.y]], -[[%destructor { destroy ($$); } +[[%destructor { destroy ($$); } <> %type tagged %% -- 2.45.2