Improved and more comprehensive markup
authorNick Downing <downing.nick@gmail.com>
Fri, 15 Jun 2018 13:36:29 +0000 (23:36 +1000)
committerNick Downing <downing.nick@gmail.com>
Fri, 15 Jun 2018 13:36:29 +0000 (23:36 +1000)
n.sh
src/parse-gram.c
src/parse-gram.h
src/parse-gram.y
src/scan-gram.c
src/scan-gram.l

diff --git a/n.sh b/n.sh
index 727c699..7618812 100755 (executable)
--- a/n.sh
+++ b/n.sh
@@ -1,5 +1,4 @@
 #!/bin/sh
-./configure
+./configure --prefix=$HOME
 cp Makefile Makefile.orig
 patch Makefile <Makefile.patch
-
index 1b709b3..6ef557d 100644 (file)
@@ -129,7 +129,7 @@ extern int gram_debug;
     param_parse  = 1 << 1,
     param_both   = param_lex | param_parse
   } param_type;
-#line 672 "src/parse-gram.y" /* yacc.c:355  */
+#line 696 "src/parse-gram.y" /* yacc.c:355  */
 #include "muscle-tab.h"
 
 #line 136 "src/parse-gram.c" /* yacc.c:355  */
@@ -223,7 +223,7 @@ named_ref *named_ref;
 param_type param;
 #line 417 "src/parse-gram.y" /* yacc.c:355  */
 code_props_type code_type;
-#line 674 "src/parse-gram.y" /* yacc.c:355  */
+#line 698 "src/parse-gram.y" /* yacc.c:355  */
 
   struct
   {
@@ -623,14 +623,14 @@ static const yytype_uint16 yyrline[] =
      303,   308,   314,   315,   316,   317,   322,   327,   328,   329,
      330,   331,   332,   332,   333,   334,   358,   359,   360,   361,
      365,   366,   375,   376,   377,   381,   393,   397,   401,   409,
-     420,   421,   431,   432,   438,   450,   450,   455,   455,   460,
-     471,   486,   487,   488,   489,   493,   494,   499,   501,   506,
-     511,   521,   523,   528,   529,   533,   534,   538,   539,   540,
-     545,   550,   555,   561,   567,   578,   579,   588,   589,   595,
-     596,   602,   609,   609,   621,   626,   631,   636,   639,   641,
-     643,   645,   647,   649,   651,   656,   657,   667,   668,   693,
-     694,   695,   696,   708,   710,   719,   724,   725,   730,   738,
-     739
+     420,   421,   431,   432,   438,   452,   452,   461,   461,   470,
+     485,   504,   505,   506,   507,   511,   512,   517,   519,   524,
+     529,   541,   543,   548,   549,   553,   554,   558,   559,   560,
+     565,   570,   575,   583,   591,   604,   605,   614,   615,   621,
+     622,   628,   635,   635,   647,   651,   655,   660,   663,   665,
+     667,   669,   671,   673,   675,   680,   681,   691,   692,   717,
+     718,   719,   720,   732,   734,   743,   748,   749,   754,   762,
+     763
 };
 #endif
 
@@ -1115,7 +1115,7 @@ yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvalue
         break;
 
     case 89: /* value  */
-#line 683 "src/parse-gram.y" /* yacc.c:684  */
+#line 707 "src/parse-gram.y" /* yacc.c:684  */
       {
   switch (((*yyvaluep).value).kind)
     {
@@ -2357,7 +2357,7 @@ yyreduce:
 
   case 42:
 #line 431 "src/parse-gram.y" /* yacc.c:1648  */
-    {}
+    { insert_before(0, "<NoId />"); }
 #line 2332 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
@@ -2375,54 +2375,68 @@ yyreduce:
       union_seen = true;
       muscle_code_grow ("union_members", translate_code_braceless ((yyvsp[0].code), (yylsp[0])), (yylsp[0]));
       code_scanner_last_string_free ();
+ insert_after(2, "</PercentUnion>");
+ insert_before(0, "<PercentUnion>");
     }
-#line 2350 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2352 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 45:
-#line 450 "src/parse-gram.y" /* yacc.c:1648  */
+#line 452 "src/parse-gram.y" /* yacc.c:1648  */
     { current_class = nterm_sym; }
-#line 2356 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2358 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 46:
-#line 451 "src/parse-gram.y" /* yacc.c:1648  */
+#line 453 "src/parse-gram.y" /* yacc.c:1648  */
     {
       current_class = unknown_sym;
       current_type = NULL;
+ insert_after(2, "</PercentNTerm>");
+ /*insert_after(2, "</SymbolDefs>");*/
+ /*insert_before(2, "<SymbolDefs>");*/
+ insert_before(0, "<PercentNTerm>");
     }
-#line 2365 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2371 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 47:
-#line 455 "src/parse-gram.y" /* yacc.c:1648  */
+#line 461 "src/parse-gram.y" /* yacc.c:1648  */
     { current_class = token_sym; }
-#line 2371 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2377 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 48:
-#line 456 "src/parse-gram.y" /* yacc.c:1648  */
+#line 462 "src/parse-gram.y" /* yacc.c:1648  */
     {
       current_class = unknown_sym;
       current_type = NULL;
+ insert_after(2, "</PercentToken>");
+ /*insert_after(2, "</SymbolDefs>");*/
+ /*insert_before(2, "<SymbolDefs>");*/
+ insert_before(0, "<PercentToken>");
     }
-#line 2380 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2390 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 49:
-#line 461 "src/parse-gram.y" /* yacc.c:1648  */
+#line 471 "src/parse-gram.y" /* yacc.c:1648  */
     {
       symbol_list *list;
       tag_seen = true;
       for (list = (yyvsp[0].list); list; list = list->next)
         symbol_type_set (list->content.sym, (yyvsp[-1].uniqstr), (yylsp[-1]));
       symbol_list_free ((yyvsp[0].list));
+ insert_after(2, "</PercentType>");
+ insert_after(2, "</Symbols>");
+ insert_before(2, "<Symbols>");
+ insert_before(0, "<PercentType>");
     }
-#line 2392 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2406 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 50:
-#line 472 "src/parse-gram.y" /* yacc.c:1648  */
+#line 486 "src/parse-gram.y" /* yacc.c:1648  */
     {
       symbol_list *list;
       ++current_prec;
@@ -2433,366 +2447,376 @@ yyreduce:
         }
       symbol_list_free ((yyvsp[0].list));
       current_type = NULL;
+ insert_after(2, "</PrecedenceDeclaration>");
+ insert_after(2, "</SymbolsPrec>");
+ insert_before(2, "<SymbolsPrec>");
+ insert_before(0, "<PrecedenceDeclaration>");
     }
-#line 2408 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2426 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 51:
-#line 486 "src/parse-gram.y" /* yacc.c:1648  */
-    { (yyval.assoc) = left_assoc; }
-#line 2414 "src/parse-gram.c" /* yacc.c:1648  */
+#line 504 "src/parse-gram.y" /* yacc.c:1648  */
+    { (yyval.assoc) = left_assoc; insert_after(0, "</PrecedenceDeclaration_Left>"); insert_before(0, "<PrecedenceDeclaration_Left>"); }
+#line 2432 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 52:
-#line 487 "src/parse-gram.y" /* yacc.c:1648  */
-    { (yyval.assoc) = right_assoc; }
-#line 2420 "src/parse-gram.c" /* yacc.c:1648  */
+#line 505 "src/parse-gram.y" /* yacc.c:1648  */
+    { (yyval.assoc) = right_assoc; insert_after(0, "</PrecedenceDeclaration_Right>"); insert_before(0, "<PrecedenceDeclaration_Right>"); }
+#line 2438 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 53:
-#line 488 "src/parse-gram.y" /* yacc.c:1648  */
-    { (yyval.assoc) = non_assoc; }
-#line 2426 "src/parse-gram.c" /* yacc.c:1648  */
+#line 506 "src/parse-gram.y" /* yacc.c:1648  */
+    { (yyval.assoc) = non_assoc; insert_after(0, "</PrecedenceDeclaration_Non>"); insert_before(0, "<PrecedenceDeclaration_Non>"); }
+#line 2444 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 54:
-#line 489 "src/parse-gram.y" /* yacc.c:1648  */
-    { (yyval.assoc) = precedence_assoc; }
-#line 2432 "src/parse-gram.c" /* yacc.c:1648  */
+#line 507 "src/parse-gram.y" /* yacc.c:1648  */
+    { (yyval.assoc) = precedence_assoc; insert_after(0, "</PrecedenceDeclaration_Precedence>"); insert_before(0, "<PrecedenceDeclaration_Precedence>"); }
+#line 2450 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 55:
-#line 493 "src/parse-gram.y" /* yacc.c:1648  */
-    { current_type = NULL; }
-#line 2438 "src/parse-gram.c" /* yacc.c:1648  */
+#line 511 "src/parse-gram.y" /* yacc.c:1648  */
+    { current_type = NULL; insert_before(0, "<NoTag />"); }
+#line 2456 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 56:
-#line 494 "src/parse-gram.y" /* yacc.c:1648  */
+#line 512 "src/parse-gram.y" /* yacc.c:1648  */
     { current_type = (yyvsp[0].uniqstr); tag_seen = true; }
-#line 2444 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2462 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 57:
-#line 500 "src/parse-gram.y" /* yacc.c:1648  */
+#line 518 "src/parse-gram.y" /* yacc.c:1648  */
     { (yyval.list) = symbol_list_sym_new ((yyvsp[0].symbol), (yylsp[0])); }
-#line 2450 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2468 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 58:
-#line 502 "src/parse-gram.y" /* yacc.c:1648  */
+#line 520 "src/parse-gram.y" /* yacc.c:1648  */
     { (yyval.list) = symbol_list_append ((yyvsp[-1].list), symbol_list_sym_new ((yyvsp[0].symbol), (yylsp[0]))); }
-#line 2456 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2474 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 59:
-#line 507 "src/parse-gram.y" /* yacc.c:1648  */
+#line 525 "src/parse-gram.y" /* yacc.c:1648  */
     {
       (yyval.symbol) = (yyvsp[0].symbol);
       symbol_class_set ((yyvsp[0].symbol), token_sym, (yylsp[0]), false);
     }
