]> git.saurik.com Git - bison.git/commitdiff
Rename <!> to <>. Discussed starting at
authorJoel E. Denny <jdenny@ces.clemson.edu>
Tue, 21 Nov 2006 00:43:26 +0000 (00:43 +0000)
committerJoel E. Denny <jdenny@ces.clemson.edu>
Tue, 21 Nov 2006 00:43:26 +0000 (00:43 +0000)
<http://lists.gnu.org/archive/html/bison-patches/2006-11/msg00039.html>.
* 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
NEWS
doc/bison.texinfo
src/parse-gram.c
src/parse-gram.y
src/scan-gram.l
src/symlist.c
src/symlist.h
tests/actions.at
tests/input.at

index 33c3e2da8862d5ff81d0427ff768924cdd56a8f7..ac07c07484ee97c8799819c445183b941b2dd06a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,23 @@
+2006-11-20  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       Rename <!> to <>.  Discussed starting at
+       <http://lists.gnu.org/archive/html/bison-patches/2006-11/msg00039.html>.
+       * 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  <jdenny@ces.clemson.edu>
 
        Don't let %prec take a nonterminal.
 2006-11-17  Joel E. Denny  <jdenny@ces.clemson.edu>
 
        Don't let %prec take a nonterminal.
        * 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 <!>.
        * 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
        (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 b1371ae7fe15f9acacbb9810fddcfba3d9d902ae..607c23efc532edb5966bff097966a0bddc2f3d61 100644 (file)
--- 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.
 
        %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.
        %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.
 
   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.
 
index 8c382520b155de510b49b19c9b10793da8f62b38..af4cf4f01e5089f492cb4259541d101b258b3506 100644 (file)
@@ -4237,7 +4237,7 @@ For instance, if your locations use a file name, you may use
 @cindex freeing discarded symbols
 @findex %destructor
 @findex <*>
 @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,
 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.
 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
 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{$<tag>$} does not).
 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{$<tag>$} 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
 
 symbol that has no declared semantic type tag.
 @end deffn
 
@@ -4300,7 +4300,7 @@ For example:
 %destructor @{ @} <character>
 %destructor @{ free ($$); @} <*>
 %destructor @{ free ($$); printf ("%d", @@$.first_line); @} STRING1 string1
 %destructor @{ @} <character>
 %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
 @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
 @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
 
 @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
 
 @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}.
 Used to define a default tagless @code{%destructor} or default tagless
 @code{%printer}.
 @xref{Destructor Decl, , Freeing Discarded Symbols}.
index 62e0afd446ae8dec48b04c2927b9ff06a14085d1..0d1acd7028fb0c1b85c48d68418d9e92c8ab2983 100644 (file)
@@ -699,7 +699,7 @@ static const char *const yytname[] =
   "\"%requires\"", "\"%skeleton\"", "\"%start\"", "\"%token-table\"",
   "\"%verbose\"", "\"%yacc\"", "\"{...}\"", "\"char\"", "\"epilogue\"",
   "\"=\"", "\"identifier\"", "\"identifier:\"", "\"%%\"", "\"|\"",
   "\"%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",
   "$accept", "input", "prologue_declarations", "prologue_declaration",
   "grammar_declaration", "union_name", "symbol_declaration", "$@1", "$@2",
   "precedence_declaration", "precedence_declarator", "type.opt",
index 522540ac905c2d7887186d37265a232f03f96076..a277ba79cca097642a35bce5f86d572145495f61 100644 (file)
@@ -176,7 +176,7 @@ static int current_prec = 0;
 %token SEMICOLON       ";"
 %token TYPE            "type"
 %token TYPE_TAG_ANY    "<*>"
 %token SEMICOLON       ";"
 %token TYPE            "type"
 %token TYPE_TAG_ANY    "<*>"