-#line 2465 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2483 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 60:
-#line 512 "src/parse-gram.y" /* yacc.c:1648  */
+#line 530 "src/parse-gram.y" /* yacc.c:1648  */
     {
       (yyval.symbol) = (yyvsp[-1].symbol);
       symbol_user_token_number_set ((yyvsp[-1].symbol), (yyvsp[0].integer), (yylsp[0]));
       symbol_class_set ((yyvsp[-1].symbol), token_sym, (yylsp[-1]), false);
+ insert_after(1, "</SymbolInt>");
+ insert_before(0, "<SymbolInt>");
     }
-#line 2475 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2495 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 61:
-#line 522 "src/parse-gram.y" /* yacc.c:1648  */
+#line 542 "src/parse-gram.y" /* yacc.c:1648  */
     { (yyval.list) = symbol_list_sym_new ((yyvsp[0].symbol), (yylsp[0])); }
-#line 2481 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2501 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 62:
-#line 524 "src/parse-gram.y" /* yacc.c:1648  */
+#line 544 "src/parse-gram.y" /* yacc.c:1648  */
     { (yyval.list) = symbol_list_append ((yyvsp[-1].list), symbol_list_sym_new ((yyvsp[0].symbol), (yylsp[0]))); }
-#line 2487 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2507 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 63:
-#line 528 "src/parse-gram.y" /* yacc.c:1648  */
+#line 548 "src/parse-gram.y" /* yacc.c:1648  */
     { (yyval.list) = (yyvsp[0].list); }
-#line 2493 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2513 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 64:
-#line 529 "src/parse-gram.y" /* yacc.c:1648  */
+#line 549 "src/parse-gram.y" /* yacc.c:1648  */
     { (yyval.list) = symbol_list_append ((yyvsp[-1].list), (yyvsp[0].list)); }
-#line 2499 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2519 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 65:
-#line 533 "src/parse-gram.y" /* yacc.c:1648  */
+#line 553 "src/parse-gram.y" /* yacc.c:1648  */
     { (yyval.list) = symbol_list_sym_new ((yyvsp[0].symbol), (yylsp[0])); }
-#line 2505 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2525 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 66:
-#line 534 "src/parse-gram.y" /* yacc.c:1648  */
+#line 554 "src/parse-gram.y" /* yacc.c:1648  */
     { (yyval.list) = symbol_list_type_new ((yyvsp[0].uniqstr), (yylsp[0])); }
-#line 2511 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2531 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 68:
-#line 539 "src/parse-gram.y" /* yacc.c:1648  */
+#line 559 "src/parse-gram.y" /* yacc.c:1648  */
     { (yyval.uniqstr) = uniqstr_new ("*"); }
-#line 2517 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2537 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 69:
-#line 540 "src/parse-gram.y" /* yacc.c:1648  */
+#line 560 "src/parse-gram.y" /* yacc.c:1648  */
     { (yyval.uniqstr) = uniqstr_new (""); }
-#line 2523 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2543 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 70:
-#line 546 "src/parse-gram.y" /* yacc.c:1648  */
+#line 566 "src/parse-gram.y" /* yacc.c:1648  */
     {
       current_type = (yyvsp[0].uniqstr);
       tag_seen = true;
     }
-#line 2532 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2552 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 71:
-#line 551 "src/parse-gram.y" /* yacc.c:1648  */
+#line 571 "src/parse-gram.y" /* yacc.c:1648  */
     {
       symbol_class_set ((yyvsp[0].symbol), current_class, (yylsp[0]), true);
       symbol_type_set ((yyvsp[0].symbol), current_type, (yylsp[0]));
     }
-#line 2541 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2561 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 72:
-#line 556 "src/parse-gram.y" /* yacc.c:1648  */
+#line 576 "src/parse-gram.y" /* yacc.c:1648  */
     {
       symbol_class_set ((yyvsp[-1].symbol), current_class, (yylsp[-1]), true);
       symbol_type_set ((yyvsp[-1].symbol), current_type, (yylsp[-1]));
       symbol_user_token_number_set ((yyvsp[-1].symbol), (yyvsp[0].integer), (yylsp[0]));
+ insert_after(1, "</IdInt>");
+ insert_before(0, "<IdInt>");
     }
-#line 2551 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2573 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 73:
-#line 562 "src/parse-gram.y" /* yacc.c:1648  */
+#line 584 "src/parse-gram.y" /* yacc.c:1648  */
     {
       symbol_class_set ((yyvsp[-1].symbol), current_class, (yylsp[-1]), true);
       symbol_type_set ((yyvsp[-1].symbol), current_type, (yylsp[-1]));
       symbol_make_alias ((yyvsp[-1].symbol), (yyvsp[0].symbol), (yyloc));
+ insert_after(1, "</IdString>");
+ insert_before(0, "<IdString>");
     }
-#line 2561 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2585 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 74:
-#line 568 "src/parse-gram.y" /* yacc.c:1648  */
+#line 592 "src/parse-gram.y" /* yacc.c:1648  */
     {
       symbol_class_set ((yyvsp[-2].symbol), current_class, (yylsp[-2]), true);
       symbol_type_set ((yyvsp[-2].symbol), current_type, (yylsp[-2]));
       symbol_user_token_number_set ((yyvsp[-2].symbol), (yyvsp[-1].integer), (yylsp[-1]));
       symbol_make_alias ((yyvsp[-2].symbol), (yyvsp[0].symbol), (yyloc));
+ insert_after(1, "</IdIntString>");
+ insert_before(0, "<IdIntString>");
     }
-#line 2572 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2598 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 80:
-#line 597 "src/parse-gram.y" /* yacc.c:1648  */
+#line 623 "src/parse-gram.y" /* yacc.c:1648  */
     {
  /* this should be done inside the rule with a more descriptive tag */
  insert_after(0, "</GrammarDeclaration>");
  insert_before(0, "<GrammarDeclaration>");
  }
-#line 2582 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2608 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 81:
-#line 603 "src/parse-gram.y" /* yacc.c:1648  */
+#line 629 "src/parse-gram.y" /* yacc.c:1648  */
     {
       yyerrok;
     }
-#line 2590 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2616 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 82:
-#line 609 "src/parse-gram.y" /* yacc.c:1648  */
+#line 635 "src/parse-gram.y" /* yacc.c:1648  */
     { current_lhs ((yyvsp[-1].symbol), (yylsp[-1]), (yyvsp[0].named_ref)); }
-#line 2596 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2622 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 83:
-#line 610 "src/parse-gram.y" /* yacc.c:1648  */
+#line 636 "src/parse-gram.y" /* yacc.c:1648  */
     {
     /* Free the current lhs. */
     current_lhs (0, (yylsp[-3]), 0);
- insert_after(3, "</Rule>");
- insert_after(3, "</Productions>");
- insert_before(3, "<Productions>");
- insert_before(0, "<Rule>");
+ insert_after(3, "</Rules>");
+ insert_after(3, "</RHSes>");
+ insert_before(3, "<RHSes>");
+ insert_before(0, "<Rules>");
   }
-#line 2609 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2635 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 84:
-#line 621 "src/parse-gram.y" /* yacc.c:1648  */
+#line 647 "src/parse-gram.y" /* yacc.c:1648  */
     { grammar_current_rule_end ((yylsp[0])); /*}*/
- /* this should be done inside the rule with a more descriptive tag */
- insert_after(0, "</Production>");
- insert_before(0, "<Production>");
+ insert_after(0, "</RHS>");
+ insert_before(0, "<RHS>");
  }
-#line 2619 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2644 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 85:
-#line 626 "src/parse-gram.y" /* yacc.c:1648  */
+#line 651 "src/parse-gram.y" /* yacc.c:1648  */
     { grammar_current_rule_end ((yylsp[0])); /*}*/
- /* this should be done inside the rule with a more descriptive tag */
- insert_after(2, "</Production>");
- insert_before(2, "<Production>");
+ insert_after(2, "</RHS>");
+ insert_before(2, "<RHS>");
  }
-#line 2629 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2653 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 87:
-#line 637 "src/parse-gram.y" /* yacc.c:1648  */
+#line 661 "src/parse-gram.y" /* yacc.c:1648  */
     { grammar_current_rule_begin (current_lhs_symbol, current_lhs_location,
                                   current_lhs_named_ref); }
-#line 2636 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2660 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 88:
-#line 640 "src/parse-gram.y" /* yacc.c:1648  */
-    { grammar_current_rule_symbol_append ((yyvsp[-1].symbol), (yylsp[-1]), (yyvsp[0].named_ref)); }
-#line 2642 "src/parse-gram.c" /* yacc.c:1648  */
+#line 664 "src/parse-gram.y" /* yacc.c:1648  */
+    { grammar_current_rule_symbol_append ((yyvsp[-1].symbol), (yylsp[-1]), (yyvsp[0].named_ref)); insert_after(2, "</RHSSymbol>"); insert_before(1, "<RHSSymbol>"); }
+#line 2666 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 89:
-#line 642 "src/parse-gram.y" /* yacc.c:1648  */
-    { grammar_current_rule_action_append ((yyvsp[-1].code), (yylsp[-1]), (yyvsp[0].named_ref), false); }
-#line 2648 "src/parse-gram.c" /* yacc.c:1648  */
+#line 666 "src/parse-gram.y" /* yacc.c:1648  */
+    { grammar_current_rule_action_append ((yyvsp[-1].code), (yylsp[-1]), (yyvsp[0].named_ref), false); insert_after(2, "</RHSAction>"); insert_after(0, "<RHSAction>"); }
+#line 2672 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 90:
-#line 644 "src/parse-gram.y" /* yacc.c:1648  */
+#line 668 "src/parse-gram.y" /* yacc.c:1648  */
     { grammar_current_rule_action_append ((yyvsp[0].code), (yylsp[0]), NULL, true); }
-#line 2654 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2678 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 91:
-#line 646 "src/parse-gram.y" /* yacc.c:1648  */
-    { grammar_current_rule_empty_set ((yylsp[0])); }
-#line 2660 "src/parse-gram.c" /* yacc.c:1648  */
+#line 670 "src/parse-gram.y" /* yacc.c:1648  */
+    { grammar_current_rule_empty_set ((yylsp[0])); insert_after(1, "</RHSEmpty>"); insert_before(1, "<RHSEmpty>"); }
+#line 2684 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 92:
-#line 648 "src/parse-gram.y" /* yacc.c:1648  */
-    { grammar_current_rule_prec_set ((yyvsp[0].symbol), (yylsp[0])); }
-#line 2666 "src/parse-gram.c" /* yacc.c:1648  */
+#line 672 "src/parse-gram.y" /* yacc.c:1648  */
+    { grammar_current_rule_prec_set ((yyvsp[0].symbol), (yylsp[0])); insert_after(2, "</RHSPrec>"); insert_before(1, "<RHSPrec>"); }
+#line 2690 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 93:
-#line 650 "src/parse-gram.y" /* yacc.c:1648  */
-    { grammar_current_rule_dprec_set ((yyvsp[0].integer), (yylsp[0])); }
-#line 2672 "src/parse-gram.c" /* yacc.c:1648  */
+#line 674 "src/parse-gram.y" /* yacc.c:1648  */
+    { grammar_current_rule_dprec_set ((yyvsp[0].integer), (yylsp[0])); insert_after(2, "</RHSDPrec>"); insert_before(1, "<RHSDPrec>"); }
+#line 2696 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 94:
-#line 652 "src/parse-gram.y" /* yacc.c:1648  */
-    { grammar_current_rule_merge_set ((yyvsp[0].uniqstr), (yylsp[0])); }
-#line 2678 "src/parse-gram.c" /* yacc.c:1648  */
+#line 676 "src/parse-gram.y" /* yacc.c:1648  */
+    { grammar_current_rule_merge_set ((yyvsp[0].uniqstr), (yylsp[0])); insert_after(2, "</RHSMerge>"); insert_before(1, "<RHSMerge>"); }
+#line 2702 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 95:
-#line 656 "src/parse-gram.y" /* yacc.c:1648  */
-    { (yyval.named_ref) = 0; }
-#line 2684 "src/parse-gram.c" /* yacc.c:1648  */
+#line 680 "src/parse-gram.y" /* yacc.c:1648  */
+    { (yyval.named_ref) = 0; insert_before(0, "<NoNamedRef />"); }
+#line 2708 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 96:
-#line 657 "src/parse-gram.y" /* yacc.c:1648  */
+#line 681 "src/parse-gram.y" /* yacc.c:1648  */
     { (yyval.named_ref) = named_ref_new ((yyvsp[0].uniqstr), (yylsp[0])); }
-#line 2690 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2714 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 98:
-#line 668 "src/parse-gram.y" /* yacc.c:1648  */
+#line 692 "src/parse-gram.y" /* yacc.c:1648  */
     { (yyval.uniqstr) = uniqstr_new ((yyvsp[0].code)); }
-#line 2696 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2720 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 99:
-#line 693 "src/parse-gram.y" /* yacc.c:1648  */
-    { (yyval.value).kind = muscle_keyword; (yyval.value).chars = ""; }
-#line 2702 "src/parse-gram.c" /* yacc.c:1648  */
+#line 717 "src/parse-gram.y" /* yacc.c:1648  */
+    { (yyval.value).kind = muscle_keyword; (yyval.value).chars = ""; insert_before(0, "<NoValue />"); }
+#line 2726 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 100:
-#line 694 "src/parse-gram.y" /* yacc.c:1648  */
+#line 718 "src/parse-gram.y" /* yacc.c:1648  */
     { (yyval.value).kind = muscle_keyword; (yyval.value).chars = (yyvsp[0].uniqstr); }
-#line 2708 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2732 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 101:
-#line 695 "src/parse-gram.y" /* yacc.c:1648  */
+#line 719 "src/parse-gram.y" /* yacc.c:1648  */
     { (yyval.value).kind = muscle_string;  (yyval.value).chars = (yyvsp[0].code); }
-#line 2714 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2738 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 102:
-#line 696 "src/parse-gram.y" /* yacc.c:1648  */
+#line 720 "src/parse-gram.y" /* yacc.c:1648  */
     { (yyval.value).kind = muscle_code;    (yyval.value).chars = strip_braces ((yyvsp[0].code)); }
-#line 2720 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2744 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 103:
-#line 709 "src/parse-gram.y" /* yacc.c:1648  */
+#line 733 "src/parse-gram.y" /* yacc.c:1648  */
     { (yyval.symbol) = symbol_from_uniqstr ((yyvsp[0].uniqstr), (yylsp[0])); }
-#line 2726 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2750 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 104:
-#line 711 "src/parse-gram.y" /* yacc.c:1648  */
+#line 735 "src/parse-gram.y" /* yacc.c:1648  */
     {
       (yyval.symbol) = symbol_get (char_name ((yyvsp[0].character)), (yylsp[0]));
       symbol_class_set ((yyval.symbol), token_sym, (yylsp[0]), false);
       symbol_user_token_number_set ((yyval.symbol), (yyvsp[0].character), (yylsp[0]));
     }
-#line 2736 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2760 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 105:
-#line 719 "src/parse-gram.y" /* yacc.c:1648  */
+#line 743 "src/parse-gram.y" /* yacc.c:1648  */
     { (yyval.symbol) = symbol_from_uniqstr ((yyvsp[0].uniqstr), (yylsp[0])); }
-#line 2742 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2766 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 108:
-#line 731 "src/parse-gram.y" /* yacc.c:1648  */
+#line 755 "src/parse-gram.y" /* yacc.c:1648  */
     {
       (yyval.symbol) = symbol_get (quotearg_style (c_quoting_style, (yyvsp[0].code)), (yylsp[0]));
       symbol_class_set ((yyval.symbol), token_sym, (yylsp[0]), false);
     }
-#line 2751 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2775 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 110:
-#line 740 "src/parse-gram.y" /* yacc.c:1648  */
+#line 764 "src/parse-gram.y" /* yacc.c:1648  */
     {
       muscle_code_grow ("epilogue", translate_code ((yyvsp[0].code), (yylsp[0]), true), (yylsp[0]));
       code_scanner_last_string_free ();
  insert_after(1, "</Sect3>");
- insert_before(1, "<Sect3>");
+ insert_after(0, "<Sect3>");
     }
-#line 2762 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2786 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
 
-#line 2766 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2790 "src/parse-gram.c" /* yacc.c:1648  */
         default: break;
       }
     if (yychar_backup != yychar)
@@ -3055,7 +3079,7 @@ yyreturn:
 #endif
   return yyresult;
 }
-#line 748 "src/parse-gram.y" /* yacc.c:1907  */
+#line 772 "src/parse-gram.y" /* yacc.c:1907  */
 
 
 /* Return the location of the left-hand side of a rule whose
index 3df8ceb..c55b0af 100644 (file)
@@ -61,7 +61,7 @@ extern int gram_debug;
     param_parse  = 1 << 1,
     param_both   = param_lex | param_parse
   } param_type;
-#line 672 "src/parse-gram.y" /* yacc.c:1910  */
+#line 696 "src/parse-gram.y" /* yacc.c:1910  */
 #include "muscle-tab.h"
 
 #line 68 "src/parse-gram.h" /* yacc.c:1910  */
@@ -155,7 +155,7 @@ named_ref *named_ref;
 param_type param;
 #line 417 "src/parse-gram.y" /* yacc.c:1910  */
 code_props_type code_type;
-#line 674 "src/parse-gram.y" /* yacc.c:1910  */
+#line 698 "src/parse-gram.y" /* yacc.c:1910  */
 
   struct
   {
index f0e1f48..22834d1 100644 (file)
@@ -428,7 +428,7 @@ code_props_type:
 %token PERCENT_UNION "%union";
 
 union_name:
-  %empty {}
+  %empty { insert_before(0, "<NoId />"); }
 | ID     { muscle_percent_define_insert ("api.value.union.name",
                                          @1, muscle_keyword, $1,
                                          MUSCLE_PERCENT_DEFINE_GRAMMAR_FILE); }
@@ -440,6 +440,8 @@ grammar_declaration:
       union_seen = true;
       muscle_code_grow ("union_members", translate_code_braceless ($3, @3), @3);
       code_scanner_last_string_free ();
+ insert_after(2, "</PercentUnion>");
+ insert_before(0, "<PercentUnion>");
     }
 ;
 
@@ -451,11 +453,19 @@ symbol_declaration:
     {
       current_class = unknown_sym;
       current_type = NULL;
+ insert_after(2, "</PercentNTerm>");
+ /*insert_after(2, "</SymbolDefs>");*/
+ /*insert_before(2, "<SymbolDefs>");*/
+ insert_before(0, "<PercentNTerm>");
     }
 | "%token" { current_class = token_sym; } symbol_defs.1
     {
       current_class = unknown_sym;
       current_type = NULL;
+ insert_after(2, "</PercentToken>");
+ /*insert_after(2, "</SymbolDefs>");*/
+ /*insert_before(2, "<SymbolDefs>");*/
+ insert_before(0, "<PercentToken>");
     }
 | "%type" TAG symbols.1
     {
@@ -464,6 +474,10 @@ symbol_declaration:
       for (list = $3; list; list = list->next)
         symbol_type_set (list->content.sym, $2, @2);
       symbol_list_free ($3);
+ insert_after(2, "</PercentType>");
+ insert_after(2, "</Symbols>");
+ insert_before(2, "<Symbols>");
+ insert_before(0, "<PercentType>");
     }
 ;
 
@@ -479,18 +493,22 @@ precedence_declaration:
         }
       symbol_list_free ($3);
       current_type = NULL;
+ insert_after(2, "</PrecedenceDeclaration>");
+ insert_after(2, "</SymbolsPrec>");
+ insert_before(2, "<SymbolsPrec>");
+ insert_before(0, "<PrecedenceDeclaration>");
     }
 ;
 
 precedence_declarator:
-  "%left"       { $$ = left_assoc; }
-| "%right"      { $$ = right_assoc; }
-| "%nonassoc"   { $$ = non_assoc; }
-| "%precedence" { $$ = precedence_assoc; }
+  "%left"       { $$ = left_assoc; insert_after(0, "</PrecedenceDeclaration_Left>"); insert_before(0, "<PrecedenceDeclaration_Left>"); }
+| "%right"      { $$ = right_assoc; insert_after(0, "</PrecedenceDeclaration_Right>"); insert_before(0, "<PrecedenceDeclaration_Right>"); }
+| "%nonassoc"   { $$ = non_assoc; insert_after(0, "</PrecedenceDeclaration_Non>"); insert_before(0, "<PrecedenceDeclaration_Non>"); }
+| "%precedence" { $$ = precedence_assoc; insert_after(0, "</PrecedenceDeclaration_Precedence>"); insert_before(0, "<PrecedenceDeclaration_Precedence>"); }
 ;
 
 tag.opt:
-  %empty { current_type = NULL; }
+  %empty { current_type = NULL; insert_before(0, "<NoTag />"); }
 | TAG    { current_type = $1; tag_seen = true; }
 ;
 
@@ -513,6 +531,8 @@ symbol.prec:
       $$ = $1;
       symbol_user_token_number_set ($1, $2, @2);
       symbol_class_set ($1, token_sym, @1, false);
+ insert_after(1, "</SymbolInt>");
+ insert_before(0, "<SymbolInt>");
     }
 ;
 
@@ -557,12 +577,16 @@ symbol_def:
       symbol_class_set ($1, current_class, @1, true);
       symbol_type_set ($1, current_type, @1);
       symbol_user_token_number_set ($1, $2, @2);
+ insert_after(1, "</IdInt>");
+ insert_before(0, "<IdInt>");
     }
 | id string_as_id
     {
       symbol_class_set ($1, current_class, @1, true);
       symbol_type_set ($1, current_type, @1);
       symbol_make_alias ($1, $2, @$);
+ insert_after(1, "</IdString>");
+ insert_before(0, "<IdString>");
     }
 | id INT string_as_id
     {
@@ -570,6 +594,8 @@ symbol_def:
       symbol_type_set ($1, current_type, @1);
       symbol_user_token_number_set ($1, $2, @2);
       symbol_make_alias ($1, $3, @$);
+ insert_after(1, "</IdIntString>");
+ insert_before(0, "<IdIntString>");
     }
 ;
 
@@ -610,23 +636,21 @@ rules:
   {
     /* Free the current lhs. */
     current_lhs (0, @1, 0);
- insert_after(3, "</Rule>");
- insert_after(3, "</Productions>");
- insert_before(3, "<Productions>");
- insert_before(0, "<Rule>");
+ insert_after(3, "</Rules>");
+ insert_after(3, "</RHSes>");
+ insert_before(3, "<RHSes>");
+ insert_before(0, "<Rules>");
   }
 ;
 
 rhses.1:
   rhs                { grammar_current_rule_end (@1); /*}*/
- /* this should be done inside the rule with a more descriptive tag */
- insert_after(0, "</Production>");
- insert_before(0, "<Production>");
+ insert_after(0, "</RHS>");
+ insert_before(0, "<RHS>");
  }
 | rhses.1 "|" rhs    { grammar_current_rule_end (@3); /*}*/
- /* this should be done inside the rule with a more descriptive tag */
- insert_after(2, "</Production>");
- insert_before(2, "<Production>");
+ insert_after(2, "</RHS>");
+ insert_before(2, "<RHS>");
  }
 | rhses.1 ";"
 ;
@@ -637,23 +661,23 @@ rhs:
     { grammar_current_rule_begin (current_lhs_symbol, current_lhs_location,
                                   current_lhs_named_ref); }
 | rhs symbol named_ref.opt
-    { grammar_current_rule_symbol_append ($2, @2, $3); }
+    { grammar_current_rule_symbol_append ($2, @2, $3); insert_after(2, "</RHSSymbol>"); insert_before(1, "<RHSSymbol>"); }
 | rhs "{...}" named_ref.opt
-    { grammar_current_rule_action_append ($2, @2, $3, false); }
+    { grammar_current_rule_action_append ($2, @2, $3, false); insert_after(2, "</RHSAction>"); insert_after(0, "<RHSAction>"); }
 | rhs "%?{...}"
     { grammar_current_rule_action_append ($2, @2, NULL, true); }
 | rhs "%empty"
-    { grammar_current_rule_empty_set (@2); }
+    { grammar_current_rule_empty_set (@2); insert_after(1, "</RHSEmpty>"); insert_before(1, "<RHSEmpty>"); }
 | rhs "%prec" symbol
-    { grammar_current_rule_prec_set ($3, @3); }
+    { grammar_current_rule_prec_set ($3, @3); insert_after(2, "</RHSPrec>"); insert_before(1, "<RHSPrec>"); }
 | rhs "%dprec" INT
-    { grammar_current_rule_dprec_set ($3, @3); }
+    { grammar_current_rule_dprec_set ($3, @3); insert_after(2, "</RHSDPrec>"); insert_before(1, "<RHSDPrec>"); }
 | rhs "%merge" TAG
-    { grammar_current_rule_merge_set ($3, @3); }
+    { grammar_current_rule_merge_set ($3, @3); insert_after(2, "</RHSMerge>"); insert_before(1, "<RHSMerge>"); }
 ;
 
 named_ref.opt:
-  %empty         { $$ = 0; }
+  %empty         { $$ = 0; insert_before(0, "<NoNamedRef />"); }
 | BRACKETED_ID   { $$ = named_ref_new ($1, @1); }
 ;
 
@@ -690,7 +714,7 @@ variable:
 } <value>;
 
 value:
-  %empty  { $$.kind = muscle_keyword; $$.chars = ""; }
+  %empty  { $$.kind = muscle_keyword; $$.chars = ""; insert_before(0, "<NoValue />"); }
 | ID      { $$.kind = muscle_keyword; $$.chars = $1; }
 | STRING  { $$.kind = muscle_string;  $$.chars = $1; }
 | "{...}" { $$.kind = muscle_code;    $$.chars = strip_braces ($1); }
@@ -741,7 +765,7 @@ epilogue.opt:
       muscle_code_grow ("epilogue", translate_code ($2, @2, true), @2);
       code_scanner_last_string_free ();
  insert_after(1, "</Sect3>");
- insert_before(1, "<Sect3>");
+ insert_after(0, "<Sect3>");
     }
 ;
 
index d4ac4f8..90aa03e 100644 (file)
@@ -1008,20 +1008,20 @@ int gram__flex_debug = 1;
 
 static yyconst flex_int16_t yy_rule_linenum[130] =
     {   0,
-      188,  191,  192,  193,  201,  219,  220,  221,  222,  223,
-      224,  225,  226,  227,  228,  229,  230,  231,  232,  233,
-      234,  235,  236,  237,  238,  239,  240,  241,  242,  243,
-      244,  245,  246,  247,  248,  249,  250,  251,  252,  253,
-      254,  255,  256,  257,  258,  259,  260,  261,  262,  263,
-      266,  267,  268,  269,  270,  271,  272,  273,  274,  275,
-      276,  278,  282,  283,  284,  286,  298,  312,  329,  334,
-      337,  340,  343,  353,  362,  363,  364,  372,  379,  386,
-      406,  416,  431,  443,  474,  487,  503,  518,  535,  536,
-      547,  558,  559,  571,  580,  590,  610,  622,  637,  638,
-
-      649,  664,  680,  681,  682,  683,  684,  685,  686,  689,
-      691,  705,  723,  728,  729,  735,  736,  747,  755,  763,
-      769,  785,  786,  790,  797,  815,  837,  871,  872
+      185,  188,  189,  190,  198,  216,  217,  218,  219,  220,
+      221,  222,  223,  224,  225,  226,  227,  228,  229,  230,
+      231,  232,  233,  234,  235,  236,  237,  238,  239,  240,
+      241,  242,  243,  244,  245,  246,  247,  248,  249,  250,
+      251,  252,  253,  254,  255,  256,  257,  258,  259,  260,
+      263,  264,  265,  266,  267,  268,  269,  270,  271,  272,
+      273,  275,  279,  280,  281,  283,  295,  309,  326,  331,
+      334,  337,  340,  350,  359,  360,  361,  369,  376,  383,
+      403,  413,  428,  438,  465,  478,  494,  509,  526,  527,
+      538,  549,  550,  562,  571,  581,  601,  613,  628,  629,
+
+      640,  655,  671,  672,  673,  674,  675,  676,  677,  680,
+      682,  696,  714,  719,  720,  726,  727,  738,  746,  754,
+      760,  776,  777,  781,  788,  806,  828,  862,  863
     } ;
 
 /* The intent behind this definition is that it'll catch
@@ -1540,16 +1540,13 @@ static int real_yylex(GRAM_STYPE *val, location *loc)
       first = false;
     }
 
-  /* Nick */
-  int piece0_save; /* because of lookahead for : after identifer */
-
 
 
   /*-----------------------.
   | Scanning white space.  |
   `-----------------------*/
 