-%token TYPE_TAG_NONE   "<!>"
+%token TYPE_TAG_NONE   "<>"
 
 %type <character> CHAR
 %printer { fputs (char_name ($$), stderr); } CHAR
 
 %type <character> 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            { $$ = 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.  */
 ;
 
 /* One token definition.  */
index 88369ea6b50097b1d2d0f17f5d1cf6e250983646..55203a0930f2be99588b60068888b5624091bbd2 100644 (file)
@@ -210,7 +210,7 @@ splice       (\\[ \f\t\v]*\n)*
   "|"                     return PIPE;
   ";"                     return SEMICOLON;
   "<*>"                   return TYPE_TAG_ANY;
   "|"                     return PIPE;
   ";"                     return SEMICOLON;
   "<*>"                   return TYPE_TAG_ANY;
-  "<!>"                   return TYPE_TAG_NONE;
+  "<>"                    return TYPE_TAG_NONE;
 
   {id} {
     val->uniqstr = uniqstr_new (yytext);
 
   {id} {
     val->uniqstr = uniqstr_new (yytext);
index 245196b27fbf9477f27e66ab649df7893973f4b2..40dc5132da74ae3cdc0116879de76c7a39919fc1 100644 (file)
@@ -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)
 
 symbol_list *
 symbol_list_default_tagless_new (location loc)
index 9da8afe5a007df98598a6996f54cd1a4575010d8..8bb7e8970f103462b408b45b65f5307c75c5bad9 100644 (file)
@@ -30,7 +30,7 @@ typedef struct symbol_list
 {
   /**
    * Whether this node contains a symbol, a semantic type, a \c <*>, or a
 {
   /**
    * Whether this node contains a symbol, a semantic type, a \c <*>, or a
-   * \c <!>.
+   * \c <>.
    */
   enum {
     SYMLIST_SYMBOL, SYMLIST_TYPE,
    */
   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.  */
 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.
 symbol_list *symbol_list_default_tagless_new (location loc);
 
 /** Print this list.
index 672a4dbf744cadb9ba82445dae7752a53b7b3ab3..66dc62772c46d506fccb20352ff125b10530494e 100644 (file)
@@ -614,11 +614,11 @@ AT_DATA_GRAMMAR([[input.y]],
 } <*>
 
 %printer {
 } <*>
 
 %printer {
-  fprintf (yyoutput, "<!> printer for '%c' @ %d", $$, @$.first_column);
-} <!>
+  fprintf (yyoutput, "<> printer for '%c' @ %d", $$, @$.first_column);
+} <>
 %destructor {
 %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);
 
 %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,
 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.
 '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
 ]],
 [[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)
 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 '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'
 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
 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
 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 {
 %}
 
 %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 <field0> start 'a' 'g'
 
 %union { int field0; int field1; int field2; }
 %type <field0> start 'a' 'g'
@@ -750,8 +750,8 @@ AT_DATA_GRAMMAR([[input.y]],
 %destructor { fprintf (stdout, "'d' destructor.\n"); } 'd'
 
 %destructor {
 %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_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
 
 AT_DATA_GRAMMAR([[input]]$1[[.y]],
 [[%error-verbose
@@ -983,10 +983,10 @@ AT_DATA_GRAMMAR([[input.y]],
 
 %printer {
   fprintf (yyoutput, "'%c'", $$);
 
 %printer {
   fprintf (yyoutput, "'%c'", $$);
-} <!> <*>
+} <> <*>
 %destructor {
   fprintf (stderr, "DESTROY '%c'\n", $$);
 %destructor {
   fprintf (stderr, "DESTROY '%c'\n", $$);
-} <!> <*>
+} <> <*>
 
 %%
 
 
 %%
 
@@ -1098,11 +1098,11 @@ AT_DATA_GRAMMAR([[input.y]],
 %printer {
   char chr = $$;
   fprintf (yyoutput, "'%c'", chr);
 %printer {
   char chr = $$;
   fprintf (yyoutput, "'%c'", chr);
-} <!> <*>
+} <> <*>
 %destructor {
   char chr = $$;
   fprintf (stderr, "DESTROY '%c'\n", chr);
 %destructor {
   char chr = $$;
   fprintf (stderr, "DESTROY '%c'\n", chr);
-} <!> <*>
+} <> <*>
 
 %union { char chr; }
 %type <chr> start
 
 %union { char chr; }
 %type <chr> start
@@ -1162,8 +1162,8 @@ AT_DATA_GRAMMAR([[input.y]],
 # define YY_LOCATION_PRINT(File, Loc)
 %}
 
 # 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"); } <*>
 
 %printer { fprintf (yyoutput, "<*> printer should not be called"); } <*>
 %destructor { fprintf (yyoutput, "<*> destructor should not be called"); } <*>
 
index dfcebfd9a6902cefb6a534f130c44e504c4e028c..5df3d5af88980b46b52eee0c3096db7081ae4d7c 100644 (file)
@@ -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 ($$); } <!>
+%destructor { destroy ($$); } <>
+%printer { destroy ($$); } <>
 
 %%
 
 
 %%
 
@@ -201,8 +201,8 @@ start: ;
 %destructor { destroy ($$); } <*>;
 %printer { destroy ($$); } <*>;
 
 %destructor { destroy ($$); } <*>;
 %printer { destroy ($$); } <*>;
 
-%destructor { destroy ($$); } <!>;
-%printer { destroy ($$); } <!>;
+%destructor { destroy ($$); } <>;
+%printer { destroy ($$); } <>;
 ]])
 
 AT_CHECK([bison input.y], [1], [],
 ]])
 
 AT_CHECK([bison input.y], [1], [],
@@ -285,7 +285,7 @@ AT_CLEANUP
 AT_SETUP([Unused values with default %destructor])
 
 AT_DATA([[input.y]],
 AT_SETUP([Unused values with default %destructor])
 
 AT_DATA([[input.y]],
-[[%destructor { destroy ($$); } <!>
+[[%destructor { destroy ($$); } <>
 %type <tag> tagged
 
 %%
 %type <tag> tagged
 
 %%