-#line 1446 "src/scan-gram.c"
+#line 1443 "src/scan-gram.c"
 
        if ( !(yy_init) )
                {
@@ -1668,23 +1665,23 @@ do_action:      /* This label is used only to access EOF actions. */
 /* Comments and white space.  */
 case 1:
 YY_RULE_SETUP
-#line 188 "src/scan-gram.l"
+#line 185 "src/scan-gram.l"
 {
      complain (loc, Wother, _("stray ',' treated as white space"));
   }
        YY_BREAK
 case 2:
 /* rule 2 can match eol */
-#line 192 "src/scan-gram.l"
+#line 189 "src/scan-gram.l"
 case 3:
 /* rule 3 can match eol */
 YY_RULE_SETUP
-#line 192 "src/scan-gram.l"
+#line 189 "src/scan-gram.l"
 continue;
        YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 193 "src/scan-gram.l"
+#line 190 "src/scan-gram.l"
 {
     token_start = loc->start;
     context_state = YY_START;
@@ -1696,7 +1693,7 @@ YY_RULE_SETUP
 case 5:
 /* rule 5 can match eol */
 YY_RULE_SETUP
-#line 201 "src/scan-gram.l"
+#line 198 "src/scan-gram.l"
 {
     handle_syncline (gram_text + sizeof "#line " - 1, *loc);
   }
@@ -1714,335 +1711,335 @@ YY_RULE_SETUP
 
 case 6:
 YY_RULE_SETUP
-#line 219 "src/scan-gram.l"
+#line 216 "src/scan-gram.l"
 return PERCENT_NONASSOC;
        YY_BREAK
 case 7:
 YY_RULE_SETUP
-#line 220 "src/scan-gram.l"
+#line 217 "src/scan-gram.l"
 return PERCENT_CODE;
        YY_BREAK
 case 8:
 YY_RULE_SETUP
-#line 221 "src/scan-gram.l"
+#line 218 "src/scan-gram.l"
 RETURN_PERCENT_FLAG("parse.trace");
        YY_BREAK
 case 9:
 YY_RULE_SETUP
-#line 222 "src/scan-gram.l"
+#line 219 "src/scan-gram.l"
 return PERCENT_DEFAULT_PREC;
        YY_BREAK
 case 10:
 YY_RULE_SETUP
-#line 223 "src/scan-gram.l"
+#line 220 "src/scan-gram.l"
 return PERCENT_DEFINE;
        YY_BREAK
 case 11:
 YY_RULE_SETUP
-#line 224 "src/scan-gram.l"
+#line 221 "src/scan-gram.l"
 return PERCENT_DEFINES;
        YY_BREAK
 case 12:
 YY_RULE_SETUP
-#line 225 "src/scan-gram.l"
+#line 222 "src/scan-gram.l"
 return PERCENT_DESTRUCTOR;
        YY_BREAK
 case 13:
 YY_RULE_SETUP
-#line 226 "src/scan-gram.l"
+#line 223 "src/scan-gram.l"
 return PERCENT_DPREC;
        YY_BREAK
 case 14:
 YY_RULE_SETUP
-#line 227 "src/scan-gram.l"
+#line 224 "src/scan-gram.l"
 return PERCENT_EMPTY;
        YY_BREAK
 case 15:
 YY_RULE_SETUP
-#line 228 "src/scan-gram.l"
+#line 225 "src/scan-gram.l"
 return PERCENT_ERROR_VERBOSE;
        YY_BREAK
 case 16:
 YY_RULE_SETUP
-#line 229 "src/scan-gram.l"
+#line 226 "src/scan-gram.l"
 return PERCENT_EXPECT;
        YY_BREAK
 case 17:
 YY_RULE_SETUP
-#line 230 "src/scan-gram.l"
+#line 227 "src/scan-gram.l"
 return PERCENT_EXPECT_RR;
        YY_BREAK
 case 18:
 YY_RULE_SETUP
-#line 231 "src/scan-gram.l"
+#line 228 "src/scan-gram.l"
 return PERCENT_FILE_PREFIX;
        YY_BREAK
 case 19:
 YY_RULE_SETUP
-#line 232 "src/scan-gram.l"
+#line 229 "src/scan-gram.l"
 return PERCENT_YACC;
        YY_BREAK
 case 20:
 YY_RULE_SETUP
-#line 233 "src/scan-gram.l"
+#line 230 "src/scan-gram.l"
 return PERCENT_INITIAL_ACTION;
        YY_BREAK
 case 21:
 YY_RULE_SETUP
-#line 234 "src/scan-gram.l"
+#line 231 "src/scan-gram.l"
 return PERCENT_GLR_PARSER;
        YY_BREAK
 case 22:
 YY_RULE_SETUP
-#line 235 "src/scan-gram.l"
+#line 232 "src/scan-gram.l"
 return PERCENT_LANGUAGE;
        YY_BREAK
 case 23:
 YY_RULE_SETUP
-#line 236 "src/scan-gram.l"
+#line 233 "src/scan-gram.l"
 return PERCENT_LEFT;
        YY_BREAK
 case 24:
 YY_RULE_SETUP
-#line 237 "src/scan-gram.l"
+#line 234 "src/scan-gram.l"
 RETURN_PERCENT_PARAM(lex);
        YY_BREAK
 case 25:
 YY_RULE_SETUP
-#line 238 "src/scan-gram.l"
+#line 235 "src/scan-gram.l"
 RETURN_PERCENT_FLAG("locations");
        YY_BREAK
 case 26:
 YY_RULE_SETUP
-#line 239 "src/scan-gram.l"
+#line 236 "src/scan-gram.l"
 return PERCENT_MERGE;
        YY_BREAK
 case 27:
 YY_RULE_SETUP
-#line 240 "src/scan-gram.l"
+#line 237 "src/scan-gram.l"
 return PERCENT_NAME_PREFIX;
        YY_BREAK
 case 28:
 YY_RULE_SETUP
-#line 241 "src/scan-gram.l"
+#line 238 "src/scan-gram.l"
 return PERCENT_NO_DEFAULT_PREC;
        YY_BREAK
 case 29:
 YY_RULE_SETUP
-#line 242 "src/scan-gram.l"
+#line 239 "src/scan-gram.l"
 return PERCENT_NO_LINES;
        YY_BREAK
 case 30:
 YY_RULE_SETUP
-#line 243 "src/scan-gram.l"
+#line 240 "src/scan-gram.l"
 return PERCENT_NONASSOC;
        YY_BREAK
 case 31:
 YY_RULE_SETUP
-#line 244 "src/scan-gram.l"
+#line 241 "src/scan-gram.l"
 return PERCENT_NONDETERMINISTIC_PARSER;
        YY_BREAK
 case 32:
 YY_RULE_SETUP
-#line 245 "src/scan-gram.l"
+#line 242 "src/scan-gram.l"
 return PERCENT_NTERM;
        YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 246 "src/scan-gram.l"
+#line 243 "src/scan-gram.l"
 return PERCENT_OUTPUT;
        YY_BREAK
 case 34:
 YY_RULE_SETUP
-#line 247 "src/scan-gram.l"
+#line 244 "src/scan-gram.l"
 RETURN_PERCENT_PARAM(both);
        YY_BREAK
 case 35:
 YY_RULE_SETUP
-#line 248 "src/scan-gram.l"
+#line 245 "src/scan-gram.l"
 RETURN_PERCENT_PARAM(parse);
        YY_BREAK
 case 36:
 YY_RULE_SETUP
-#line 249 "src/scan-gram.l"
+#line 246 "src/scan-gram.l"
 return PERCENT_PREC;
        YY_BREAK
 case 37:
 YY_RULE_SETUP
-#line 250 "src/scan-gram.l"
+#line 247 "src/scan-gram.l"
 return PERCENT_PRECEDENCE;
        YY_BREAK
 case 38:
 YY_RULE_SETUP
-#line 251 "src/scan-gram.l"
+#line 248 "src/scan-gram.l"
 return PERCENT_PRINTER;
        YY_BREAK
 case 39:
 YY_RULE_SETUP
-#line 252 "src/scan-gram.l"
+#line 249 "src/scan-gram.l"
 RETURN_PERCENT_FLAG("api.pure");
        YY_BREAK
 case 40:
 YY_RULE_SETUP
-#line 253 "src/scan-gram.l"
+#line 250 "src/scan-gram.l"
 return PERCENT_REQUIRE;
        YY_BREAK
 case 41:
 YY_RULE_SETUP
-#line 254 "src/scan-gram.l"
+#line 251 "src/scan-gram.l"
 return PERCENT_RIGHT;
        YY_BREAK
 case 42:
 YY_RULE_SETUP
-#line 255 "src/scan-gram.l"
+#line 252 "src/scan-gram.l"
 return PERCENT_SKELETON;
        YY_BREAK
 case 43:
 YY_RULE_SETUP
-#line 256 "src/scan-gram.l"
+#line 253 "src/scan-gram.l"
 return PERCENT_START;
        YY_BREAK
 case 44:
 YY_RULE_SETUP
-#line 257 "src/scan-gram.l"
+#line 254 "src/scan-gram.l"
 return PERCENT_TOKEN;
        YY_BREAK
 case 45:
 YY_RULE_SETUP
-#line 258 "src/scan-gram.l"
+#line 255 "src/scan-gram.l"
 return PERCENT_TOKEN;
        YY_BREAK
 case 46:
 YY_RULE_SETUP
-#line 259 "src/scan-gram.l"
+#line 256 "src/scan-gram.l"
 return PERCENT_TOKEN_TABLE;
        YY_BREAK
 case 47:
 YY_RULE_SETUP
-#line 260 "src/scan-gram.l"
+#line 257 "src/scan-gram.l"
 return PERCENT_TYPE;
        YY_BREAK
 case 48:
 YY_RULE_SETUP
-#line 261 "src/scan-gram.l"
+#line 258 "src/scan-gram.l"
 return PERCENT_UNION;
        YY_BREAK
 case 49:
 YY_RULE_SETUP
-#line 262 "src/scan-gram.l"
+#line 259 "src/scan-gram.l"
 return PERCENT_VERBOSE;
        YY_BREAK
 case 50:
 YY_RULE_SETUP
-#line 263 "src/scan-gram.l"
+#line 260 "src/scan-gram.l"
 return PERCENT_YACC;
        YY_BREAK
 /* deprecated */
 case 51:
 YY_RULE_SETUP
-#line 266 "src/scan-gram.l"
+#line 263 "src/scan-gram.l"
 DEPRECATED("%default-prec");
        YY_BREAK
 case 52:
 YY_RULE_SETUP
-#line 267 "src/scan-gram.l"
+#line 264 "src/scan-gram.l"
 DEPRECATED("%define parse.error verbose");
        YY_BREAK
 case 53:
 YY_RULE_SETUP
-#line 268 "src/scan-gram.l"
+#line 265 "src/scan-gram.l"
 DEPRECATED("%expect-rr");
        YY_BREAK
 case 54:
 /* rule 54 can match eol */
 YY_RULE_SETUP
-#line 269 "src/scan-gram.l"
+#line 266 "src/scan-gram.l"
 DEPRECATED("%file-prefix");
        YY_BREAK
 case 55:
 YY_RULE_SETUP
-#line 270 "src/scan-gram.l"
+#line 267 "src/scan-gram.l"
 DEPRECATED("%fixed-output-files");
        YY_BREAK
 case 56:
 /* rule 56 can match eol */
 YY_RULE_SETUP
-#line 271 "src/scan-gram.l"
+#line 268 "src/scan-gram.l"
 DEPRECATED("%name-prefix");
        YY_BREAK
 case 57:
 YY_RULE_SETUP
-#line 272 "src/scan-gram.l"
+#line 269 "src/scan-gram.l"
 DEPRECATED("%no-default-prec");
        YY_BREAK
 case 58:
 YY_RULE_SETUP
-#line 273 "src/scan-gram.l"
+#line 270 "src/scan-gram.l"
 DEPRECATED("%no-lines");
        YY_BREAK
 case 59:
 /* rule 59 can match eol */
 YY_RULE_SETUP
-#line 274 "src/scan-gram.l"
+#line 271 "src/scan-gram.l"
 DEPRECATED("%output");
        YY_BREAK
 case 60:
 YY_RULE_SETUP
-#line 275 "src/scan-gram.l"
+#line 272 "src/scan-gram.l"
 DEPRECATED("%pure-parser");
        YY_BREAK
 case 61:
 YY_RULE_SETUP
-#line 276 "src/scan-gram.l"
+#line 273 "src/scan-gram.l"
 DEPRECATED("%token-table");
        YY_BREAK
 case 62:
 YY_RULE_SETUP
-#line 278 "src/scan-gram.l"
+#line 275 "src/scan-gram.l"
 {
     complain (loc, complaint, _("invalid directive: %s"), quote (gram_text));
   }
        YY_BREAK
 case 63:
 YY_RULE_SETUP
-#line 282 "src/scan-gram.l"
+#line 279 "src/scan-gram.l"
 return EQUAL;
        YY_BREAK
 case 64:
 YY_RULE_SETUP
-#line 283 "src/scan-gram.l"
+#line 280 "src/scan-gram.l"
 return PIPE;
        YY_BREAK
 case 65:
 YY_RULE_SETUP
-#line 284 "src/scan-gram.l"
+#line 281 "src/scan-gram.l"
 return SEMICOLON;
        YY_BREAK
 case 66:
 YY_RULE_SETUP
-#line 286 "src/scan-gram.l"
+#line 283 "src/scan-gram.l"
 {
     val->uniqstr = uniqstr_new (gram_text);
     id_loc = *loc;
     bracketed_id_str = NULL;
     BEGIN SC_AFTER_IDENTIFIER;
  piece_pack();
- piece0_save = piece0;
  piece[piece1++] = strdup("<Id>");
  flush();
  piece[piece1++] = strdup("</Id>");
+ piece_pack();
   }
        YY_BREAK
 case 67:
 YY_RULE_SETUP
-#line 298 "src/scan-gram.l"
+#line 295 "src/scan-gram.l"
 {
     val->integer = scan_integer (gram_text, 10, *loc);
 #if 1
  piece_pack();
  sprintf(piece_temp, "<Int value=\"%d\">", val->integer);
  piece[piece1++] = strdup(piece_temp);
- piece[piece1++] = strdup(gram_text);
+ piece_esc(gram_text, yy_c_buf_p - gram_text);
  piece[piece1++] = strdup("</Int>");
  piece_pack();
  return ~INT;
@@ -2053,14 +2050,14 @@ YY_RULE_SETUP
        YY_BREAK
 case 68:
 YY_RULE_SETUP
-#line 312 "src/scan-gram.l"
+#line 309 "src/scan-gram.l"
 {
     val->integer = scan_integer (gram_text, 16, *loc);
 #if 1
  piece_pack();
  sprintf(piece_temp, "<Int value=\"%d\">", val->integer);
  piece[piece1++] = strdup(piece_temp);
- piece[piece1++] = strdup(gram_text);
+ piece_esc(gram_text, yy_c_buf_p - gram_text);
  piece[piece1++] = strdup("</Integer>");
  piece_pack();
  return ~INT;
@@ -2073,7 +2070,7 @@ YY_RULE_SETUP
      accept "1FOO" as "1 FOO".  */
 case 69:
 YY_RULE_SETUP
-#line 329 "src/scan-gram.l"
+#line 326 "src/scan-gram.l"
 {
     complain (loc, complaint, _("invalid identifier: %s"), quote (gram_text));
   }
@@ -2081,25 +2078,25 @@ YY_RULE_SETUP
 /* Characters.  */
 case 70:
 YY_RULE_SETUP
-#line 334 "src/scan-gram.l"
+#line 331 "src/scan-gram.l"
 token_start = loc->start; BEGIN SC_ESCAPED_CHARACTER; flush(); piece[piece1++] = strdup("<EscapedCharacter>");
        YY_BREAK
 /* Strings. */
 case 71:
 YY_RULE_SETUP
-#line 337 "src/scan-gram.l"
+#line 334 "src/scan-gram.l"
 token_start = loc->start; BEGIN SC_ESCAPED_STRING; flush(); piece[piece1++] = strdup("<EscapedString>");
        YY_BREAK
 /* Prologue. */
 case 72:
 YY_RULE_SETUP
-#line 340 "src/scan-gram.l"
+#line 337 "src/scan-gram.l"
 code_start = loc->start; BEGIN SC_PROLOGUE; flush(); piece[piece1++] = strdup("<Prologue>");
        YY_BREAK
 /* Code in between braces.  */
 case 73:
 YY_RULE_SETUP
-#line 343 "src/scan-gram.l"
+#line 340 "src/scan-gram.l"
 {
     STRING_GROW;
     nesting = 0;
@@ -2113,7 +2110,7 @@ YY_RULE_SETUP
 case 74:
 /* rule 74 can match eol */
 YY_RULE_SETUP
-#line 353 "src/scan-gram.l"
+#line 350 "src/scan-gram.l"
 {
     nesting = 0;
     code_start = loc->start;
@@ -2125,17 +2122,17 @@ YY_RULE_SETUP
 /* A type. */
 case 75:
 YY_RULE_SETUP
-#line 362 "src/scan-gram.l"
+#line 359 "src/scan-gram.l"
 piece_pack(); piece[piece1++] = strdup("&lt;<TagAny>*</TagAny>&gt;"); ++piece0; return ~TAG_ANY; /*return TAG_ANY;*/
        YY_BREAK
 case 76:
 YY_RULE_SETUP
-#line 363 "src/scan-gram.l"
+#line 360 "src/scan-gram.l"
 piece_pack(); piece[piece1++] = strdup("&lt;<TagNone />&gt;"); ++piece0; return ~TAG_NONE; /*return TAG_NONE;*/
        YY_BREAK
 case 77:
 YY_RULE_SETUP
-#line 364 "src/scan-gram.l"
+#line 361 "src/scan-gram.l"
 {
     nesting = 0;
     token_start = loc->start;
@@ -2146,7 +2143,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 78:
 YY_RULE_SETUP
-#line 372 "src/scan-gram.l"
+#line 369 "src/scan-gram.l"
 {
     static int percent_percent_count;
     if (++percent_percent_count == 2)
@@ -2156,7 +2153,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 79:
 YY_RULE_SETUP
-#line 379 "src/scan-gram.l"
+#line 376 "src/scan-gram.l"
 {
     bracketed_id_str = NULL;
     bracketed_id_start = loc->start;
@@ -2166,7 +2163,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 80:
 YY_RULE_SETUP
-#line 386 "src/scan-gram.l"
+#line 383 "src/scan-gram.l"
 {
     complain (loc, complaint, "%s: %s",
               ngettext ("invalid character", "invalid characters", gram_leng),
@@ -2174,7 +2171,7 @@ YY_RULE_SETUP
   }
        YY_BREAK
 case YY_STATE_EOF(INITIAL):
-#line 392 "src/scan-gram.l"
+#line 389 "src/scan-gram.l"
 {
     loc->start = loc->end = scanner_cursor;
     yyterminate ();
@@ -2189,7 +2186,7 @@ case YY_STATE_EOF(INITIAL):
 
 case 81:
 YY_RULE_SETUP
-#line 406 "src/scan-gram.l"
+#line 403 "src/scan-gram.l"
 complain (loc, complaint, _("invalid null character"));
        YY_BREAK
 
@@ -2200,7 +2197,7 @@ complain (loc, complaint, _("invalid null character"));
 
 case 82:
 YY_RULE_SETUP
-#line 416 "src/scan-gram.l"
+#line 413 "src/scan-gram.l"
 {
     if (bracketed_id_str) /* SHOULDN'T THIS BE if (!bracketed_id_str) ??? */
       {
@@ -2219,14 +2216,12 @@ YY_RULE_SETUP
        YY_BREAK
 case 83:
 YY_RULE_SETUP
-#line 431 "src/scan-gram.l"
+#line 428 "src/scan-gram.l"
 {
     BEGIN (bracketed_id_str ? SC_RETURN_BRACKETED_ID : INITIAL);
     *loc = id_loc;
 #if 1
- piece[piece1++] = strdup(gram_text);
- piece0 = piece0_save;
- piece_pack();
+ piece_esc(gram_text, yy_c_buf_p - gram_text);
  return ~ID_COLON;
 #else
     return ID_COLON;
@@ -2235,14 +2230,12 @@ YY_RULE_SETUP
        YY_BREAK
 case 84:
 YY_RULE_SETUP
-#line 443 "src/scan-gram.l"
+#line 438 "src/scan-gram.l"
 {
     ROLLBACK_CURRENT_TOKEN;
     BEGIN (bracketed_id_str ? SC_RETURN_BRACKETED_ID : INITIAL);
     *loc = id_loc;
 #if 1
- piece0 = piece0_save;
- piece_pack();
  return ~ID;
 #else
     return ID;
@@ -2250,13 +2243,11 @@ YY_RULE_SETUP
   }
        YY_BREAK
 case YY_STATE_EOF(SC_AFTER_IDENTIFIER):
-#line 455 "src/scan-gram.l"
+#line 448 "src/scan-gram.l"
 {
     BEGIN (bracketed_id_str ? SC_RETURN_BRACKETED_ID : INITIAL);
     *loc = id_loc;
 #if 1
- piece0 = piece0_save;
- piece_pack();
  return ~ID;
 #else
     return ID;
@@ -2271,7 +2262,7 @@ case YY_STATE_EOF(SC_AFTER_IDENTIFIER):
 
 case 85:
 YY_RULE_SETUP
-#line 474 "src/scan-gram.l"
+#line 465 "src/scan-gram.l"
 {
     if (bracketed_id_str)
       {
@@ -2288,7 +2279,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 86:
 YY_RULE_SETUP
-#line 487 "src/scan-gram.l"
+#line 478 "src/scan-gram.l"
 {
     BEGIN bracketed_id_context_state;
     if (bracketed_id_str)
@@ -2307,7 +2298,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 87:
 YY_RULE_SETUP
-#line 503 "src/scan-gram.l"
+#line 494 "src/scan-gram.l"
 {
     complain (loc, complaint, "%s: %s",
               ngettext ("invalid character in bracketed name",
@@ -2316,7 +2307,7 @@ YY_RULE_SETUP
   }
        YY_BREAK
 case YY_STATE_EOF(SC_BRACKETED_ID):
-#line 510 "src/scan-gram.l"
+#line 501 "src/scan-gram.l"
 {
     BEGIN bracketed_id_context_state;
     unexpected_eof (bracketed_id_start, "]");
@@ -2327,7 +2318,7 @@ case YY_STATE_EOF(SC_BRACKETED_ID):
 
 case 88:
 YY_RULE_SETUP
-#line 518 "src/scan-gram.l"
+#line 509 "src/scan-gram.l"
 {
     ROLLBACK_CURRENT_TOKEN;
     val->uniqstr = bracketed_id_str;
@@ -2345,17 +2336,17 @@ YY_RULE_SETUP
 
 case 89:
 YY_RULE_SETUP
-#line 535 "src/scan-gram.l"
+#line 526 "src/scan-gram.l"
 BEGIN context_state;
        YY_BREAK
 case 90:
 /* rule 90 can match eol */
 YY_RULE_SETUP
-#line 536 "src/scan-gram.l"
+#line 527 "src/scan-gram.l"
 continue;
        YY_BREAK
 case YY_STATE_EOF(SC_YACC_COMMENT):
-#line 537 "src/scan-gram.l"
+#line 528 "src/scan-gram.l"
 unexpected_eof (token_start, "*/"); BEGIN context_state;
        YY_BREAK
 
@@ -2367,11 +2358,11 @@ unexpected_eof (token_start, "*/"); BEGIN context_state;
 case 91:
 /* rule 91 can match eol */
 YY_RULE_SETUP
-#line 547 "src/scan-gram.l"
+#line 538 "src/scan-gram.l"
 STRING_GROW; BEGIN context_state;
        YY_BREAK
 case YY_STATE_EOF(SC_COMMENT):
-#line 548 "src/scan-gram.l"
+#line 539 "src/scan-gram.l"
 unexpected_eof (token_start, "*/"); BEGIN context_state;
        YY_BREAK
 
@@ -2383,17 +2374,17 @@ unexpected_eof (token_start, "*/"); BEGIN context_state;
 case 92:
 /* rule 92 can match eol */
 YY_RULE_SETUP
-#line 558 "src/scan-gram.l"
+#line 549 "src/scan-gram.l"
 STRING_GROW; BEGIN context_state;
        YY_BREAK
 case 93:
 /* rule 93 can match eol */
 YY_RULE_SETUP
-#line 559 "src/scan-gram.l"
+#line 550 "src/scan-gram.l"
 STRING_GROW;
        YY_BREAK
 case YY_STATE_EOF(SC_LINE_COMMENT):
-#line 560 "src/scan-gram.l"
+#line 551 "src/scan-gram.l"
 BEGIN context_state;
        YY_BREAK
 
@@ -2405,7 +2396,7 @@ BEGIN context_state;
 
 case 94:
 YY_RULE_SETUP
-#line 571 "src/scan-gram.l"
+#line 562 "src/scan-gram.l"
 {
     STRING_FINISH;
     loc->start = token_start;
@@ -2416,13 +2407,13 @@ YY_RULE_SETUP
   }
        YY_BREAK
 case YY_STATE_EOF(SC_ESCAPED_STRING):
-#line 579 "src/scan-gram.l"
+#line 570 "src/scan-gram.l"
 unexpected_eof (token_start, "\"");
        YY_BREAK
 case 95:
 /* rule 95 can match eol */
 YY_RULE_SETUP
-#line 580 "src/scan-gram.l"
+#line 571 "src/scan-gram.l"
 unexpected_newline (token_start, "\"");
        YY_BREAK
 
@@ -2434,7 +2425,7 @@ unexpected_newline (token_start, "\"");
 
 case 96:
 YY_RULE_SETUP
-#line 590 "src/scan-gram.l"
+#line 581 "src/scan-gram.l"
 {
     STRING_FINISH;
     loc->start = token_start;
@@ -2459,11 +2450,11 @@ YY_RULE_SETUP
 case 97:
 /* rule 97 can match eol */
 YY_RULE_SETUP
-#line 610 "src/scan-gram.l"
+#line 601 "src/scan-gram.l"
 unexpected_newline (token_start, "'");
        YY_BREAK
 case YY_STATE_EOF(SC_ESCAPED_CHARACTER):
-#line 611 "src/scan-gram.l"
+#line 602 "src/scan-gram.l"
 unexpected_eof (token_start, "'");
        YY_BREAK
 
@@ -2474,7 +2465,7 @@ unexpected_eof (token_start, "'");
 
 case 98:
 YY_RULE_SETUP
-#line 622 "src/scan-gram.l"
+#line 613 "src/scan-gram.l"
 {
     --nesting;
     if (nesting < 0)
@@ -2493,16 +2484,16 @@ YY_RULE_SETUP
 case 99:
 /* rule 99 can match eol */
 YY_RULE_SETUP
-#line 637 "src/scan-gram.l"
+#line 628 "src/scan-gram.l"
 STRING_GROW;
        YY_BREAK
 case 100:
 YY_RULE_SETUP
-#line 638 "src/scan-gram.l"
+#line 629 "src/scan-gram.l"
 STRING_GROW; nesting += gram_leng;
        YY_BREAK
 case YY_STATE_EOF(SC_TAG):
-#line 640 "src/scan-gram.l"
+#line 631 "src/scan-gram.l"
 unexpected_eof (token_start, ">");
        YY_BREAK
 
@@ -2513,7 +2504,7 @@ unexpected_eof (token_start, ">");
 
 case 101:
 YY_RULE_SETUP
-#line 649 "src/scan-gram.l"
+#line 640 "src/scan-gram.l"
 {
     unsigned long int c = strtoul (gram_text + 1, NULL, 8);
     if (!c || UCHAR_MAX < c)
@@ -2531,7 +2522,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 102:
 YY_RULE_SETUP
-#line 664 "src/scan-gram.l"
+#line 655 "src/scan-gram.l"
 {
     verify (UCHAR_MAX < ULONG_MAX);
     unsigned long int c = strtoul (gram_text + 2, NULL, 16);
@@ -2550,48 +2541,48 @@ YY_RULE_SETUP
        YY_BREAK
 case 103:
 YY_RULE_SETUP
-#line 680 "src/scan-gram.l"
+#line 671 "src/scan-gram.l"
 obstack_1grow (&obstack_for_string, '\a'); piece[piece1++] = strdup("<Escape char=\"7\">"); flush(); piece[piece1++] = strdup("</Escape>");
        YY_BREAK
 case 104:
 YY_RULE_SETUP
-#line 681 "src/scan-gram.l"
+#line 672 "src/scan-gram.l"
 obstack_1grow (&obstack_for_string, '\b'); piece[piece1++] = strdup("<Escape char=\"8\">"); flush(); piece[piece1++] = strdup("</Escape>");
        YY_BREAK
 case 105:
 YY_RULE_SETUP
-#line 682 "src/scan-gram.l"
+#line 673 "src/scan-gram.l"
 obstack_1grow (&obstack_for_string, '\f'); piece[piece1++] = strdup("<Escape char=\"12\">"); flush(); piece[piece1++] = strdup("</Escape>");
        YY_BREAK
 case 106:
 YY_RULE_SETUP
-#line 683 "src/scan-gram.l"
+#line 674 "src/scan-gram.l"
 obstack_1grow (&obstack_for_string, '\n'); piece[piece1++] = strdup("<Escape char=\"10\">"); flush(); piece[piece1++] = strdup("</Escape>");
        YY_BREAK
 case 107:
 YY_RULE_SETUP
-#line 684 "src/scan-gram.l"
+#line 675 "src/scan-gram.l"
 obstack_1grow (&obstack_for_string, '\r'); piece[piece1++] = strdup("<Escape char=\"13\">"); flush(); piece[piece1++] = strdup("</Escape>");
        YY_BREAK
 case 108:
 YY_RULE_SETUP
-#line 685 "src/scan-gram.l"
+#line 676 "src/scan-gram.l"
 obstack_1grow (&obstack_for_string, '\t'); piece[piece1++] = strdup("<Escape char=\"9\">"); flush(); piece[piece1++] = strdup("</Escape>");
        YY_BREAK
 case 109:
 YY_RULE_SETUP
-#line 686 "src/scan-gram.l"
+#line 677 "src/scan-gram.l"
 obstack_1grow (&obstack_for_string, '\v'); piece[piece1++] = strdup("<Escape char=\"11\">"); flush(); piece[piece1++] = strdup("</Escape>");
        YY_BREAK
 /* \\[\"\'?\\] would be shorter, but it confuses xgettext.  */
 case 110:
 YY_RULE_SETUP
-#line 689 "src/scan-gram.l"
+#line 680 "src/scan-gram.l"
 obstack_1grow (&obstack_for_string, gram_text[1]); sprintf(piece_temp, "<Escape char=\"%d\">", gram_text[1]); piece[piece1++] = strdup(piece_temp); flush(); piece[piece1++] = strdup("</Escape>"); 
        YY_BREAK
 case 111:
 YY_RULE_SETUP
-#line 691 "src/scan-gram.l"
+#line 682 "src/scan-gram.l"
 {
     int c = convert_ucn_to_byte (gram_text);
     if (c <= 0)
@@ -2610,7 +2601,7 @@ YY_RULE_SETUP
 case 112:
 /* rule 112 can match eol */
 YY_RULE_SETUP
-#line 705 "src/scan-gram.l"
+#line 696 "src/scan-gram.l"
 {
     char const *p = gram_text + 1;
     /* Quote only if escaping won't make the character visible.  */
@@ -2631,7 +2622,7 @@ YY_RULE_SETUP
 case 113:
 /* rule 113 can match eol */
 YY_RULE_SETUP
-#line 723 "src/scan-gram.l"
+#line 714 "src/scan-gram.l"
 STRING_GROW;
        YY_BREAK
 
@@ -2639,17 +2630,17 @@ STRING_GROW;
 
 case 114:
 YY_RULE_SETUP
-#line 728 "src/scan-gram.l"
+#line 719 "src/scan-gram.l"
 STRING_GROW; BEGIN context_state; /*piece[piece1++] = strdup("</Character>");*/
        YY_BREAK
 case 115:
 /* rule 115 can match eol */
 YY_RULE_SETUP
-#line 729 "src/scan-gram.l"
+#line 720 "src/scan-gram.l"
 unexpected_newline (token_start, "'");
        YY_BREAK
 case YY_STATE_EOF(SC_CHARACTER):
-#line 730 "src/scan-gram.l"
+#line 721 "src/scan-gram.l"
 unexpected_eof (token_start, "'");
        YY_BREAK
 
@@ -2657,17 +2648,17 @@ unexpected_eof (token_start, "'");
 
 case 116:
 YY_RULE_SETUP
-#line 735 "src/scan-gram.l"
+#line 726 "src/scan-gram.l"
 STRING_GROW; BEGIN context_state; /*piece[piece1++] = strdup("</String>");*/
        YY_BREAK
 case 117:
 /* rule 117 can match eol */
 YY_RULE_SETUP
-#line 736 "src/scan-gram.l"
+#line 727 "src/scan-gram.l"
 unexpected_newline (token_start, "\"");
        YY_BREAK
 case YY_STATE_EOF(SC_STRING):
-#line 737 "src/scan-gram.l"
+#line 728 "src/scan-gram.l"
 unexpected_eof (token_start, "\"");
        YY_BREAK
 
@@ -2678,7 +2669,7 @@ unexpected_eof (token_start, "\"");
 
 case 118:
 YY_RULE_SETUP
-#line 747 "src/scan-gram.l"
+#line 738 "src/scan-gram.l"
 {
     STRING_GROW;
     context_state = YY_START;
@@ -2690,7 +2681,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 119:
 YY_RULE_SETUP
-#line 755 "src/scan-gram.l"
+#line 746 "src/scan-gram.l"
 {
     STRING_GROW;
     context_state = YY_START;
@@ -2703,7 +2694,7 @@ YY_RULE_SETUP
 case 120:
 /* rule 120 can match eol */
 YY_RULE_SETUP
-#line 763 "src/scan-gram.l"
+#line 754 "src/scan-gram.l"
 {
     STRING_GROW;
     context_state = YY_START;
@@ -2714,7 +2705,7 @@ YY_RULE_SETUP
 case 121:
 /* rule 121 can match eol */
 YY_RULE_SETUP
-#line 769 "src/scan-gram.l"
+#line 760 "src/scan-gram.l"
 {
     STRING_GROW;
     context_state = YY_START;
@@ -2731,13 +2722,13 @@ YY_RULE_SETUP
 case 122:
 /* rule 122 can match eol */
 YY_RULE_SETUP
-#line 785 "src/scan-gram.l"
+#line 776 "src/scan-gram.l"
 STRING_GROW; nesting++;
        YY_BREAK
 case 123:
 /* rule 123 can match eol */
 YY_RULE_SETUP
-#line 786 "src/scan-gram.l"
+#line 777 "src/scan-gram.l"
 STRING_GROW; nesting--;
        YY_BREAK
 /* Tokenize '<<%' correctly (as '<<' '%') rather than incorrrectly
@@ -2745,12 +2736,12 @@ STRING_GROW; nesting--;
 case 124:
 /* rule 124 can match eol */
 YY_RULE_SETUP
-#line 790 "src/scan-gram.l"
+#line 781 "src/scan-gram.l"
 STRING_GROW;
        YY_BREAK
 case YY_STATE_EOF(SC_BRACED_CODE):
 case YY_STATE_EOF(SC_PREDICATE):
-#line 792 "src/scan-gram.l"
+#line 783 "src/scan-gram.l"
 unexpected_eof (code_start, "}");
        YY_BREAK
 
@@ -2758,7 +2749,7 @@ unexpected_eof (code_start, "}");
 
 case 125:
 YY_RULE_SETUP
-#line 797 "src/scan-gram.l"
+#line 788 "src/scan-gram.l"
 {
     obstack_1grow (&obstack_for_string, '}');
 
@@ -2779,7 +2770,7 @@ YY_RULE_SETUP
 
 case 126:
 YY_RULE_SETUP
-#line 815 "src/scan-gram.l"
+#line 806 "src/scan-gram.l"
 {
     --nesting;
     if (nesting < 0)
@@ -2803,7 +2794,7 @@ YY_RULE_SETUP
 
 case 127:
 YY_RULE_SETUP
-#line 837 "src/scan-gram.l"
+#line 828 "src/scan-gram.l"
 {
     STRING_FINISH;
     loc->start = code_start;
@@ -2814,7 +2805,7 @@ YY_RULE_SETUP
   }
        YY_BREAK
 case YY_STATE_EOF(SC_PROLOGUE):
-#line 846 "src/scan-gram.l"
+#line 837 "src/scan-gram.l"
 unexpected_eof (code_start, "%}");
        YY_BREAK
 
@@ -2825,7 +2816,7 @@ unexpected_eof (code_start, "%}");
 
 
 case YY_STATE_EOF(SC_EPILOGUE):
-#line 857 "src/scan-gram.l"
+#line 848 "src/scan-gram.l"
 {
     STRING_FINISH;
     loc->start = code_start;
@@ -2839,19 +2830,19 @@ case YY_STATE_EOF(SC_EPILOGUE):
   | By default, grow the string obstack with the input.  |
   `-----------------------------------------------------*/
 case 128:
-#line 872 "src/scan-gram.l"
+#line 863 "src/scan-gram.l"
 case 129:
 /* rule 129 can match eol */
 YY_RULE_SETUP
-#line 872 "src/scan-gram.l"
+#line 863 "src/scan-gram.l"
 STRING_GROW;
        YY_BREAK
 case 130:
 YY_RULE_SETUP
-#line 874 "src/scan-gram.l"
+#line 865 "src/scan-gram.l"
 YY_FATAL_ERROR( "flex scanner jammed" );
        YY_BREAK
-#line 2743 "src/scan-gram.c"
+#line 2734 "src/scan-gram.c"
 case YY_STATE_EOF(SC_RETURN_BRACKETED_ID):
        yyterminate();
 
@@ -3985,7 +3976,7 @@ void gram_free (void * ptr )
 
 /* %ok-for-header */
 
-#line 874 "src/scan-gram.l"
+#line 865 "src/scan-gram.l"
 
 
 
index f7e9309..f19643b 100644 (file)
@@ -172,9 +172,6 @@ eqopt    ([[:space:]]*=)?
       scanner_cursor = loc->start;
       first = false;
     }
-
-  /* Nick */
-  int piece0_save; /* because of lookahead for : after identifer */
 %}
 
 
@@ -289,10 +286,10 @@ eqopt    ([[:space:]]*=)?
     bracketed_id_str = NULL;
     BEGIN SC_AFTER_IDENTIFIER;
  piece_pack();
- piece0_save = piece0;
  piece[piece1++] = strdup("<Id>");
  flush();
  piece[piece1++] = strdup("</Id>");
+ piece_pack();
   }
 
   {int} {
@@ -301,7 +298,7 @@ eqopt    ([[:space:]]*=)?
  piece_pack();
  sprintf(piece_temp, "<Int value=\"%d\">", val->integer);
  piece[piece1++] = strdup(piece_temp);
- piece[piece1++] = strdup(yytext);
+ piece_esc(yytext, yy_c_buf_p - yytext);
  piece[piece1++] = strdup("</Int>");
  piece_pack();
  return ~INT;
@@ -315,7 +312,7 @@ eqopt    ([[:space:]]*=)?
  piece_pack();
  sprintf(piece_temp, "<Int value=\"%d\">", val->integer);
  piece[piece1++] = strdup(piece_temp);
- piece[piece1++] = strdup(yytext);
+ piece_esc(yytext, yy_c_buf_p - yytext);
  piece[piece1++] = strdup("</Integer>");
  piece_pack();
  return ~INT;
@@ -432,9 +429,7 @@ eqopt    ([[:space:]]*=)?
     BEGIN (bracketed_id_str ? SC_RETURN_BRACKETED_ID : INITIAL);
     *loc = id_loc;
 #if 1
- piece[piece1++] = strdup(yytext);
- piece0 = piece0_save;
- piece_pack();
+ piece_esc(yytext, yy_c_buf_p - yytext);
  return ~ID_COLON;
 #else
     return ID_COLON;
@@ -445,8 +440,6 @@ eqopt    ([[:space:]]*=)?
     BEGIN (bracketed_id_str ? SC_RETURN_BRACKETED_ID : INITIAL);
     *loc = id_loc;
 #if 1
- piece0 = piece0_save;
- piece_pack();
  return ~ID;
 #else
     return ID;
@@ -456,8 +449,6 @@ eqopt    ([[:space:]]*=)?
     BEGIN (bracketed_id_str ? SC_RETURN_BRACKETED_ID : INITIAL);
     *loc = id_loc;
 #if 1
- piece0 = piece0_save;
- piece_pack();
  return ~ID;
 #else
     return ID;