Huge changes to markup, to match first cut at bootstrap_pyacc.py
authorNick Downing <downing.nick@gmail.com>
Mon, 2 Jul 2018 12:27:03 +0000 (22:27 +1000)
committerNick Downing <downing.nick@gmail.com>
Mon, 2 Jul 2018 12:27:03 +0000 (22:27 +1000)
src/parse-gram.c
src/parse-gram.h
src/parse-gram.y
src/reader.c
src/scan-gram.c
src/scan-gram.l

index 249dc46..144a2d5 100644 (file)
@@ -129,7 +129,7 @@ extern int gram_debug;
     param_parse  = 1 << 1,
     param_both   = param_lex | param_parse
   } param_type;
-#line 694 "src/parse-gram.y" /* yacc.c:355  */
+#line 798 "src/parse-gram.y" /* yacc.c:355  */
 #include "muscle-tab.h"
 
 #line 136 "src/parse-gram.c" /* yacc.c:355  */
@@ -221,9 +221,9 @@ symbol_list *list;
 named_ref *named_ref;
 #line 241 "src/parse-gram.y" /* yacc.c:355  */
 param_type param;
-#line 415 "src/parse-gram.y" /* yacc.c:355  */
+#line 496 "src/parse-gram.y" /* yacc.c:355  */
 code_props_type code_type;
-#line 696 "src/parse-gram.y" /* yacc.c:355  */
+#line 800 "src/parse-gram.y" /* yacc.c:355  */
 
   struct
   {
@@ -619,18 +619,18 @@ static const yytype_uint8 yytranslate[] =
   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   264,   264,   279,   280,   284,   285,   291,   295,   300,
-     301,   306,   312,   313,   314,   315,   320,   325,   326,   327,
-     328,   329,   330,   330,   331,   332,   356,   357,   358,   359,
-     363,   364,   373,   374,   375,   379,   391,   395,   399,   407,
-     418,   419,   429,   430,   436,   450,   450,   459,   459,   468,
-     483,   502,   503,   504,   505,   509,   510,   515,   517,   522,
-     527,   539,   541,   546,   547,   551,   552,   556,   557,   558,
-     563,   568,   573,   581,   589,   602,   603,   612,   613,   619,
-     620,   626,   633,   633,   645,   649,   653,   658,   661,   663,
-     665,   667,   669,   671,   673,   678,   679,   689,   690,   715,
-     716,   717,   718,   730,   732,   741,   746,   747,   752,   760,
-     761
+       0,   264,   264,   279,   290,   294,   295,   301,   307,   314,
+     318,   325,   333,   337,   341,   345,   352,   359,   363,   367,
+     371,   375,   379,   379,   383,   387,   413,   417,   421,   425,
+     429,   430,   439,   440,   441,   447,   464,   470,   476,   486,
+     499,   500,   510,   511,   517,   531,   531,   538,   538,   545,
+     560,   580,   581,   582,   583,   587,   590,   595,   597,   602,
+     607,   619,   621,   626,   627,   631,   632,   636,   641,   645,
+     653,   658,   663,   671,   680,   693,   694,   703,   704,   710,
+     711,   712,   719,   719,   731,   735,   739,   744,   747,   752,
+     757,   759,   764,   769,   774,   782,   783,   793,   794,   819,
+     820,   821,   822,   834,   836,   845,   850,   851,   856,   864,
+     865
 };
 #endif
 
@@ -1091,7 +1091,7 @@ yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvalue
         break;
 
     case 65: /* code_props_type  */
-#line 416 "src/parse-gram.y" /* yacc.c:684  */
+#line 497 "src/parse-gram.y" /* yacc.c:684  */
       { fprintf (yyo, "%s", code_props_type_string (((*yyvaluep).code_type))); }
 #line 1097 "src/parse-gram.c" /* yacc.c:684  */
         break;
@@ -1115,7 +1115,7 @@ yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvalue
         break;
 
     case 89: /* value  */
-#line 705 "src/parse-gram.y" /* yacc.c:684  */
+#line 809 "src/parse-gram.y" /* yacc.c:684  */
       {
   switch (((*yyvaluep).value).kind)
     {
@@ -2078,152 +2078,212 @@ yyreduce:
           case 2:
 #line 265 "src/parse-gram.y" /* yacc.c:1648  */
     {
- insert_after(2, "</Sect2>");
- insert_before(2, "<Sect2>");
- insert_after(0, "</Sect1>");
- insert_before(0, "<Sect1>");
+ insert_after(2, "</PYACC_Section2>");
+ insert_before(2, "<PYACC_Section2>");
+ insert_after(0, "</PYACC_Section1>");
+ insert_before(0, "<PYACC_Section1>");
  }
 #line 2057 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
+  case 3:
+#line 280 "src/parse-gram.y" /* yacc.c:1648  */
+    {
+ /* in this case, want empty rule associated with stuff on the right of us */
+ /* therefore, move inter-token text from the right of us over to the left */
+ if (yychar == YYEMPTY)
+  yychar = yylex(&yylval, &yylloc);
+ char *temp = piece[piece2 + 1];
+ piece[piece2 + 1] = piece[piece2]; /* empty */
+ piece[piece2] = piece[piece2 - 1]; /* empty */
+ piece[piece2 - 1] = temp;
+ }
+#line 2072 "src/parse-gram.c" /* yacc.c:1648  */
+    break;
+
   case 6:
-#line 286 "src/parse-gram.y" /* yacc.c:1648  */
+#line 296 "src/parse-gram.y" /* yacc.c:1648  */
     {
       muscle_code_grow (union_seen ? "post_prologue" : "pre_prologue",
                         translate_code ((yyvsp[0].code), (yylsp[0]), true), (yylsp[0]));
       code_scanner_last_string_free ();
     }
-#line 2067 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2082 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 7:
-#line 292 "src/parse-gram.y" /* yacc.c:1648  */
+#line 302 "src/parse-gram.y" /* yacc.c:1648  */
     {
       muscle_percent_define_ensure ((yyvsp[0].uniqstr), (yylsp[0]), true);
+ insert_after(0, "</PYACC_Section1_Flag>");
+ insert_before(0, "<PYACC_Section1_Flag>");
     }
-#line 2075 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2092 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 8:
-#line 296 "src/parse-gram.y" /* yacc.c:1648  */
+#line 308 "src/parse-gram.y" /* yacc.c:1648  */
     {
       muscle_percent_define_insert ((yyvsp[-1].uniqstr), (yylsp[-1]), (yyvsp[0].value).kind, (yyvsp[0].value).chars,
                                     MUSCLE_PERCENT_DEFINE_GRAMMAR_FILE);
+ insert_after(2, "</PYACC_Section1_Define>");
+ insert_before(0, "<PYACC_Section1_Define>");
     }
-#line 2084 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2103 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 9:
-#line 300 "src/parse-gram.y" /* yacc.c:1648  */
-    { defines_flag = true; }
-#line 2090 "src/parse-gram.c" /* yacc.c:1648  */
+#line 314 "src/parse-gram.y" /* yacc.c:1648  */
+    { defines_flag = true; /*}*/
+ insert_after(0, "</PYACC_Section1_Define>");
+ insert_before(0, "<PYACC_Section1_Define>");
+ }
+#line 2112 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 10:
-#line 302 "src/parse-gram.y" /* yacc.c:1648  */
+#line 319 "src/parse-gram.y" /* yacc.c:1648  */
     {
       defines_flag = true;
       spec_defines_file = xstrdup ((yyvsp[0].code));
+ insert_after(1, "</PYACC_Section1_Define>");
+ insert_before(0, "<PYACC_Section1_Define>");
     }
-#line 2099 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2123 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 11:
-#line 307 "src/parse-gram.y" /* yacc.c:1648  */
+#line 326 "src/parse-gram.y" /* yacc.c:1648  */
     {
       muscle_percent_define_insert ("parse.error", (yylsp[0]), muscle_keyword,
                                     "verbose",
                                     MUSCLE_PERCENT_DEFINE_GRAMMAR_FILE);
+ insert_after(0, "</PYACC_Section1_ErrorVerbose>");
+ insert_before(0, "<PYACC_Section1_ErrorVerbose>");
     }
-#line 2109 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2135 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 12:
-#line 312 "src/parse-gram.y" /* yacc.c:1648  */
-    { expected_sr_conflicts = (yyvsp[0].integer); }
-#line 2115 "src/parse-gram.c" /* yacc.c:1648  */
+#line 333 "src/parse-gram.y" /* yacc.c:1648  */
+    { expected_sr_conflicts = (yyvsp[0].integer); /*}*/
+ insert_after(1, "</PYACC_Section1_Expect>");
+ insert_before(0, "<PYACC_Section1_Expect>");
+ }
+#line 2144 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 13:
-#line 313 "src/parse-gram.y" /* yacc.c:1648  */
-    { expected_rr_conflicts = (yyvsp[0].integer); }
-#line 2121 "src/parse-gram.c" /* yacc.c:1648  */
+#line 337 "src/parse-gram.y" /* yacc.c:1648  */
+    { expected_rr_conflicts = (yyvsp[0].integer); /*}*/
+ insert_after(1, "</PYACC_Section1_ExpectRR>");
+ insert_before(0, "<PYACC_Section1_ExpectRR>");
+ }
+#line 2153 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 14:
-#line 314 "src/parse-gram.y" /* yacc.c:1648  */
-    { spec_file_prefix = (yyvsp[0].code); }
-#line 2127 "src/parse-gram.c" /* yacc.c:1648  */
+#line 341 "src/parse-gram.y" /* yacc.c:1648  */
+    { spec_file_prefix = (yyvsp[0].code); /*}*/
+ insert_after(1, "</PYACC_Section1_FilePrefix>");
+ insert_before(0, "<PYACC_Section1_FilePrefix>");
+ }
+#line 2162 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 15:
-#line 316 "src/parse-gram.y" /* yacc.c:1648  */
+#line 346 "src/parse-gram.y" /* yacc.c:1648  */
     {
       nondeterministic_parser = true;
       glr_parser = true;
+ insert_after(0, "</PYACC_Section1_GLRParser>");
+ insert_before(0, "<PYACC_Section1_GLRParser>");
     }
-#line 2136 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2173 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 16:
-#line 321 "src/parse-gram.y" /* yacc.c:1648  */
+#line 353 "src/parse-gram.y" /* yacc.c:1648  */
     {
       muscle_code_grow ("initial_action", translate_code ((yyvsp[0].code), (yylsp[0]), false), (yylsp[0]));
       code_scanner_last_string_free ();
+ insert_after(1, "</PYACC_Section1_InitialAction>");
+ insert_before(0, "<PYACC_Section1_InitialAction>");
     }
-#line 2145 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2184 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 17:
-#line 325 "src/parse-gram.y" /* yacc.c:1648  */
-    { language_argmatch ((yyvsp[0].code), grammar_prio, (yylsp[-1])); }
-#line 2151 "src/parse-gram.c" /* yacc.c:1648  */
+#line 359 "src/parse-gram.y" /* yacc.c:1648  */
+    { language_argmatch ((yyvsp[0].code), grammar_prio, (yylsp[-1])); /*}*/
+ insert_after(1, "</PYACC_Section1_Language>");
+ insert_before(0, "<PYACC_Section1_Language>");
+ }
+#line 2193 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 18:
-#line 326 "src/parse-gram.y" /* yacc.c:1648  */
-    { spec_name_prefix = (yyvsp[0].code); }
-#line 2157 "src/parse-gram.c" /* yacc.c:1648  */
+#line 363 "src/parse-gram.y" /* yacc.c:1648  */
+    { spec_name_prefix = (yyvsp[0].code); /*}*/
+ insert_after(1, "</PYACC_Section1_NamePrefix>");
+ insert_before(0, "<PYACC_Section1_NamePrefix>");
+ }
+#line 2202 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 19:
-#line 327 "src/parse-gram.y" /* yacc.c:1648  */
-    { no_lines_flag = true; }
-#line 2163 "src/parse-gram.c" /* yacc.c:1648  */
+#line 367 "src/parse-gram.y" /* yacc.c:1648  */
+    { no_lines_flag = true; /*}*/
+ insert_after(0, "</PYACC_Section1_Lines>");
+ insert_before(0, "<PYACC_Section1_Lines value=\"false\">");
+ }
+#line 2211 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 20:
-#line 328 "src/parse-gram.y" /* yacc.c:1648  */
-    { nondeterministic_parser = true; }
-#line 2169 "src/parse-gram.c" /* yacc.c:1648  */
+#line 371 "src/parse-gram.y" /* yacc.c:1648  */
+    { nondeterministic_parser = true; /*}*/
+ insert_after(0, "</PYACC_Section1_NonDeterministicParser>");
+ insert_before(0, "<PYACC_Section1_NonDeterministicParser>");
+ }
+#line 2220 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 21:
-#line 329 "src/parse-gram.y" /* yacc.c:1648  */
-    { spec_outfile = (yyvsp[0].code); }
-#line 2175 "src/parse-gram.c" /* yacc.c:1648  */
+#line 375 "src/parse-gram.y" /* yacc.c:1648  */
+    { spec_outfile = (yyvsp[0].code); /*}*/
+ insert_after(1, "</PYACC_Section1_Output>");
+ insert_before(0, "<PYACC_Section1_Output>");
+ }
+#line 2229 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 22:
-#line 330 "src/parse-gram.y" /* yacc.c:1648  */
+#line 379 "src/parse-gram.y" /* yacc.c:1648  */
     { current_param = (yyvsp[0].param); }
-#line 2181 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2235 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 23:
-#line 330 "src/parse-gram.y" /* yacc.c:1648  */
-    { current_param = param_none; }
-#line 2187 "src/parse-gram.c" /* yacc.c:1648  */
+#line 379 "src/parse-gram.y" /* yacc.c:1648  */
+    { current_param = param_none; /*}*/
+ insert_after(2, "</PYACC_Section1_Param>");
+ insert_before(0, "<PYACC_Section1_Param>");
+ }
+#line 2244 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 24:
-#line 331 "src/parse-gram.y" /* yacc.c:1648  */
-    { version_check (&(yylsp[0]), (yyvsp[0].code)); }
-#line 2193 "src/parse-gram.c" /* yacc.c:1648  */
+#line 383 "src/parse-gram.y" /* yacc.c:1648  */
+    { version_check (&(yylsp[0]), (yyvsp[0].code)); /*}*/
+ insert_after(1, "</PYACC_Section1_Require>");
+ insert_before(0, "<PYACC_Section1_Require>");
+ }
+#line 2253 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 25:
-#line 333 "src/parse-gram.y" /* yacc.c:1648  */
+#line 388 "src/parse-gram.y" /* yacc.c:1648  */
     {
       char const *skeleton_user = (yyvsp[0].code);
       if (strchr (skeleton_user, '/'))
@@ -2246,50 +2306,63 @@ yyreduce:
           free (skeleton_build);
         }
       skeleton_arg (skeleton_user, grammar_prio, (yylsp[-1]));
+ insert_after(1, "</PYACC_Section1_Skeleton>");
+ insert_before(0, "<PYACC_Section1_Skeleton>");
     }
-#line 2221 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2283 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 26:
-#line 356 "src/parse-gram.y" /* yacc.c:1648  */
-    { token_table_flag = true; }
-#line 2227 "src/parse-gram.c" /* yacc.c:1648  */
+#line 413 "src/parse-gram.y" /* yacc.c:1648  */
+    { token_table_flag = true; /*}*/
+ insert_after(0, "</PYACC_Section1_TokenTable>");
+ insert_before(0, "<PYACC_Section1_TokenTable>");
+ }
+#line 2292 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 27:
-#line 357 "src/parse-gram.y" /* yacc.c:1648  */
-    { report_flag |= report_states; }
-#line 2233 "src/parse-gram.c" /* yacc.c:1648  */
+#line 417 "src/parse-gram.y" /* yacc.c:1648  */
+    { report_flag |= report_states; /*}*/
+ insert_after(0, "</PYACC_Section1_Verbose>");
+ insert_before(0, "<PYACC_Section1_Verbose>");
+ }
+#line 2301 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 28:
-#line 358 "src/parse-gram.y" /* yacc.c:1648  */
-    { yacc_flag = true; }
-#line 2239 "src/parse-gram.c" /* yacc.c:1648  */
+#line 421 "src/parse-gram.y" /* yacc.c:1648  */
+    { yacc_flag = true; /*}*/
+ insert_after(0, "</PYACC_Section1_YACC>");
+ insert_before(0, "<PYACC_Section1_YACC>");
+ }
+#line 2310 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 30:
-#line 363 "src/parse-gram.y" /* yacc.c:1648  */
+#line 429 "src/parse-gram.y" /* yacc.c:1648  */
     { add_param (current_param, (yyvsp[0].code), (yylsp[0])); }
-#line 2245 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2316 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 31:
-#line 364 "src/parse-gram.y" /* yacc.c:1648  */
+#line 430 "src/parse-gram.y" /* yacc.c:1648  */
     { add_param (current_param, (yyvsp[0].code), (yylsp[0])); }
-#line 2251 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2322 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 34:
-#line 376 "src/parse-gram.y" /* yacc.c:1648  */
+#line 442 "src/parse-gram.y" /* yacc.c:1648  */
     {
       grammar_start_symbol_set ((yyvsp[0].symbol), (yylsp[0]));
+ insert_after(1, "</PYACC_Section1Or2_Start>");
+ insert_before(0, "<PYACC_Section1Or2_Start>");
     }
-#line 2259 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2332 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 35:
-#line 380 "src/parse-gram.y" /* yacc.c:1648  */
+#line 448 "src/parse-gram.y" /* yacc.c:1648  */
     {
       code_props code;
       code_props_symbol_action_init (&code, (yyvsp[-1].code), (yylsp[-1]));
@@ -2300,141 +2373,150 @@ yyreduce:
           symbol_list_code_props_set (list, (yyvsp[-2].code_type), &code);
         symbol_list_free ((yyvsp[0].list));
       }
+ insert_after(2, "</PYACC_Section1Or2_CodeProps>");
+ insert_after(2, "</PYACC_Section1Or2_CodeProps_GenericSymList>");
+ insert_before(2, "<PYACC_Section1Or2_CodeProps_GenericSymList>");
+ sprintf(piece_temp, "<PYACC_Section1Or2_CodeProps type=\"%d\">", (yyvsp[-2].code_type));
+ insert_before(0, piece_temp);
     }
-#line 2275 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2353 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 36:
-#line 392 "src/parse-gram.y" /* yacc.c:1648  */
+#line 465 "src/parse-gram.y" /* yacc.c:1648  */
     {
       default_prec = true;
-    }
-#line 2283 "src/parse-gram.c" /* yacc.c:1648  */
+ insert_after(0, "</PYACC_Section1Or2_DefaultPrec>");
+ insert_before(0, "<PYACC_Section1Or2_DefaultPrec value=\"true\">");
+   }
+#line 2363 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 37:
-#line 396 "src/parse-gram.y" /* yacc.c:1648  */
+#line 471 "src/parse-gram.y" /* yacc.c:1648  */
     {
       default_prec = false;
+ insert_after(0, "</PYACC_Section1Or2_DefaultPrec>");
+ insert_before(0, "<PYACC_Section1Or2_DefaultPrec>");
     }
-#line 2291 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2373 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 38:
-#line 400 "src/parse-gram.y" /* yacc.c:1648  */
+#line 477 "src/parse-gram.y" /* yacc.c:1648  */
     {
       /* Do not invoke muscle_percent_code_grow here since it invokes
          muscle_user_name_list_grow.  */
       muscle_code_grow ("percent_code()",
                         translate_code_braceless ((yyvsp[0].code), (yylsp[0])), (yylsp[0]));
       code_scanner_last_string_free ();
+ insert_after(1, "</PYACC_Section1Or2_Code>");
+ insert_before(0, "<PYACC_Section1Or2_Code><PYACC_IDNone />");
     }
-#line 2303 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2387 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 39:
-#line 408 "src/parse-gram.y" /* yacc.c:1648  */
+#line 487 "src/parse-gram.y" /* yacc.c:1648  */
     {
       muscle_percent_code_grow ((yyvsp[-1].uniqstr), (yylsp[-1]), translate_code_braceless ((yyvsp[0].code), (yylsp[0])), (yylsp[0]));
       code_scanner_last_string_free ();
+ insert_after(2, "</PYACC_Section1Or2_Code>");
+ insert_before(0, "<PYACC_Section1Or2_Code>");
     }
-#line 2312 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2398 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 40:
-#line 418 "src/parse-gram.y" /* yacc.c:1648  */
+#line 499 "src/parse-gram.y" /* yacc.c:1648  */
     { (yyval.code_type) = destructor; }
-#line 2318 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2404 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 41:
-#line 419 "src/parse-gram.y" /* yacc.c:1648  */
+#line 500 "src/parse-gram.y" /* yacc.c:1648  */
     { (yyval.code_type) = printer; }
-#line 2324 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2410 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 42:
-#line 429 "src/parse-gram.y" /* yacc.c:1648  */
-    { insert_before(0, "<NoId />"); }
-#line 2330 "src/parse-gram.c" /* yacc.c:1648  */
+#line 510 "src/parse-gram.y" /* yacc.c:1648  */
+    { insert_before(0, "<PYACC_IDNone />"); }
+#line 2416 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 43:
-#line 430 "src/parse-gram.y" /* yacc.c:1648  */
+#line 511 "src/parse-gram.y" /* yacc.c:1648  */
     { muscle_percent_define_insert ("api.value.union.name",
                                          (yylsp[0]), muscle_keyword, (yyvsp[0].uniqstr),
                                          MUSCLE_PERCENT_DEFINE_GRAMMAR_FILE); }
-#line 2338 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2424 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 44:
-#line 437 "src/parse-gram.y" /* yacc.c:1648  */
+#line 518 "src/parse-gram.y" /* yacc.c:1648  */
     {
       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>");
+ insert_after(2, "</PYACC_Section1Or2_Union>");
+ insert_before(0, "<PYACC_Section1Or2_Union>");
     }
-#line 2350 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2436 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 45:
-#line 450 "src/parse-gram.y" /* yacc.c:1648  */
+#line 531 "src/parse-gram.y" /* yacc.c:1648  */
     { current_class = nterm_sym; }
-#line 2356 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2442 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 46:
-#line 451 "src/parse-gram.y" /* yacc.c:1648  */
+#line 532 "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>");
+ insert_after(2, "</PYACC_Section1Or2_NTerm>");
+ insert_before(0, "<PYACC_Section1Or2_NTerm>");
     }
-#line 2369 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2453 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 47:
-#line 459 "src/parse-gram.y" /* yacc.c:1648  */
+#line 538 "src/parse-gram.y" /* yacc.c:1648  */
     { current_class = token_sym; }
-#line 2375 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2459 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 48:
-#line 460 "src/parse-gram.y" /* yacc.c:1648  */
+#line 539 "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>");
+ insert_after(2, "</PYACC_Section1Or2_Token>");
+ insert_before(0, "<PYACC_Section1Or2_Token>");
     }
-#line 2388 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2470 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 49:
-#line 469 "src/parse-gram.y" /* yacc.c:1648  */
+#line 546 "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>");
+ insert_after(2, "</PYACC_Section1Or2_Type>");
+ insert_after(2, "</PYACC_Section1Or2_Type_Symbols>");
+ insert_before(2, "<PYACC_Section1Or2_Type_Symbols>");
+ insert_before(0, "<PYACC_Section1Or2_Type>");
     }
-#line 2404 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2486 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 50:
-#line 484 "src/parse-gram.y" /* yacc.c:1648  */
+#line 561 "src/parse-gram.y" /* yacc.c:1648  */
     {
       symbol_list *list;
       ++current_prec;
@@ -2445,376 +2527,403 @@ 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>");
+ insert_after(2, "</PYACC_Section1Or2_Precedence>");
+ insert_after(2, "</PYACC_Section1Or2_Precedence_Symbols>");
+ insert_before(2, "<PYACC_Section1Or2_Precedence_Symbols>");
+ sprintf(piece_temp, "<PYACC_Section1Or2_Precedence type=\"%d\">", (yyvsp[-2].assoc)); 
+ insert_before(0, piece_temp);
     }
-#line 2424 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2507 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 51:
-#line 502 "src/parse-gram.y" /* yacc.c:1648  */
-    { (yyval.assoc) = left_assoc; insert_after(0, "</PrecedenceDeclaration_Left>"); insert_before(0, "<PrecedenceDeclaration_Left>"); }
-#line 2430 "src/parse-gram.c" /* yacc.c:1648  */
+#line 580 "src/parse-gram.y" /* yacc.c:1648  */
+    { (yyval.assoc) = left_assoc; }
+#line 2513 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 52:
-#line 503 "src/parse-gram.y" /* yacc.c:1648  */
-    { (yyval.assoc) = right_assoc; insert_after(0, "</PrecedenceDeclaration_Right>"); insert_before(0, "<PrecedenceDeclaration_Right>"); }
-#line 2436 "src/parse-gram.c" /* yacc.c:1648  */
+#line 581 "src/parse-gram.y" /* yacc.c:1648  */
+    { (yyval.assoc) = right_assoc;  }
+#line 2519 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 53:
-#line 504 "src/parse-gram.y" /* yacc.c:1648  */
-    { (yyval.assoc) = non_assoc; insert_after(0, "</PrecedenceDeclaration_Non>"); insert_before(0, "<PrecedenceDeclaration_Non>"); }
-#line 2442 "src/parse-gram.c" /* yacc.c:1648  */
+#line 582 "src/parse-gram.y" /* yacc.c:1648  */
+    { (yyval.assoc) = non_assoc; }
+#line 2525 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 54:
-#line 505 "src/parse-gram.y" /* yacc.c:1648  */
-    { (yyval.assoc) = precedence_assoc; insert_after(0, "</PrecedenceDeclaration_Precedence>"); insert_before(0, "<PrecedenceDeclaration_Precedence>"); }
-#line 2448 "src/parse-gram.c" /* yacc.c:1648  */
+#line 583 "src/parse-gram.y" /* yacc.c:1648  */
+    { (yyval.assoc) = precedence_assoc; }
+#line 2531 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 55:
-#line 509 "src/parse-gram.y" /* yacc.c:1648  */
-    { current_type = NULL; insert_before(0, "<NoTag />"); }
-#line 2454 "src/parse-gram.c" /* yacc.c:1648  */
+#line 587 "src/parse-gram.y" /* yacc.c:1648  */
+    { current_type = NULL; /*}*/
+ insert_before(0, "<PYACC_TagNone />");
+ }
+#line 2539 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 56:
-#line 510 "src/parse-gram.y" /* yacc.c:1648  */
+#line 590 "src/parse-gram.y" /* yacc.c:1648  */
     { current_type = (yyvsp[0].uniqstr); tag_seen = true; }
-#line 2460 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2545 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 57:
-#line 516 "src/parse-gram.y" /* yacc.c:1648  */
+#line 596 "src/parse-gram.y" /* yacc.c:1648  */
     { (yyval.list) = symbol_list_sym_new ((yyvsp[0].symbol), (yylsp[0])); }
-#line 2466 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2551 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 58:
-#line 518 "src/parse-gram.y" /* yacc.c:1648  */
+#line 598 "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 2472 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2557 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 59:
-#line 523 "src/parse-gram.y" /* yacc.c:1648  */
+#line 603 "src/parse-gram.y" /* yacc.c:1648  */
     {
       (yyval.symbol) = (yyvsp[0].symbol);
       symbol_class_set ((yyvsp[0].symbol), token_sym, (yylsp[0]), false);
     }
-#line 2481 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2566 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 60:
-#line 528 "src/parse-gram.y" /* yacc.c:1648  */
+#line 608 "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>");
+ insert_after(1, "<PYACC_Section1Or2_Precedence_Symbols_Symbol>");
+ insert_before(0, "<PYACC_Sectino1Or2_Precedence_Symbols_Symbol>");
     }
-#line 2493 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2578 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 61:
-#line 540 "src/parse-gram.y" /* yacc.c:1648  */
+#line 620 "src/parse-gram.y" /* yacc.c:1648  */
     { (yyval.list) = symbol_list_sym_new ((yyvsp[0].symbol), (yylsp[0])); }
-#line 2499 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2584 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 62:
-#line 542 "src/parse-gram.y" /* yacc.c:1648  */
+#line 622 "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 2505 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2590 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 63:
-#line 546 "src/parse-gram.y" /* yacc.c:1648  */
+#line 626 "src/parse-gram.y" /* yacc.c:1648  */
     { (yyval.list) = (yyvsp[0].list); }
-#line 2511 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2596 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 64:
-#line 547 "src/parse-gram.y" /* yacc.c:1648  */
+#line 627 "src/parse-gram.y" /* yacc.c:1648  */
     { (yyval.list) = symbol_list_append ((yyvsp[-1].list), (yyvsp[0].list)); }
-#line 2517 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2602 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 65:
-#line 551 "src/parse-gram.y" /* yacc.c:1648  */
+#line 631 "src/parse-gram.y" /* yacc.c:1648  */
     { (yyval.list) = symbol_list_sym_new ((yyvsp[0].symbol), (yylsp[0])); }
-#line 2523 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2608 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 66:
-#line 552 "src/parse-gram.y" /* yacc.c:1648  */
+#line 632 "src/parse-gram.y" /* yacc.c:1648  */
     { (yyval.list) = symbol_list_type_new ((yyvsp[0].uniqstr), (yylsp[0])); }
-#line 2529 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2614 "src/parse-gram.c" /* yacc.c:1648  */
+    break;
+
+  case 67:
+#line 637 "src/parse-gram.y" /* yacc.c:1648  */
+    {
+ insert_after(0, "</PYACC_Tag");
+ insert_before(0, "<PYACC_Tag type=\"0\">");
+ }
+#line 2623 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 68:
-#line 557 "src/parse-gram.y" /* yacc.c:1648  */
-    { (yyval.uniqstr) = uniqstr_new ("*"); }
-#line 2535 "src/parse-gram.c" /* yacc.c:1648  */
+#line 641 "src/parse-gram.y" /* yacc.c:1648  */
+    { (yyval.uniqstr) = uniqstr_new ("*"); /*}*/
+ insert_after(0, "</PYACC_Tag");
+ insert_before(0, "<PYACC_Tag type=\"1\">");
+ }
+#line 2632 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 69:
-#line 558 "src/parse-gram.y" /* yacc.c:1648  */
-    { (yyval.uniqstr) = uniqstr_new (""); }
-#line 2541 "src/parse-gram.c" /* yacc.c:1648  */
+#line 645 "src/parse-gram.y" /* yacc.c:1648  */
+    { (yyval.uniqstr) = uniqstr_new (""); /*}*/
+ insert_after(0, "</PYACC_Tag");
+ insert_before(0, "<PYACC_Tag type=\"2\">");
+ }
+#line 2641 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 70:
-#line 564 "src/parse-gram.y" /* yacc.c:1648  */
+#line 654 "src/parse-gram.y" /* yacc.c:1648  */
     {
       current_type = (yyvsp[0].uniqstr);
       tag_seen = true;
     }
-#line 2550 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2650 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 71:
-#line 569 "src/parse-gram.y" /* yacc.c:1648  */
+#line 659 "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 2559 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2659 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 72:
-#line 574 "src/parse-gram.y" /* yacc.c:1648  */
+#line 664 "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>");
+ insert_after(1, "</PYACC_Section1Or2_SymbolDef>");
+ insert_before(0, "<PYACC_Section1Or2_SymbolDef>");
     }
-#line 2571 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2671 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 73:
-#line 582 "src/parse-gram.y" /* yacc.c:1648  */
+#line 672 "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>");
+ insert_after(1, "</PYACC_Section1Or2_SymbolDef>");
+ insert_after(0, "<PYACC_IntNone />");
+ insert_before(0, "<PYACC_Section1Or2_SymbolDef>");
     }
-#line 2583 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2684 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 74:
-#line 590 "src/parse-gram.y" /* yacc.c:1648  */
+#line 681 "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>");
+ insert_after(2, "</PYACC_Section1Or2_SymbolDef>");
+ insert_before(0, "<PYACC_Section1Or2_SymbolDef>");
     }
-#line 2596 "src/parse-gram.c" /* yacc.c:1648  */
-    break;
-
-  case 80:
-#line 621 "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 2606 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2697 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 81:
-#line 627 "src/parse-gram.y" /* yacc.c:1648  */
+#line 713 "src/parse-gram.y" /* yacc.c:1648  */
     {
       yyerrok;
     }
-#line 2614 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2705 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 82:
-#line 633 "src/parse-gram.y" /* yacc.c:1648  */
+#line 719 "src/parse-gram.y" /* yacc.c:1648  */
     { current_lhs ((yyvsp[-1].symbol), (yylsp[-1]), (yyvsp[0].named_ref)); }
-#line 2620 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2711 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 83:
-#line 634 "src/parse-gram.y" /* yacc.c:1648  */
+#line 720 "src/parse-gram.y" /* yacc.c:1648  */
     {
     /* Free the current lhs. */
     current_lhs (0, (yylsp[-3]), 0);
- insert_after(3, "</Rules>");
- insert_after(3, "</RHSes>");
- insert_before(3, "<RHSes>");
- insert_before(0, "<Rules>");
+ insert_after(3, "</PYACC_Section2_Rules>");
+ insert_after(3, "</PYACC_Section2_Rules_RHSes>");
+ insert_before(3, "<PYACC_Section2_Rules_RHSes>");
+ insert_before(0, "<PYACC_Section2_Rules>");
   }
-#line 2633 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2724 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 84:
-#line 645 "src/parse-gram.y" /* yacc.c:1648  */
+#line 731 "src/parse-gram.y" /* yacc.c:1648  */
     { grammar_current_rule_end ((yylsp[0])); /*}*/
- insert_after(0, "</RHS>");
- insert_before(0, "<RHS>");
+ insert_after(0, "</PYACC_Section2_Rules_RHSes_RHS>");
+ insert_before(0, "<PYACC_Section2_Rules_RHSes_RHS>");
  }
-#line 2642 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2733 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 85:
-#line 649 "src/parse-gram.y" /* yacc.c:1648  */
+#line 735 "src/parse-gram.y" /* yacc.c:1648  */
     { grammar_current_rule_end ((yylsp[0])); /*}*/
- insert_after(2, "</RHS>");
- insert_before(2, "<RHS>");
+ insert_after(2, "</PYACC_Section2_Rules_RHSes_RHS>");
+ insert_before(2, "<PYACC_Section2_Rules_RHSes_RHS>");
  }
-#line 2651 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2742 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 87:
-#line 659 "src/parse-gram.y" /* yacc.c:1648  */
+#line 745 "src/parse-gram.y" /* yacc.c:1648  */
     { grammar_current_rule_begin (current_lhs_symbol, current_lhs_location,
                                   current_lhs_named_ref); }
-#line 2658 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2749 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 88:
-#line 662 "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 2664 "src/parse-gram.c" /* yacc.c:1648  */
+#line 748 "src/parse-gram.y" /* yacc.c:1648  */
+    { grammar_current_rule_symbol_append ((yyvsp[-1].symbol), (yylsp[-1]), (yyvsp[0].named_ref)); /*}*/
+ insert_after(2, "</PYACC_Section2_Rules_RHSes_RHS_Symbol>");
+ insert_before(1, "<PYACC_Section2_Rules_RHSes_RHS_Symbol>");
+ }
+#line 2758 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 89:
-#line 664 "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 2670 "src/parse-gram.c" /* yacc.c:1648  */
+#line 753 "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, "</PYACC_Section2_Rules_RHSes_RHS_Action>");
+ insert_after(0, "<PYACC_Section2_Rules_RHSes_RHS_Action>");
+ }
+#line 2767 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 90:
-#line 666 "src/parse-gram.y" /* yacc.c:1648  */
+#line 758 "src/parse-gram.y" /* yacc.c:1648  */
     { grammar_current_rule_action_append ((yyvsp[0].code), (yylsp[0]), NULL, true); }
-#line 2676 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2773 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 91:
-#line 668 "src/parse-gram.y" /* yacc.c:1648  */
-    { grammar_current_rule_empty_set ((yylsp[0])); insert_after(1, "</RHSEmpty>"); insert_before(1, "<RHSEmpty>"); }
-#line 2682 "src/parse-gram.c" /* yacc.c:1648  */
+#line 760 "src/parse-gram.y" /* yacc.c:1648  */
+    { grammar_current_rule_empty_set ((yylsp[0])); /*}*/
+ insert_after(1, "</PYACC_Section2_Rules_RHSes_RHS_Empty>");
+ insert_before(1, "<PYACC_Section2_Rules_RHSes_RHS_Empty>");
+ }
+#line 2782 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 92:
-#line 670 "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 2688 "src/parse-gram.c" /* yacc.c:1648  */
+#line 765 "src/parse-gram.y" /* yacc.c:1648  */
+    { grammar_current_rule_prec_set ((yyvsp[0].symbol), (yylsp[0])); /*}*/
+ insert_after(2, "</PYACC_Section2_Rules_RHSes_RHS_Prec>");
+ insert_before(1, "<PYACC_Section2_Rules_RHSes_RHS_Prec>");
+ }
+#line 2791 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 93:
-#line 672 "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 2694 "src/parse-gram.c" /* yacc.c:1648  */
+#line 770 "src/parse-gram.y" /* yacc.c:1648  */
+    { grammar_current_rule_dprec_set ((yyvsp[0].integer), (yylsp[0])); /*}*/
+ insert_after(2, "</PYACC_Section2_Rules_RHSes_RHS_DPrec>");
+ insert_before(1, "<PYACC_Section2_Rules_RHSes_RHS_DPrec>");
+ }
+#line 2800 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 94:
-#line 674 "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 2700 "src/parse-gram.c" /* yacc.c:1648  */
+#line 775 "src/parse-gram.y" /* yacc.c:1648  */
+    { grammar_current_rule_merge_set ((yyvsp[0].uniqstr), (yylsp[0])); /*}*/
+ insert_after(2, "</PYACC_Section2_Rules_RHSes_RHS_Merge>");
+ insert_before(1, "<PYACC_Section2_Rules_RHSes_RHS_Merge>");
+ }
+#line 2809 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 95:
-#line 678 "src/parse-gram.y" /* yacc.c:1648  */
-    { (yyval.named_ref) = 0; insert_before(0, "<NoNamedRef />"); }
-#line 2706 "src/parse-gram.c" /* yacc.c:1648  */
+#line 782 "src/parse-gram.y" /* yacc.c:1648  */
+    { (yyval.named_ref) = 0; }
+#line 2815 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 96:
-#line 679 "src/parse-gram.y" /* yacc.c:1648  */
+#line 783 "src/parse-gram.y" /* yacc.c:1648  */
     { (yyval.named_ref) = named_ref_new ((yyvsp[0].uniqstr), (yylsp[0])); }
-#line 2712 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2821 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 98:
-#line 690 "src/parse-gram.y" /* yacc.c:1648  */
+#line 794 "src/parse-gram.y" /* yacc.c:1648  */
     { (yyval.uniqstr) = uniqstr_new ((yyvsp[0].code)); }
-#line 2718 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2827 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 99:
-#line 715 "src/parse-gram.y" /* yacc.c:1648  */
-    { (yyval.value).kind = muscle_keyword; (yyval.value).chars = ""; insert_before(0, "<NoValue />"); }
-#line 2724 "src/parse-gram.c" /* yacc.c:1648  */
+#line 819 "src/parse-gram.y" /* yacc.c:1648  */
+    { (yyval.value).kind = muscle_keyword; (yyval.value).chars = ""; }
+#line 2833 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 100:
-#line 716 "src/parse-gram.y" /* yacc.c:1648  */
+#line 820 "src/parse-gram.y" /* yacc.c:1648  */
     { (yyval.value).kind = muscle_keyword; (yyval.value).chars = (yyvsp[0].uniqstr); }
-#line 2730 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2839 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 101:
-#line 717 "src/parse-gram.y" /* yacc.c:1648  */
+#line 821 "src/parse-gram.y" /* yacc.c:1648  */
     { (yyval.value).kind = muscle_string;  (yyval.value).chars = (yyvsp[0].code); }
-#line 2736 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2845 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 102:
-#line 718 "src/parse-gram.y" /* yacc.c:1648  */
+#line 822 "src/parse-gram.y" /* yacc.c:1648  */
     { (yyval.value).kind = muscle_code;    (yyval.value).chars = strip_braces ((yyvsp[0].code)); }
-#line 2742 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2851 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 103:
-#line 731 "src/parse-gram.y" /* yacc.c:1648  */
+#line 835 "src/parse-gram.y" /* yacc.c:1648  */
     { (yyval.symbol) = symbol_from_uniqstr ((yyvsp[0].uniqstr), (yylsp[0])); }
-#line 2748 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2857 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 104:
-#line 733 "src/parse-gram.y" /* yacc.c:1648  */
+#line 837 "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 2758 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2867 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 105:
-#line 741 "src/parse-gram.y" /* yacc.c:1648  */
+#line 845 "src/parse-gram.y" /* yacc.c:1648  */
     { (yyval.symbol) = symbol_from_uniqstr ((yyvsp[0].uniqstr), (yylsp[0])); }
-#line 2764 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2873 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 108:
-#line 753 "src/parse-gram.y" /* yacc.c:1648  */
+#line 857 "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 2773 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2882 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
   case 110:
-#line 762 "src/parse-gram.y" /* yacc.c:1648  */
+#line 866 "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_after(0, "<Sect3>");
+ insert_after(1, "</PYACC_Section3>");
+ insert_after(0, "<PYACC_Section3>");
     }
-#line 2784 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2893 "src/parse-gram.c" /* yacc.c:1648  */
     break;
 
 
-#line 2788 "src/parse-gram.c" /* yacc.c:1648  */
+#line 2897 "src/parse-gram.c" /* yacc.c:1648  */
         default: break;
       }
     if (yychar_backup != yychar)
@@ -3077,7 +3186,7 @@ yyreturn:
 #endif
   return yyresult;
 }
-#line 770 "src/parse-gram.y" /* yacc.c:1907  */
+#line 874 "src/parse-gram.y" /* yacc.c:1907  */
 
 
 /* Return the location of the left-hand side of a rule whose
index 705131e..663883e 100644 (file)
@@ -61,7 +61,7 @@ extern int gram_debug;
     param_parse  = 1 << 1,
     param_both   = param_lex | param_parse
   } param_type;
-#line 694 "src/parse-gram.y" /* yacc.c:1910  */
+#line 798 "src/parse-gram.y" /* yacc.c:1910  */
 #include "muscle-tab.h"
 
 #line 68 "src/parse-gram.h" /* yacc.c:1910  */
@@ -153,9 +153,9 @@ symbol_list *list;
 named_ref *named_ref;
 #line 241 "src/parse-gram.y" /* yacc.c:1910  */
 param_type param;
-#line 415 "src/parse-gram.y" /* yacc.c:1910  */
+#line 496 "src/parse-gram.y" /* yacc.c:1910  */
 code_props_type code_type;
-#line 696 "src/parse-gram.y" /* yacc.c:1910  */
+#line 800 "src/parse-gram.y" /* yacc.c:1910  */
 
   struct
   {
index 8195b1f..bffa7d5 100644 (file)
 input:
   prologue_declarations "%%" grammar epilogue.opt
  {
- insert_after(2, "</Sect2>");
- insert_before(2, "<Sect2>");
- insert_after(0, "</Sect1>");
- insert_before(0, "<Sect1>");
+ insert_after(2, "</PYACC_Section2>");
+ insert_before(2, "<PYACC_Section2>");
+ insert_after(0, "</PYACC_Section1>");
+ insert_before(0, "<PYACC_Section1>");
  }
 ;
 
@@ -277,6 +277,16 @@ input:
 
 prologue_declarations:
   %empty
+ {
+ /* in this case, want empty rule associated with stuff on the right of us */
+ /* therefore, move inter-token text from the right of us over to the left */
+ if (yychar == YYEMPTY)
+  yychar = yylex(&yylval, &yylloc);
+ char *temp = piece[piece2 + 1];
+ piece[piece2 + 1] = piece[piece2]; /* empty */
+ piece[piece2] = piece[piece2 - 1]; /* empty */
+ piece[piece2 - 1] = temp;
+ }
 | prologue_declarations prologue_declaration
 ;
 
@@ -291,44 +301,89 @@ prologue_declaration:
 | "%<flag>"
     {
       muscle_percent_define_ensure ($1, @1, true);
+ insert_after(0, "</PYACC_Section1_Flag>");
+ insert_before(0, "<PYACC_Section1_Flag>");
     }
 | "%define" variable value
     {
       muscle_percent_define_insert ($2, @2, $3.kind, $3.chars,
                                     MUSCLE_PERCENT_DEFINE_GRAMMAR_FILE);
+ insert_after(2, "</PYACC_Section1_Define>");
+ insert_before(0, "<PYACC_Section1_Define>");
     }
-| "%defines"                       { defines_flag = true; }
+| "%defines"                       { defines_flag = true; /*}*/
+ insert_after(0, "</PYACC_Section1_Define>");
+ insert_before(0, "<PYACC_Section1_Define>");
+ }
 | "%defines" STRING
     {
       defines_flag = true;
       spec_defines_file = xstrdup ($2);
+ insert_after(1, "</PYACC_Section1_Define>");
+ insert_before(0, "<PYACC_Section1_Define>");
     }
 | "%error-verbose"
     {
       muscle_percent_define_insert ("parse.error", @1, muscle_keyword,
                                     "verbose",
                                     MUSCLE_PERCENT_DEFINE_GRAMMAR_FILE);
+ insert_after(0, "</PYACC_Section1_ErrorVerbose>");
+ insert_before(0, "<PYACC_Section1_ErrorVerbose>");
     }
-| "%expect" INT                    { expected_sr_conflicts = $2; }
-| "%expect-rr" INT                 { expected_rr_conflicts = $2; }
-| "%file-prefix" STRING            { spec_file_prefix = $2; }
+| "%expect" INT                    { expected_sr_conflicts = $2; /*}*/
+ insert_after(1, "</PYACC_Section1_Expect>");
+ insert_before(0, "<PYACC_Section1_Expect>");
+ }
+| "%expect-rr" INT                 { expected_rr_conflicts = $2; /*}*/
+ insert_after(1, "</PYACC_Section1_ExpectRR>");
+ insert_before(0, "<PYACC_Section1_ExpectRR>");
+ }
+| "%file-prefix" STRING            { spec_file_prefix = $2; /*}*/
+ insert_after(1, "</PYACC_Section1_FilePrefix>");
+ insert_before(0, "<PYACC_Section1_FilePrefix>");
+ }
 | "%glr-parser"
     {
       nondeterministic_parser = true;
       glr_parser = true;
+ insert_after(0, "</PYACC_Section1_GLRParser>");
+ insert_before(0, "<PYACC_Section1_GLRParser>");
     }
 | "%initial-action" "{...}"
     {
       muscle_code_grow ("initial_action", translate_code ($2, @2, false), @2);
       code_scanner_last_string_free ();
+ insert_after(1, "</PYACC_Section1_InitialAction>");
+ insert_before(0, "<PYACC_Section1_InitialAction>");
     }
-| "%language" STRING            { language_argmatch ($2, grammar_prio, @1); }
-| "%name-prefix" STRING         { spec_name_prefix = $2; }
-| "%no-lines"                   { no_lines_flag = true; }
-| "%nondeterministic-parser"    { nondeterministic_parser = true; }
-| "%output" STRING              { spec_outfile = $2; }
-| "%param" { current_param = $1; } params { current_param = param_none; }
-| "%require" STRING             { version_check (&@2, $2); }
+| "%language" STRING            { language_argmatch ($2, grammar_prio, @1); /*}*/
+ insert_after(1, "</PYACC_Section1_Language>");
+ insert_before(0, "<PYACC_Section1_Language>");
+ }
+| "%name-prefix" STRING         { spec_name_prefix = $2; /*}*/
+ insert_after(1, "</PYACC_Section1_NamePrefix>");
+ insert_before(0, "<PYACC_Section1_NamePrefix>");
+ }
+| "%no-lines"                   { no_lines_flag = true; /*}*/
+ insert_after(0, "</PYACC_Section1_Lines>");
+ insert_before(0, "<PYACC_Section1_Lines value=\"false\">");
+ }
+| "%nondeterministic-parser"    { nondeterministic_parser = true; /*}*/
+ insert_after(0, "</PYACC_Section1_NonDeterministicParser>");
+ insert_before(0, "<PYACC_Section1_NonDeterministicParser>");
+ }
+| "%output" STRING              { spec_outfile = $2; /*}*/
+ insert_after(1, "</PYACC_Section1_Output>");
+ insert_before(0, "<PYACC_Section1_Output>");
+ }
+| "%param" { current_param = $1; } params { current_param = param_none; /*}*/
+ insert_after(2, "</PYACC_Section1_Param>");
+ insert_before(0, "<PYACC_Section1_Param>");
+ }
+| "%require" STRING             { version_check (&@2, $2); /*}*/
+ insert_after(1, "</PYACC_Section1_Require>");
+ insert_before(0, "<PYACC_Section1_Require>");
+ }
 | "%skeleton" STRING
     {
       char const *skeleton_user = $2;
@@ -352,10 +407,21 @@ prologue_declaration:
           free (skeleton_build);
         }
       skeleton_arg (skeleton_user, grammar_prio, @1);
+ insert_after(1, "</PYACC_Section1_Skeleton>");
+ insert_before(0, "<PYACC_Section1_Skeleton>");
     }
-| "%token-table"                { token_table_flag = true; }
-| "%verbose"                    { report_flag |= report_states; }
-| "%yacc"                       { yacc_flag = true; }
+| "%token-table"                { token_table_flag = true; /*}*/
+ insert_after(0, "</PYACC_Section1_TokenTable>");
+ insert_before(0, "<PYACC_Section1_TokenTable>");
+ }
+| "%verbose"                    { report_flag |= report_states; /*}*/
+ insert_after(0, "</PYACC_Section1_Verbose>");
+ insert_before(0, "<PYACC_Section1_Verbose>");
+ }
+| "%yacc"                       { yacc_flag = true; /*}*/
+ insert_after(0, "</PYACC_Section1_YACC>");
+ insert_before(0, "<PYACC_Section1_YACC>");
+ }
 | /*FIXME: Err?  What is this horror doing here? */ ";"
 ;
 
@@ -375,6 +441,8 @@ grammar_declaration:
 | "%start" symbol
     {
       grammar_start_symbol_set ($2, @2);
+ insert_after(1, "</PYACC_Section1Or2_Start>");
+ insert_before(0, "<PYACC_Section1Or2_Start>");
     }
 | code_props_type "{...}" generic_symlist
     {
@@ -387,14 +455,23 @@ grammar_declaration:
           symbol_list_code_props_set (list, $1, &code);
         symbol_list_free ($3);
       }
+ insert_after(2, "</PYACC_Section1Or2_CodeProps>");
+ insert_after(2, "</PYACC_Section1Or2_CodeProps_GenericSymList>");
+ insert_before(2, "<PYACC_Section1Or2_CodeProps_GenericSymList>");
+ sprintf(piece_temp, "<PYACC_Section1Or2_CodeProps type=\"%d\">", $1);
+ insert_before(0, piece_temp);
     }
 | "%default-prec"
     {
       default_prec = true;
-    }
+ insert_after(0, "</PYACC_Section1Or2_DefaultPrec>");
+ insert_before(0, "<PYACC_Section1Or2_DefaultPrec value=\"true\">");
+   }
 | "%no-default-prec"
     {
       default_prec = false;
+ insert_after(0, "</PYACC_Section1Or2_DefaultPrec>");
+ insert_before(0, "<PYACC_Section1Or2_DefaultPrec>");
     }
 | "%code" "{...}"
     {
@@ -403,11 +480,15 @@ grammar_declaration:
       muscle_code_grow ("percent_code()",
                         translate_code_braceless ($2, @2), @2);
       code_scanner_last_string_free ();
+ insert_after(1, "</PYACC_Section1Or2_Code>");
+ insert_before(0, "<PYACC_Section1Or2_Code><PYACC_IDNone />");
     }
 | "%code" ID "{...}"
     {
       muscle_percent_code_grow ($2, @2, translate_code_braceless ($3, @3), @3);
       code_scanner_last_string_free ();
+ insert_after(2, "</PYACC_Section1Or2_Code>");
+ insert_before(0, "<PYACC_Section1Or2_Code>");
     }
 ;
 
@@ -426,7 +507,7 @@ code_props_type:
 %token PERCENT_UNION "%union";
 
 union_name:
-  %empty { insert_before(0, "<NoId />"); }
+  %empty { insert_before(0, "<PYACC_IDNone />"); }
 | ID     { muscle_percent_define_insert ("api.value.union.name",
                                          @1, muscle_keyword, $1,
                                          MUSCLE_PERCENT_DEFINE_GRAMMAR_FILE); }
@@ -438,8 +519,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>");
+ insert_after(2, "</PYACC_Section1Or2_Union>");
+ insert_before(0, "<PYACC_Section1Or2_Union>");
     }
 ;
 
@@ -451,19 +532,15 @@ 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>");
+ insert_after(2, "</PYACC_Section1Or2_NTerm>");
+ insert_before(0, "<PYACC_Section1Or2_NTerm>");
     }
 | "%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>");
+ insert_after(2, "</PYACC_Section1Or2_Token>");
+ insert_before(0, "<PYACC_Section1Or2_Token>");
     }
 | "%type" TAG symbols.1
     {
@@ -472,10 +549,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>");
+ insert_after(2, "</PYACC_Section1Or2_Type>");
+ insert_after(2, "</PYACC_Section1Or2_Type_Symbols>");
+ insert_before(2, "<PYACC_Section1Or2_Type_Symbols>");
+ insert_before(0, "<PYACC_Section1Or2_Type>");
     }
 ;
 
@@ -491,22 +568,25 @@ 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>");
+ insert_after(2, "</PYACC_Section1Or2_Precedence>");
+ insert_after(2, "</PYACC_Section1Or2_Precedence_Symbols>");
+ insert_before(2, "<PYACC_Section1Or2_Precedence_Symbols>");
+ sprintf(piece_temp, "<PYACC_Section1Or2_Precedence type=\"%d\">", $1); 
+ insert_before(0, piece_temp);
     }
 ;
 
 precedence_declarator:
-  "%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>"); }
+  "%left"       { $$ = left_assoc; }
+| "%right"      { $$ = right_assoc;  }
+| "%nonassoc"   { $$ = non_assoc; }
+| "%precedence" { $$ = precedence_assoc; }
 ;
 
 tag.opt:
-  %empty { current_type = NULL; insert_before(0, "<NoTag />"); }
+  %empty { current_type = NULL; /*}*/
+ insert_before(0, "<PYACC_TagNone />");
+ }
 | TAG    { current_type = $1; tag_seen = true; }
 ;
 
@@ -529,8 +609,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>");
+ insert_after(1, "<PYACC_Section1Or2_Precedence_Symbols_Symbol>");
+ insert_before(0, "<PYACC_Sectino1Or2_Precedence_Symbols_Symbol>");
     }
 ;
 
@@ -554,8 +634,18 @@ generic_symlist_item:
 
 tag:
   TAG
-| "<*>" { $$ = uniqstr_new ("*"); }
-| "<>"  { $$ = uniqstr_new (""); }
+ {
+ insert_after(0, "</PYACC_Tag");
+ insert_before(0, "<PYACC_Tag type=\"0\">");
+ }
+| "<*>" { $$ = uniqstr_new ("*"); /*}*/
+ insert_after(0, "</PYACC_Tag");
+ insert_before(0, "<PYACC_Tag type=\"1\">");
+ }
+| "<>"  { $$ = uniqstr_new (""); /*}*/
+ insert_after(0, "</PYACC_Tag");
+ insert_before(0, "<PYACC_Tag type=\"2\">");
+ }
 ;
 
 /* One token definition.  */
@@ -575,16 +665,17 @@ 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>");
+ insert_after(1, "</PYACC_Section1Or2_SymbolDef>");
+ insert_before(0, "<PYACC_Section1Or2_SymbolDef>");
     }
 | 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>");
+ insert_after(1, "</PYACC_Section1Or2_SymbolDef>");
+ insert_after(0, "<PYACC_IntNone />");
+ insert_before(0, "<PYACC_Section1Or2_SymbolDef>");
     }
 | id INT string_as_id
     {
@@ -592,8 +683,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>");
+ insert_after(2, "</PYACC_Section1Or2_SymbolDef>");
+ insert_before(0, "<PYACC_Section1Or2_SymbolDef>");
     }
 ;
 
@@ -618,11 +709,6 @@ grammar:
 rules_or_grammar_declaration:
   rules
 | grammar_declaration ";"
- {
- /* this should be done inside the rule with a more descriptive tag */
- insert_after(0, "</GrammarDeclaration>");
- insert_before(0, "<GrammarDeclaration>");
- }
 | error ";"
     {
       yyerrok;
@@ -634,21 +720,21 @@ rules:
   {
     /* Free the current lhs. */
     current_lhs (0, @1, 0);
- insert_after(3, "</Rules>");
- insert_after(3, "</RHSes>");
- insert_before(3, "<RHSes>");
- insert_before(0, "<Rules>");
+ insert_after(3, "</PYACC_Section2_Rules>");
+ insert_after(3, "</PYACC_Section2_Rules_RHSes>");
+ insert_before(3, "<PYACC_Section2_Rules_RHSes>");
+ insert_before(0, "<PYACC_Section2_Rules>");
   }
 ;
 
 rhses.1:
   rhs                { grammar_current_rule_end (@1); /*}*/
- insert_after(0, "</RHS>");
- insert_before(0, "<RHS>");
+ insert_after(0, "</PYACC_Section2_Rules_RHSes_RHS>");
+ insert_before(0, "<PYACC_Section2_Rules_RHSes_RHS>");
  }
 | rhses.1 "|" rhs    { grammar_current_rule_end (@3); /*}*/
- insert_after(2, "</RHS>");
- insert_before(2, "<RHS>");
+ insert_after(2, "</PYACC_Section2_Rules_RHSes_RHS>");
+ insert_before(2, "<PYACC_Section2_Rules_RHSes_RHS>");
  }
 | rhses.1 ";"
 ;
@@ -659,23 +745,41 @@ 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); insert_after(2, "</RHSSymbol>"); insert_before(1, "<RHSSymbol>"); }
+    { grammar_current_rule_symbol_append ($2, @2, $3); /*}*/
+ insert_after(2, "</PYACC_Section2_Rules_RHSes_RHS_Symbol>");
+ insert_before(1, "<PYACC_Section2_Rules_RHSes_RHS_Symbol>");
+ }
 | rhs "{...}" named_ref.opt
-    { grammar_current_rule_action_append ($2, @2, $3, false); insert_after(2, "</RHSAction>"); insert_after(0, "<RHSAction>"); }
+    { grammar_current_rule_action_append ($2, @2, $3, false); /*}*/
+ insert_after(2, "</PYACC_Section2_Rules_RHSes_RHS_Action>");
+ insert_after(0, "<PYACC_Section2_Rules_RHSes_RHS_Action>");
+ }
 | rhs "%?{...}"
     { grammar_current_rule_action_append ($2, @2, NULL, true); }
 | rhs "%empty"
-    { grammar_current_rule_empty_set (@2); insert_after(1, "</RHSEmpty>"); insert_before(1, "<RHSEmpty>"); }
+    { grammar_current_rule_empty_set (@2); /*}*/
+ insert_after(1, "</PYACC_Section2_Rules_RHSes_RHS_Empty>");
+ insert_before(1, "<PYACC_Section2_Rules_RHSes_RHS_Empty>");
+ }
 | rhs "%prec" symbol
-    { grammar_current_rule_prec_set ($3, @3); insert_after(2, "</RHSPrec>"); insert_before(1, "<RHSPrec>"); }
+    { grammar_current_rule_prec_set ($3, @3); /*}*/
+ insert_after(2, "</PYACC_Section2_Rules_RHSes_RHS_Prec>");
+ insert_before(1, "<PYACC_Section2_Rules_RHSes_RHS_Prec>");
+ }
 | rhs "%dprec" INT
-    { grammar_current_rule_dprec_set ($3, @3); insert_after(2, "</RHSDPrec>"); insert_before(1, "<RHSDPrec>"); }
+    { grammar_current_rule_dprec_set ($3, @3); /*}*/
+ insert_after(2, "</PYACC_Section2_Rules_RHSes_RHS_DPrec>");
+ insert_before(1, "<PYACC_Section2_Rules_RHSes_RHS_DPrec>");
+ }
 | rhs "%merge" TAG
-    { grammar_current_rule_merge_set ($3, @3); insert_after(2, "</RHSMerge>"); insert_before(1, "<RHSMerge>"); }
+    { grammar_current_rule_merge_set ($3, @3); /*}*/
+ insert_after(2, "</PYACC_Section2_Rules_RHSes_RHS_Merge>");
+ insert_before(1, "<PYACC_Section2_Rules_RHSes_RHS_Merge>");
+ }
 ;
 
 named_ref.opt:
-  %empty         { $$ = 0; insert_before(0, "<NoNamedRef />"); }
+  %empty         { $$ = 0; }
 | BRACKETED_ID   { $$ = named_ref_new ($1, @1); }
 ;
 
@@ -712,7 +816,7 @@ variable:
 } <value>;
 
 value:
-  %empty  { $$.kind = muscle_keyword; $$.chars = ""; insert_before(0, "<NoValue />"); }
+  %empty  { $$.kind = muscle_keyword; $$.chars = ""; }
 | ID      { $$.kind = muscle_keyword; $$.chars = $1; }
 | STRING  { $$.kind = muscle_string;  $$.chars = $1; }
 | "{...}" { $$.kind = muscle_code;    $$.chars = strip_braces ($1); }
@@ -762,8 +866,8 @@ epilogue.opt:
     {
       muscle_code_grow ("epilogue", translate_code ($2, @2, true), @2);
       code_scanner_last_string_free ();
- insert_after(1, "</Sect3>");
- insert_after(0, "<Sect3>");
+ insert_after(1, "</PYACC_Section3>");
+ insert_after(0, "<PYACC_Section3>");
     }
 ;
 
index b82f438..8229efa 100644 (file)
@@ -668,11 +668,11 @@ reader (void)
   gram_scanner_initialize ();
 #if 1
  void piece_append(const char *str);
- piece_append("<RefList><PYACCSpecification ref=\"0\"><Section1>");
+ piece_append("<RefList><PYACC ref=\"0\">");
 #endif
   gram_parse ();
 #if 1
- piece_append("</PYACCSpecification></RefList>");
+ piece_append("</PYACC></RefList>");
 
  extern char *piece[];
  extern int piece1;
index 7c5ac4e..2602f3a 100644 (file)
@@ -1010,20 +1010,20 @@ int gram__flex_debug = 1;
 
 static yyconst flex_int16_t yy_rule_linenum[130] =
     {   0,
-      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
+      189,  192,  193,  194,  202,  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,  264,
+      267,  268,  269,  270,  271,  272,  273,  274,  275,  276,
+      277,  279,  283,  284,  285,  287,  299,  313,  330,  335,
+      338,  341,  344,  356,  367,  368,  369,  377,  384,  391,
+      411,  421,  436,  446,  473,  486,  502,  517,  534,  535,
+      546,  557,  558,  570,  586,  596,  623,  635,  656,  657,
+
+      668,  684,  701,  702,  703,  704,  705,  706,  707,  710,
+      712,  727,  749,  754,  755,  761,  762,  773,  779,  785,
+      791,  807,  808,  812,  819,  844,  873,  914,  915
     } ;
 
 /* The intent behind this definition is that it'll catch
@@ -1135,6 +1135,10 @@ static int convert_ucn_to_byte (char const *hex_text);
 static void unexpected_eof (boundary, char const *);
 static void unexpected_newline (boundary, char const *);
 
+/* Nick */
+static int in_text;
+static void flush_text(void);
+
 /* A C-like comment in directives/rules. */
 
 /* Strings and characters in directives/rules. */
@@ -1164,7 +1168,7 @@ generics/template types.  */
    white space between the backslash and the newline.  */
 /* An equal sign, with optional leading whitespaces. This is used in some
    deprecated constructs. */
-#line 1141 "src/scan-gram.c"
+#line 1145 "src/scan-gram.c"
 
 #define INITIAL 0
 #define SC_YACC_COMMENT 1
@@ -1509,7 +1513,7 @@ static int real_yylex(GRAM_STYPE *val, location *loc)
        register int yy_act;
     
 /* %% [7.0] user's declarations go here */
-#line 146 "src/scan-gram.l"
+#line 150 "src/scan-gram.l"
 
 
   /* Nesting level.  Either for nested braces, or nested angle brackets
@@ -1546,7 +1550,7 @@ static int real_yylex(GRAM_STYPE *val, location *loc)
   | Scanning white space.  |
   `-----------------------*/
 
-#line 1443 "src/scan-gram.c"
+#line 1447 "src/scan-gram.c"
 
        if ( !(yy_init) )
                {
@@ -1665,23 +1669,23 @@ do_action:      /* This label is used only to access EOF actions. */
 /* Comments and white space.  */
 case 1:
 YY_RULE_SETUP
-#line 185 "src/scan-gram.l"
+#line 189 "src/scan-gram.l"
 {
      complain (loc, Wother, _("stray ',' treated as white space"));
   }
        YY_BREAK
 case 2:
 /* rule 2 can match eol */
-#line 189 "src/scan-gram.l"
+#line 193 "src/scan-gram.l"
 case 3:
 /* rule 3 can match eol */
 YY_RULE_SETUP
-#line 189 "src/scan-gram.l"
+#line 193 "src/scan-gram.l"
 continue;
        YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 190 "src/scan-gram.l"
+#line 194 "src/scan-gram.l"
 {
     token_start = loc->start;
     context_state = YY_START;
@@ -1693,7 +1697,7 @@ YY_RULE_SETUP
 case 5:
 /* rule 5 can match eol */
 YY_RULE_SETUP
-#line 198 "src/scan-gram.l"
+#line 202 "src/scan-gram.l"
 {
     handle_syncline (gram_text + sizeof "#line " - 1, *loc);
   }
@@ -1711,336 +1715,336 @@ YY_RULE_SETUP
 
 case 6:
 YY_RULE_SETUP
-#line 216 "src/scan-gram.l"
+#line 220 "src/scan-gram.l"
 return PERCENT_NONASSOC;
        YY_BREAK
 case 7:
 YY_RULE_SETUP
-#line 217 "src/scan-gram.l"
+#line 221 "src/scan-gram.l"
 return PERCENT_CODE;
        YY_BREAK
 case 8:
 YY_RULE_SETUP
-#line 218 "src/scan-gram.l"
+#line 222 "src/scan-gram.l"
 RETURN_PERCENT_FLAG("parse.trace");
        YY_BREAK
 case 9:
 YY_RULE_SETUP
-#line 219 "src/scan-gram.l"
+#line 223 "src/scan-gram.l"
 return PERCENT_DEFAULT_PREC;
        YY_BREAK
 case 10:
 YY_RULE_SETUP
-#line 220 "src/scan-gram.l"
+#line 224 "src/scan-gram.l"
 return PERCENT_DEFINE;
        YY_BREAK
 case 11:
 YY_RULE_SETUP
-#line 221 "src/scan-gram.l"
+#line 225 "src/scan-gram.l"
 return PERCENT_DEFINES;
        YY_BREAK
 case 12:
 YY_RULE_SETUP
-#line 222 "src/scan-gram.l"
+#line 226 "src/scan-gram.l"
 return PERCENT_DESTRUCTOR;
        YY_BREAK
 case 13:
 YY_RULE_SETUP
-#line 223 "src/scan-gram.l"
+#line 227 "src/scan-gram.l"
 return PERCENT_DPREC;
        YY_BREAK
 case 14:
 YY_RULE_SETUP
-#line 224 "src/scan-gram.l"
+#line 228 "src/scan-gram.l"
 return PERCENT_EMPTY;
        YY_BREAK
 case 15:
 YY_RULE_SETUP
-#line 225 "src/scan-gram.l"
+#line 229 "src/scan-gram.l"
 return PERCENT_ERROR_VERBOSE;
        YY_BREAK
 case 16:
 YY_RULE_SETUP
-#line 226 "src/scan-gram.l"
+#line 230 "src/scan-gram.l"
 return PERCENT_EXPECT;
        YY_BREAK
 case 17:
 YY_RULE_SETUP
-#line 227 "src/scan-gram.l"
+#line 231 "src/scan-gram.l"
 return PERCENT_EXPECT_RR;
        YY_BREAK
 case 18:
 YY_RULE_SETUP
-#line 228 "src/scan-gram.l"
+#line 232 "src/scan-gram.l"
 return PERCENT_FILE_PREFIX;
        YY_BREAK
 case 19:
 YY_RULE_SETUP
-#line 229 "src/scan-gram.l"
+#line 233 "src/scan-gram.l"
 return PERCENT_YACC;
        YY_BREAK
 case 20:
 YY_RULE_SETUP
-#line 230 "src/scan-gram.l"
+#line 234 "src/scan-gram.l"
 return PERCENT_INITIAL_ACTION;
        YY_BREAK
 case 21:
 YY_RULE_SETUP
-#line 231 "src/scan-gram.l"
+#line 235 "src/scan-gram.l"
 return PERCENT_GLR_PARSER;
        YY_BREAK
 case 22:
 YY_RULE_SETUP
-#line 232 "src/scan-gram.l"
+#line 236 "src/scan-gram.l"
 return PERCENT_LANGUAGE;
        YY_BREAK
 case 23:
 YY_RULE_SETUP
-#line 233 "src/scan-gram.l"
+#line 237 "src/scan-gram.l"
 return PERCENT_LEFT;
        YY_BREAK
 case 24:
 YY_RULE_SETUP
-#line 234 "src/scan-gram.l"
+#line 238 "src/scan-gram.l"
 RETURN_PERCENT_PARAM(lex);
        YY_BREAK
 case 25:
 YY_RULE_SETUP
-#line 235 "src/scan-gram.l"
+#line 239 "src/scan-gram.l"
 RETURN_PERCENT_FLAG("locations");
        YY_BREAK
 case 26:
 YY_RULE_SETUP
-#line 236 "src/scan-gram.l"
+#line 240 "src/scan-gram.l"
 return PERCENT_MERGE;
        YY_BREAK
 case 27:
 YY_RULE_SETUP
-#line 237 "src/scan-gram.l"
+#line 241 "src/scan-gram.l"
 return PERCENT_NAME_PREFIX;
        YY_BREAK
 case 28:
 YY_RULE_SETUP
-#line 238 "src/scan-gram.l"
+#line 242 "src/scan-gram.l"
 return PERCENT_NO_DEFAULT_PREC;
        YY_BREAK
 case 29:
 YY_RULE_SETUP
-#line 239 "src/scan-gram.l"
+#line 243 "src/scan-gram.l"
 return PERCENT_NO_LINES;
        YY_BREAK
 case 30:
 YY_RULE_SETUP
-#line 240 "src/scan-gram.l"
+#line 244 "src/scan-gram.l"
 return PERCENT_NONASSOC;
        YY_BREAK
 case 31:
 YY_RULE_SETUP
-#line 241 "src/scan-gram.l"
+#line 245 "src/scan-gram.l"
 return PERCENT_NONDETERMINISTIC_PARSER;
        YY_BREAK
 case 32:
 YY_RULE_SETUP
-#line 242 "src/scan-gram.l"
+#line 246 "src/scan-gram.l"
 return PERCENT_NTERM;
        YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 243 "src/scan-gram.l"
+#line 247 "src/scan-gram.l"
 return PERCENT_OUTPUT;
        YY_BREAK
 case 34:
 YY_RULE_SETUP
-#line 244 "src/scan-gram.l"
+#line 248 "src/scan-gram.l"
 RETURN_PERCENT_PARAM(both);
        YY_BREAK
 case 35:
 YY_RULE_SETUP
-#line 245 "src/scan-gram.l"
+#line 249 "src/scan-gram.l"
 RETURN_PERCENT_PARAM(parse);
        YY_BREAK
 case 36:
 YY_RULE_SETUP
-#line 246 "src/scan-gram.l"
+#line 250 "src/scan-gram.l"
 return PERCENT_PREC;
        YY_BREAK
 case 37:
 YY_RULE_SETUP
-#line 247 "src/scan-gram.l"
+#line 251 "src/scan-gram.l"
 return PERCENT_PRECEDENCE;
        YY_BREAK
 case 38:
 YY_RULE_SETUP
-#line 248 "src/scan-gram.l"
+#line 252 "src/scan-gram.l"
 return PERCENT_PRINTER;
        YY_BREAK
 case 39:
 YY_RULE_SETUP
-#line 249 "src/scan-gram.l"
+#line 253 "src/scan-gram.l"
 RETURN_PERCENT_FLAG("api.pure");
        YY_BREAK
 case 40:
 YY_RULE_SETUP
-#line 250 "src/scan-gram.l"
+#line 254 "src/scan-gram.l"
 return PERCENT_REQUIRE;
        YY_BREAK
 case 41:
 YY_RULE_SETUP
-#line 251 "src/scan-gram.l"
+#line 255 "src/scan-gram.l"
 return PERCENT_RIGHT;
        YY_BREAK
 case 42:
 YY_RULE_SETUP
-#line 252 "src/scan-gram.l"
+#line 256 "src/scan-gram.l"
 return PERCENT_SKELETON;
        YY_BREAK
 case 43:
 YY_RULE_SETUP
-#line 253 "src/scan-gram.l"
+#line 257 "src/scan-gram.l"
 return PERCENT_START;
        YY_BREAK
 case 44:
 YY_RULE_SETUP
-#line 254 "src/scan-gram.l"
+#line 258 "src/scan-gram.l"
 return PERCENT_TOKEN;
        YY_BREAK
 case 45:
 YY_RULE_SETUP
-#line 255 "src/scan-gram.l"
+#line 259 "src/scan-gram.l"
 return PERCENT_TOKEN;
        YY_BREAK
 case 46:
 YY_RULE_SETUP
-#line 256 "src/scan-gram.l"
+#line 260 "src/scan-gram.l"
 return PERCENT_TOKEN_TABLE;
        YY_BREAK
 case 47:
 YY_RULE_SETUP
-#line 257 "src/scan-gram.l"
+#line 261 "src/scan-gram.l"
 return PERCENT_TYPE;
        YY_BREAK
 case 48:
 YY_RULE_SETUP
-#line 258 "src/scan-gram.l"
+#line 262 "src/scan-gram.l"
 return PERCENT_UNION;
        YY_BREAK
 case 49:
 YY_RULE_SETUP
-#line 259 "src/scan-gram.l"
+#line 263 "src/scan-gram.l"
 return PERCENT_VERBOSE;
        YY_BREAK
 case 50:
 YY_RULE_SETUP
-#line 260 "src/scan-gram.l"
+#line 264 "src/scan-gram.l"
 return PERCENT_YACC;
        YY_BREAK
 /* deprecated */
 case 51:
 YY_RULE_SETUP
-#line 263 "src/scan-gram.l"
+#line 267 "src/scan-gram.l"
 DEPRECATED("%default-prec");
        YY_BREAK
 case 52:
 YY_RULE_SETUP
-#line 264 "src/scan-gram.l"
+#line 268 "src/scan-gram.l"
 DEPRECATED("%define parse.error verbose");
        YY_BREAK
 case 53:
 YY_RULE_SETUP
-#line 265 "src/scan-gram.l"
+#line 269 "src/scan-gram.l"
 DEPRECATED("%expect-rr");
        YY_BREAK
 case 54:
 /* rule 54 can match eol */
 YY_RULE_SETUP
-#line 266 "src/scan-gram.l"
+#line 270 "src/scan-gram.l"
 DEPRECATED("%file-prefix");
        YY_BREAK
 case 55:
 YY_RULE_SETUP
-#line 267 "src/scan-gram.l"
+#line 271 "src/scan-gram.l"
 DEPRECATED("%fixed-output-files");
        YY_BREAK
 case 56:
 /* rule 56 can match eol */
 YY_RULE_SETUP
-#line 268 "src/scan-gram.l"
+#line 272 "src/scan-gram.l"
 DEPRECATED("%name-prefix");
        YY_BREAK
 case 57:
 YY_RULE_SETUP
-#line 269 "src/scan-gram.l"
+#line 273 "src/scan-gram.l"
 DEPRECATED("%no-default-prec");
        YY_BREAK
 case 58:
 YY_RULE_SETUP
-#line 270 "src/scan-gram.l"
+#line 274 "src/scan-gram.l"
 DEPRECATED("%no-lines");
        YY_BREAK
 case 59:
 /* rule 59 can match eol */
 YY_RULE_SETUP
-#line 271 "src/scan-gram.l"
+#line 275 "src/scan-gram.l"
 DEPRECATED("%output");
        YY_BREAK
 case 60:
 YY_RULE_SETUP
-#line 272 "src/scan-gram.l"
+#line 276 "src/scan-gram.l"
 DEPRECATED("%pure-parser");
        YY_BREAK
 case 61:
 YY_RULE_SETUP
-#line 273 "src/scan-gram.l"
+#line 277 "src/scan-gram.l"
 DEPRECATED("%token-table");
        YY_BREAK
 case 62:
 YY_RULE_SETUP
-#line 275 "src/scan-gram.l"
+#line 279 "src/scan-gram.l"
 {
     complain (loc, complaint, _("invalid directive: %s"), quote (gram_text));
   }
        YY_BREAK
 case 63:
 YY_RULE_SETUP
-#line 279 "src/scan-gram.l"
+#line 283 "src/scan-gram.l"
 return EQUAL;
        YY_BREAK
 case 64:
 YY_RULE_SETUP
-#line 280 "src/scan-gram.l"
+#line 284 "src/scan-gram.l"
 return PIPE;
        YY_BREAK
 case 65:
 YY_RULE_SETUP
-#line 281 "src/scan-gram.l"
+#line 285 "src/scan-gram.l"
 return SEMICOLON;
        YY_BREAK
 case 66:
 YY_RULE_SETUP
-#line 283 "src/scan-gram.l"
+#line 287 "src/scan-gram.l"
 {
     val->uniqstr = uniqstr_new (gram_text);
     id_loc = *loc;
     bracketed_id_str = NULL;
     BEGIN SC_AFTER_IDENTIFIER;
  piece_pack();
- piece_append("<Id>");
+ piece_append("<PYACC_ID>");
  flush();
- piece_append("</Id>");
+ piece_append("</PYACC_ID>");
  piece_pack();
   }
        YY_BREAK
 case 67:
 YY_RULE_SETUP
-#line 295 "src/scan-gram.l"
+#line 299 "src/scan-gram.l"
 {
     val->integer = scan_integer (gram_text, 10, *loc);
 #if 1
  piece_pack();
- sprintf(piece_temp, "<Int value=\"%d\">", val->integer);
+ sprintf(piece_temp, "<PYACC_Int value=\"%d\">", val->integer);
  piece_append(piece_temp);
  piece_esc(gram_text, yy_c_buf_p - gram_text);
- piece_append("</Int>");
+ piece_append("</PYACC_Int>");
  piece_pack();
  return ~INT;
 #else
@@ -2050,15 +2054,15 @@ YY_RULE_SETUP
        YY_BREAK
 case 68:
 YY_RULE_SETUP
-#line 309 "src/scan-gram.l"
+#line 313 "src/scan-gram.l"
 {
     val->integer = scan_integer (gram_text, 16, *loc);
 #if 1
  piece_pack();
- sprintf(piece_temp, "<Int value=\"%d\">", val->integer);
+ sprintf(piece_temp, "<PYACC_Int value=\"%d\">", val->integer);
  piece_append(piece_temp);
  piece_esc(gram_text, yy_c_buf_p - gram_text);
- piece_append("</Integer>");
+ piece_append("</PYACC_Int>");
  piece_pack();
  return ~INT;
 #else
@@ -2070,7 +2074,7 @@ YY_RULE_SETUP
      accept "1FOO" as "1 FOO".  */
 case 69:
 YY_RULE_SETUP
-#line 326 "src/scan-gram.l"
+#line 330 "src/scan-gram.l"
 {
     complain (loc, complaint, _("invalid identifier: %s"), quote (gram_text));
   }
@@ -2078,72 +2082,76 @@ YY_RULE_SETUP
 /* Characters.  */
 case 70:
 YY_RULE_SETUP
-#line 331 "src/scan-gram.l"
-token_start = loc->start; BEGIN SC_ESCAPED_CHARACTER; flush(); piece_append("<EscapedCharacter>");
+#line 335 "src/scan-gram.l"
+token_start = loc->start; BEGIN SC_ESCAPED_CHARACTER; piece_pack(); piece_append("<PYACC_Char>"); in_text = 0;
        YY_BREAK
 /* Strings. */
 case 71:
 YY_RULE_SETUP
-#line 334 "src/scan-gram.l"
-token_start = loc->start; BEGIN SC_ESCAPED_STRING; flush(); piece_append("<EscapedString>");
+#line 338 "src/scan-gram.l"
+token_start = loc->start; BEGIN SC_ESCAPED_STRING; piece_pack(); piece_append("<PYACC_String>"); in_text = 0;
        YY_BREAK
 /* Prologue. */
 case 72:
 YY_RULE_SETUP
-#line 337 "src/scan-gram.l"
-code_start = loc->start; BEGIN SC_PROLOGUE; flush(); piece_append("<Prologue>");
+#line 341 "src/scan-gram.l"
+code_start = loc->start; BEGIN SC_PROLOGUE; piece_pack(); piece_append("<PYACC_Section1_Prologue>"); flush(); piece_append("<PYACC_Text>");
        YY_BREAK
 /* Code in between braces.  */
 case 73:
 YY_RULE_SETUP
-#line 340 "src/scan-gram.l"
+#line 344 "src/scan-gram.l"
 {
     STRING_GROW;
     nesting = 0;
     code_start = loc->start;
     BEGIN SC_BRACED_CODE;
+ piece_pack();
+ piece_append("<PYACC_BracedCode>");
  flush();
- piece_append("<BracedCode>");
+ piece_append("<PYACC_Text>");
   }
        YY_BREAK
 /* Semantic predicate. */
 case 74:
 /* rule 74 can match eol */
 YY_RULE_SETUP
-#line 350 "src/scan-gram.l"
+#line 356 "src/scan-gram.l"
 {
     nesting = 0;
     code_start = loc->start;
+ piece_pack();
+ piece_append("<PYACC_BracedPredicate>");
  flush();
- piece_append("<Predicate>");
+ piece_append("<PYACC_Text>");
     BEGIN SC_PREDICATE;
   }
        YY_BREAK
 /* A type. */
 case 75:
 YY_RULE_SETUP
-#line 359 "src/scan-gram.l"
-piece_pack(); piece_append("&lt;<TagAny>*</TagAny>&gt;"); ++piece0; return ~TAG_ANY; /*return TAG_ANY;*/
+#line 367 "src/scan-gram.l"
+return TAG_ANY;
        YY_BREAK
 case 76:
 YY_RULE_SETUP
-#line 360 "src/scan-gram.l"
-piece_pack(); piece_append("&lt;<TagNone />&gt;"); ++piece0; return ~TAG_NONE; /*return TAG_NONE;*/
+#line 368 "src/scan-gram.l"
+return TAG_NONE;
        YY_BREAK
 case 77:
 YY_RULE_SETUP
-#line 361 "src/scan-gram.l"
+#line 369 "src/scan-gram.l"
 {
     nesting = 0;
     token_start = loc->start;
     BEGIN SC_TAG;
flush();
piece_pack();
  piece_append("<Tag>");
   }
        YY_BREAK
 case 78:
 YY_RULE_SETUP
-#line 369 "src/scan-gram.l"
+#line 377 "src/scan-gram.l"
 {
     static int percent_percent_count;
     if (++percent_percent_count == 2)
@@ -2153,7 +2161,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 79:
 YY_RULE_SETUP
-#line 376 "src/scan-gram.l"
+#line 384 "src/scan-gram.l"
 {
     bracketed_id_str = NULL;
     bracketed_id_start = loc->start;
@@ -2163,7 +2171,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 80:
 YY_RULE_SETUP
-#line 383 "src/scan-gram.l"
+#line 391 "src/scan-gram.l"
 {
     complain (loc, complaint, "%s: %s",
               ngettext ("invalid character", "invalid characters", gram_leng),
@@ -2171,7 +2179,7 @@ YY_RULE_SETUP
   }
        YY_BREAK
 case YY_STATE_EOF(INITIAL):
-#line 389 "src/scan-gram.l"
+#line 397 "src/scan-gram.l"
 {
     loc->start = loc->end = scanner_cursor;
     yyterminate ();
@@ -2186,7 +2194,7 @@ case YY_STATE_EOF(INITIAL):
 
 case 81:
 YY_RULE_SETUP
-#line 403 "src/scan-gram.l"
+#line 411 "src/scan-gram.l"
 complain (loc, complaint, _("invalid null character"));
        YY_BREAK
 
@@ -2197,7 +2205,7 @@ complain (loc, complaint, _("invalid null character"));
 
 case 82:
 YY_RULE_SETUP
-#line 413 "src/scan-gram.l"
+#line 421 "src/scan-gram.l"
 {
     if (bracketed_id_str) /* SHOULDN'T THIS BE if (!bracketed_id_str) ??? */
       {
@@ -2216,7 +2224,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 83:
 YY_RULE_SETUP
-#line 428 "src/scan-gram.l"
+#line 436 "src/scan-gram.l"
 {
     BEGIN (bracketed_id_str ? SC_RETURN_BRACKETED_ID : INITIAL);
     *loc = id_loc;
@@ -2230,7 +2238,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 84:
 YY_RULE_SETUP
-#line 438 "src/scan-gram.l"
+#line 446 "src/scan-gram.l"
 {
     ROLLBACK_CURRENT_TOKEN;
     BEGIN (bracketed_id_str ? SC_RETURN_BRACKETED_ID : INITIAL);
@@ -2243,7 +2251,7 @@ YY_RULE_SETUP
   }
        YY_BREAK
 case YY_STATE_EOF(SC_AFTER_IDENTIFIER):
-#line 448 "src/scan-gram.l"
+#line 456 "src/scan-gram.l"
 {
     BEGIN (bracketed_id_str ? SC_RETURN_BRACKETED_ID : INITIAL);
     *loc = id_loc;
@@ -2262,7 +2270,7 @@ case YY_STATE_EOF(SC_AFTER_IDENTIFIER):
 
 case 85:
 YY_RULE_SETUP
-#line 465 "src/scan-gram.l"
+#line 473 "src/scan-gram.l"
 {
     if (bracketed_id_str)
       {
@@ -2279,7 +2287,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 86:
 YY_RULE_SETUP
-#line 478 "src/scan-gram.l"
+#line 486 "src/scan-gram.l"
 {
     BEGIN bracketed_id_context_state;
     if (bracketed_id_str)
@@ -2298,7 +2306,7 @@ YY_RULE_SETUP
        YY_BREAK
 case 87:
 YY_RULE_SETUP
-#line 494 "src/scan-gram.l"
+#line 502 "src/scan-gram.l"
 {
     complain (loc, complaint, "%s: %s",
               ngettext ("invalid character in bracketed name",
@@ -2307,7 +2315,7 @@ YY_RULE_SETUP
   }
        YY_BREAK
 case YY_STATE_EOF(SC_BRACKETED_ID):
-#line 501 "src/scan-gram.l"
+#line 509 "src/scan-gram.l"
 {
     BEGIN bracketed_id_context_state;
     unexpected_eof (bracketed_id_start, "]");
@@ -2318,7 +2326,7 @@ case YY_STATE_EOF(SC_BRACKETED_ID):
 
 case 88:
 YY_RULE_SETUP
-#line 509 "src/scan-gram.l"
+#line 517 "src/scan-gram.l"
 {
     ROLLBACK_CURRENT_TOKEN;
     val->uniqstr = bracketed_id_str;
@@ -2336,17 +2344,17 @@ YY_RULE_SETUP
 
 case 89:
 YY_RULE_SETUP
-#line 526 "src/scan-gram.l"
+#line 534 "src/scan-gram.l"
 BEGIN context_state;
        YY_BREAK
 case 90:
 /* rule 90 can match eol */
 YY_RULE_SETUP
-#line 527 "src/scan-gram.l"
+#line 535 "src/scan-gram.l"
 continue;
        YY_BREAK
 case YY_STATE_EOF(SC_YACC_COMMENT):
-#line 528 "src/scan-gram.l"
+#line 536 "src/scan-gram.l"
 unexpected_eof (token_start, "*/"); BEGIN context_state;
        YY_BREAK
 
@@ -2358,11 +2366,11 @@ unexpected_eof (token_start, "*/"); BEGIN context_state;
 case 91:
 /* rule 91 can match eol */
 YY_RULE_SETUP
-#line 538 "src/scan-gram.l"
+#line 546 "src/scan-gram.l"
 STRING_GROW; BEGIN context_state;
        YY_BREAK
 case YY_STATE_EOF(SC_COMMENT):
-#line 539 "src/scan-gram.l"
+#line 547 "src/scan-gram.l"
 unexpected_eof (token_start, "*/"); BEGIN context_state;
        YY_BREAK
 
@@ -2374,17 +2382,17 @@ unexpected_eof (token_start, "*/"); BEGIN context_state;
 case 92:
 /* rule 92 can match eol */
 YY_RULE_SETUP
-#line 549 "src/scan-gram.l"
+#line 557 "src/scan-gram.l"
 STRING_GROW; BEGIN context_state;
        YY_BREAK
 case 93:
 /* rule 93 can match eol */
 YY_RULE_SETUP
-#line 550 "src/scan-gram.l"
+#line 558 "src/scan-gram.l"
 STRING_GROW;
        YY_BREAK
 case YY_STATE_EOF(SC_LINE_COMMENT):
-#line 551 "src/scan-gram.l"
+#line 559 "src/scan-gram.l"
 BEGIN context_state;
        YY_BREAK
 
@@ -2396,24 +2404,31 @@ BEGIN context_state;
 
 case 94:
 YY_RULE_SETUP
-#line 562 "src/scan-gram.l"
+#line 570 "src/scan-gram.l"
 {
     STRING_FINISH;
     loc->start = token_start;
     val->code = last_string;
     BEGIN INITIAL;
- piece_append("</EscapedString>");
+#if 1
+ flush_text();
+ piece_esc(gram_text, strlen(gram_text));
+ piece_append("</PYACC_String>");
+ piece_pack();
+ return ~STRING;
+#else
     return STRING;
+#endif
   }
        YY_BREAK
 case YY_STATE_EOF(SC_ESCAPED_STRING):
-#line 570 "src/scan-gram.l"
+#line 585 "src/scan-gram.l"
 unexpected_eof (token_start, "\"");
        YY_BREAK
 case 95:
 /* rule 95 can match eol */
 YY_RULE_SETUP
-#line 571 "src/scan-gram.l"
+#line 586 "src/scan-gram.l"
 unexpected_newline (token_start, "\"");
        YY_BREAK
 
@@ -2425,7 +2440,7 @@ unexpected_newline (token_start, "\"");
 
 case 96:
 YY_RULE_SETUP
-#line 581 "src/scan-gram.l"
+#line 596 "src/scan-gram.l"
 {
     STRING_FINISH;
     loc->start = token_start;
@@ -2443,18 +2458,25 @@ YY_RULE_SETUP
                 _("extra characters in character literal"));
     STRING_FREE;
     BEGIN INITIAL;
- piece_append("</EscapedCharacter>");
+#if 1
+ flush_text();
+ piece_esc(gram_text, strlen(gram_text));
+ piece_append("</PYACC_Char>");
+ piece_pack();
+ return ~CHAR;
+#else
     return CHAR;
+#endif
   }
        YY_BREAK
 case 97:
 /* rule 97 can match eol */
 YY_RULE_SETUP
-#line 601 "src/scan-gram.l"
+#line 623 "src/scan-gram.l"
 unexpected_newline (token_start, "'");
        YY_BREAK
 case YY_STATE_EOF(SC_ESCAPED_CHARACTER):
-#line 602 "src/scan-gram.l"
+#line 624 "src/scan-gram.l"
 unexpected_eof (token_start, "'");
        YY_BREAK
 
@@ -2465,7 +2487,7 @@ unexpected_eof (token_start, "'");
 
 case 98:
 YY_RULE_SETUP
-#line 613 "src/scan-gram.l"
+#line 635 "src/scan-gram.l"
 {
     --nesting;
     if (nesting < 0)
@@ -2475,8 +2497,14 @@ YY_RULE_SETUP
         val->uniqstr = uniqstr_new (last_string);
         STRING_FREE;
         BEGIN INITIAL;
+#if 1
+ piece_esc(gram_text, strlen(gram_text));
  piece_append("</Tag>");
+ piece_pack();
+ return ~TAG;
+#else
         return TAG;
+#endif
       }
     STRING_GROW;
   }
@@ -2484,16 +2512,16 @@ YY_RULE_SETUP
 case 99:
 /* rule 99 can match eol */
 YY_RULE_SETUP
-#line 628 "src/scan-gram.l"
+#line 656 "src/scan-gram.l"
 STRING_GROW;
        YY_BREAK
 case 100:
 YY_RULE_SETUP
-#line 629 "src/scan-gram.l"
+#line 657 "src/scan-gram.l"
 STRING_GROW; nesting += gram_leng;
        YY_BREAK
 case YY_STATE_EOF(SC_TAG):
-#line 631 "src/scan-gram.l"
+#line 659 "src/scan-gram.l"
 unexpected_eof (token_start, ">");
        YY_BREAK
 
@@ -2504,7 +2532,7 @@ unexpected_eof (token_start, ">");
 
 case 101:
 YY_RULE_SETUP
-#line 640 "src/scan-gram.l"
+#line 668 "src/scan-gram.l"
 {
     unsigned long int c = strtoul (gram_text + 1, NULL, 8);
     if (!c || UCHAR_MAX < c)
@@ -2513,16 +2541,17 @@ YY_RULE_SETUP
     else
  {
       obstack_1grow (&obstack_for_string, c);
-  sprintf(piece_temp, "<Escape char=\"%d\">", (int)c);
+  flush_text();
+  sprintf(piece_temp, "<PYACC_Escape char=\"%d\">", (int)c);
   piece_append(piece_temp);
   flush();
-  piece_append("</Escape>"); 
+  piece_append("</PYACC_Escape>"); 
  }
   }
        YY_BREAK
 case 102:
 YY_RULE_SETUP
-#line 655 "src/scan-gram.l"
+#line 684 "src/scan-gram.l"
 {
     verify (UCHAR_MAX < ULONG_MAX);
     unsigned long int c = strtoul (gram_text + 2, NULL, 16);
@@ -2532,57 +2561,58 @@ YY_RULE_SETUP
     else
  {
       obstack_1grow (&obstack_for_string, c);
-  sprintf(piece_temp, "<Escape char=\"%d\">", (int)c);
+  flush_text();
+  sprintf(piece_temp, "<PYACC_Escape char=\"%d\">", (int)c);
   piece_append(piece_temp);
   flush();
-  piece_append("</Escape>"); 
+  piece_append("</PYACC_Escape>"); 
  }
   }
        YY_BREAK
 case 103:
 YY_RULE_SETUP
-#line 671 "src/scan-gram.l"
-obstack_1grow (&obstack_for_string, '\a'); piece_append("<Escape char=\"7\">"); flush(); piece_append("</Escape>");
+#line 701 "src/scan-gram.l"
+obstack_1grow (&obstack_for_string, '\a'); flush_text(); piece_append("<PYACC_Escape char=\"7\">"); flush(); piece_append("</PYACC_Escape>");
        YY_BREAK
 case 104:
 YY_RULE_SETUP
-#line 672 "src/scan-gram.l"
-obstack_1grow (&obstack_for_string, '\b'); piece_append("<Escape char=\"8\">"); flush(); piece_append("</Escape>");
+#line 702 "src/scan-gram.l"
+obstack_1grow (&obstack_for_string, '\b'); flush_text(); piece_append("<PYACC_Escape char=\"8\">"); flush(); piece_append("</PYACC_Escape>");
        YY_BREAK
 case 105:
 YY_RULE_SETUP
-#line 673 "src/scan-gram.l"
-obstack_1grow (&obstack_for_string, '\f'); piece_append("<Escape char=\"12\">"); flush(); piece_append("</Escape>");
+#line 703 "src/scan-gram.l"
+obstack_1grow (&obstack_for_string, '\f'); flush_text(); piece_append("<PYACC_Escape char=\"12\">"); flush(); piece_append("</PYACC_Escape>");
        YY_BREAK
 case 106:
 YY_RULE_SETUP
-#line 674 "src/scan-gram.l"
-obstack_1grow (&obstack_for_string, '\n'); piece_append("<Escape char=\"10\">"); flush(); piece_append("</Escape>");
+#line 704 "src/scan-gram.l"
+obstack_1grow (&obstack_for_string, '\n'); flush_text(); piece_append("<PYACC_Escape char=\"10\">"); flush(); piece_append("</PYACC_Escape>");
        YY_BREAK
 case 107:
 YY_RULE_SETUP
-#line 675 "src/scan-gram.l"
-obstack_1grow (&obstack_for_string, '\r'); piece_append("<Escape char=\"13\">"); flush(); piece_append("</Escape>");
+#line 705 "src/scan-gram.l"
+obstack_1grow (&obstack_for_string, '\r'); flush_text(); piece_append("<PYACC_Escape char=\"13\">"); flush(); piece_append("</PYACC_Escape>");
        YY_BREAK
 case 108:
 YY_RULE_SETUP
-#line 676 "src/scan-gram.l"
-obstack_1grow (&obstack_for_string, '\t'); piece_append("<Escape char=\"9\">"); flush(); piece_append("</Escape>");
+#line 706 "src/scan-gram.l"
+obstack_1grow (&obstack_for_string, '\t'); flush_text(); piece_append("<PYACC_Escape char=\"9\">"); flush(); piece_append("</PYACC_Escape>");
        YY_BREAK
 case 109:
 YY_RULE_SETUP
-#line 677 "src/scan-gram.l"
-obstack_1grow (&obstack_for_string, '\v'); piece_append("<Escape char=\"11\">"); flush(); piece_append("</Escape>");
+#line 707 "src/scan-gram.l"
+obstack_1grow (&obstack_for_string, '\v'); flush_text(); piece_append("<PYACC_Escape char=\"11\">"); flush(); piece_append("</PYACC_Escape>");
        YY_BREAK
 /* \\[\"\'?\\] would be shorter, but it confuses xgettext.  */
 case 110:
 YY_RULE_SETUP
-#line 680 "src/scan-gram.l"
-obstack_1grow (&obstack_for_string, gram_text[1]); sprintf(piece_temp, "<Escape char=\"%d\">", gram_text[1]); piece_append(piece_temp); flush(); piece_append("</Escape>"); 
+#line 710 "src/scan-gram.l"
+obstack_1grow (&obstack_for_string, gram_text[1]); flush_text(); sprintf(piece_temp, "<PYACC_Escape char=\"%d\">", gram_text[1]); piece_append(piece_temp); flush(); piece_append("</PYACC_Escape>"); 
        YY_BREAK
 case 111:
 YY_RULE_SETUP
-#line 682 "src/scan-gram.l"
+#line 712 "src/scan-gram.l"
 {
     int c = convert_ucn_to_byte (gram_text);
     if (c <= 0)
@@ -2591,17 +2621,18 @@ YY_RULE_SETUP
     else
  {
       obstack_1grow (&obstack_for_string, c);
-  sprintf(piece_temp, "<Escape char=\"%d\">", c);
+  flush_text();
+  sprintf(piece_temp, "<PYACC_Escape char=\"%d\">", c);
   piece_append(piece_temp);
   flush();
-  piece_append("</Escape>"); 
+  piece_append("</PYACC_Escape>"); 
  }
   }
        YY_BREAK
 case 112:
 /* rule 112 can match eol */
 YY_RULE_SETUP
-#line 696 "src/scan-gram.l"
+#line 727 "src/scan-gram.l"
 {
     char const *p = gram_text + 1;
     /* Quote only if escaping won't make the character visible.  */
@@ -2611,6 +2642,10 @@ YY_RULE_SETUP
       p = quotearg_style_mem (escape_quoting_style, p, 1);
     complain (loc, complaint, _("invalid character after \\-escape: %s"),
                  p);
+ if (in_text == 0) {
+  piece_append("<PYACC_Text>");
+  in_text = 1;
+ }
   }
        YY_BREAK
 
@@ -2622,7 +2657,7 @@ YY_RULE_SETUP
 case 113:
 /* rule 113 can match eol */
 YY_RULE_SETUP
-#line 714 "src/scan-gram.l"
+#line 749 "src/scan-gram.l"
 STRING_GROW;
        YY_BREAK
 
@@ -2630,17 +2665,17 @@ STRING_GROW;
 
 case 114:
 YY_RULE_SETUP
-#line 719 "src/scan-gram.l"
-STRING_GROW; BEGIN context_state; /*piece_append("</Character>");*/
+#line 754 "src/scan-gram.l"
+STRING_GROW; BEGIN context_state;
        YY_BREAK
 case 115:
 /* rule 115 can match eol */
 YY_RULE_SETUP
-#line 720 "src/scan-gram.l"
+#line 755 "src/scan-gram.l"
 unexpected_newline (token_start, "'");
        YY_BREAK
 case YY_STATE_EOF(SC_CHARACTER):
-#line 721 "src/scan-gram.l"
+#line 756 "src/scan-gram.l"
 unexpected_eof (token_start, "'");
        YY_BREAK
 
@@ -2648,17 +2683,17 @@ unexpected_eof (token_start, "'");
 
 case 116:
 YY_RULE_SETUP
-#line 726 "src/scan-gram.l"
-STRING_GROW; BEGIN context_state; /*piece_append("</String>");*/
+#line 761 "src/scan-gram.l"
+STRING_GROW; BEGIN context_state;
        YY_BREAK
 case 117:
 /* rule 117 can match eol */
 YY_RULE_SETUP
-#line 727 "src/scan-gram.l"
+#line 762 "src/scan-gram.l"
 unexpected_newline (token_start, "\"");
        YY_BREAK
 case YY_STATE_EOF(SC_STRING):
-#line 728 "src/scan-gram.l"
+#line 763 "src/scan-gram.l"
 unexpected_eof (token_start, "\"");
        YY_BREAK
 
@@ -2669,32 +2704,28 @@ unexpected_eof (token_start, "\"");
 
 case 118:
 YY_RULE_SETUP
-#line 738 "src/scan-gram.l"
+#line 773 "src/scan-gram.l"
 {
     STRING_GROW;
     context_state = YY_START;
     token_start = loc->start;
- /*flush();
- piece_append("<Character>");*/
     BEGIN SC_CHARACTER;
   }
        YY_BREAK
 case 119:
 YY_RULE_SETUP
-#line 746 "src/scan-gram.l"
+#line 779 "src/scan-gram.l"
 {
     STRING_GROW;
     context_state = YY_START;
     token_start = loc->start;
- /*flush();
- piece_append("<String>");*/
     BEGIN SC_STRING;
   }
        YY_BREAK
 case 120:
 /* rule 120 can match eol */
 YY_RULE_SETUP
-#line 754 "src/scan-gram.l"
+#line 785 "src/scan-gram.l"
 {
     STRING_GROW;
     context_state = YY_START;
@@ -2705,7 +2736,7 @@ YY_RULE_SETUP
 case 121:
 /* rule 121 can match eol */
 YY_RULE_SETUP
-#line 760 "src/scan-gram.l"
+#line 791 "src/scan-gram.l"
 {
     STRING_GROW;
     context_state = YY_START;
@@ -2722,13 +2753,13 @@ YY_RULE_SETUP
 case 122:
 /* rule 122 can match eol */
 YY_RULE_SETUP
-#line 776 "src/scan-gram.l"
+#line 807 "src/scan-gram.l"
 STRING_GROW; nesting++;
        YY_BREAK
 case 123:
 /* rule 123 can match eol */
 YY_RULE_SETUP
-#line 777 "src/scan-gram.l"
+#line 808 "src/scan-gram.l"
 STRING_GROW; nesting--;
        YY_BREAK
 /* Tokenize '<<%' correctly (as '<<' '%') rather than incorrrectly
@@ -2736,12 +2767,12 @@ STRING_GROW; nesting--;
 case 124:
 /* rule 124 can match eol */
 YY_RULE_SETUP
-#line 781 "src/scan-gram.l"
+#line 812 "src/scan-gram.l"
 STRING_GROW;
        YY_BREAK
 case YY_STATE_EOF(SC_BRACED_CODE):
 case YY_STATE_EOF(SC_PREDICATE):
-#line 783 "src/scan-gram.l"
+#line 814 "src/scan-gram.l"
 unexpected_eof (code_start, "}");
        YY_BREAK
 
@@ -2749,7 +2780,7 @@ unexpected_eof (code_start, "}");
 
 case 125:
 YY_RULE_SETUP
-#line 788 "src/scan-gram.l"
+#line 819 "src/scan-gram.l"
 {
     obstack_1grow (&obstack_for_string, '}');
 
@@ -2760,8 +2791,15 @@ YY_RULE_SETUP
         loc->start = code_start;
         val->code = last_string;
         BEGIN INITIAL;
- piece_append("</BracedCode>"); 
+#if 1
+ piece_append("</PYACC_Text>");
+ piece_esc(gram_text, strlen(gram_text));
+ piece_append("</PYACC_BracedCode>");
+ piece_pack();
+ return ~BRACED_CODE;
+#else
         return BRACED_CODE;
+#endif
       }
   }
        YY_BREAK
@@ -2770,7 +2808,7 @@ YY_RULE_SETUP
 
 case 126:
 YY_RULE_SETUP
-#line 806 "src/scan-gram.l"
+#line 844 "src/scan-gram.l"
 {
     --nesting;
     if (nesting < 0)
@@ -2779,8 +2817,15 @@ YY_RULE_SETUP
         loc->start = code_start;
         val->code = last_string;
         BEGIN INITIAL;
- piece_append("</Predicate>");
+#if 1
+ piece_append("</PYACC_Text>");
+ piece_esc(gram_text, strlen(gram_text));
+ piece_append("</PYACC_BracedPredicate>");
+ piece_pack();
+ return ~BRACED_PREDICATE;
+#else
         return BRACED_PREDICATE;
+#endif
       }
     else
       obstack_1grow (&obstack_for_string, '}');
@@ -2794,18 +2839,25 @@ YY_RULE_SETUP
 
 case 127:
 YY_RULE_SETUP
-#line 828 "src/scan-gram.l"
+#line 873 "src/scan-gram.l"
 {
     STRING_FINISH;
     loc->start = code_start;
     val->code = last_string;
     BEGIN INITIAL;
- piece_append("</Prologue>");
+#if 1
+ piece_append("</PYACC_Text>");
+ piece_esc(gram_text, strlen(gram_text));
+ piece_append("</PYACC_Section1_Prologue>");
+ piece_pack();
+ return ~PROLOGUE;
+#else
     return PROLOGUE;
+#endif
   }
        YY_BREAK
 case YY_STATE_EOF(SC_PROLOGUE):
-#line 837 "src/scan-gram.l"
+#line 889 "src/scan-gram.l"
 unexpected_eof (code_start, "%}");
        YY_BREAK
 
@@ -2816,7 +2868,7 @@ unexpected_eof (code_start, "%}");
 
 
 case YY_STATE_EOF(SC_EPILOGUE):
-#line 848 "src/scan-gram.l"
+#line 900 "src/scan-gram.l"
 {
     STRING_FINISH;
     loc->start = code_start;
@@ -2830,19 +2882,19 @@ case YY_STATE_EOF(SC_EPILOGUE):
   | By default, grow the string obstack with the input.  |
   `-----------------------------------------------------*/
 case 128:
-#line 863 "src/scan-gram.l"
+#line 915 "src/scan-gram.l"
 case 129:
 /* rule 129 can match eol */
 YY_RULE_SETUP
-#line 863 "src/scan-gram.l"
+#line 915 "src/scan-gram.l"
 STRING_GROW;
        YY_BREAK
 case 130:
 YY_RULE_SETUP
-#line 865 "src/scan-gram.l"
+#line 917 "src/scan-gram.l"
 YY_FATAL_ERROR( "flex scanner jammed" );
        YY_BREAK
-#line 2734 "src/scan-gram.c"
+#line 2786 "src/scan-gram.c"
 case YY_STATE_EOF(SC_RETURN_BRACKETED_ID):
        yyterminate();
 
@@ -3976,7 +4028,7 @@ void gram_free (void * ptr )
 
 /* %ok-for-header */
 
-#line 865 "src/scan-gram.l"
+#line 917 "src/scan-gram.l"
 
 
 
@@ -4207,3 +4259,11 @@ gram_scanner_free (void)
   gram_lex_destroy ();
 }
 
+/* Nick */
+static void flush_text(void) {
+ if (in_text) {
+  piece_append("</PYACC_Text>");
+  in_text = 0;
+ }
+}
+
index 7f65772..b553121 100644 (file)
@@ -101,6 +101,10 @@ static int convert_ucn_to_byte (char const *hex_text);
 static void unexpected_eof (boundary, char const *);
 static void unexpected_newline (boundary, char const *);
 
+/* Nick */
+static int in_text;
+static void flush_text(void);
+
 %}
  /* A C-like comment in directives/rules. */
 %x SC_YACC_COMMENT
@@ -286,9 +290,9 @@ eqopt    ([[:space:]]*=)?
     bracketed_id_str = NULL;
     BEGIN SC_AFTER_IDENTIFIER;
  piece_pack();
- piece_append("<Id>");
+ piece_append("<PYACC_ID>");
  flush();
- piece_append("</Id>");
+ piece_append("</PYACC_ID>");
  piece_pack();
   }
 
@@ -296,10 +300,10 @@ eqopt    ([[:space:]]*=)?
     val->integer = scan_integer (yytext, 10, *loc);
 #if 1
  piece_pack();
- sprintf(piece_temp, "<Int value=\"%d\">", val->integer);
+ sprintf(piece_temp, "<PYACC_Int value=\"%d\">", val->integer);
  piece_append(piece_temp);
  piece_esc(yytext, yy_c_buf_p - yytext);
- piece_append("</Int>");
+ piece_append("</PYACC_Int>");
  piece_pack();
  return ~INT;
 #else
@@ -310,10 +314,10 @@ eqopt    ([[:space:]]*=)?
     val->integer = scan_integer (yytext, 16, *loc);
 #if 1
  piece_pack();
- sprintf(piece_temp, "<Int value=\"%d\">", val->integer);
+ sprintf(piece_temp, "<PYACC_Int value=\"%d\">", val->integer);
  piece_append(piece_temp);
  piece_esc(yytext, yy_c_buf_p - yytext);
- piece_append("</Integer>");
+ piece_append("</PYACC_Int>");
  piece_pack();
  return ~INT;
 #else
@@ -328,13 +332,13 @@ eqopt    ([[:space:]]*=)?
   }
 
   /* Characters.  */
-  "'"         token_start = loc->start; BEGIN SC_ESCAPED_CHARACTER; flush(); piece_append("<EscapedCharacter>");
+  "'"         token_start = loc->start; BEGIN SC_ESCAPED_CHARACTER; piece_pack(); piece_append("<PYACC_Char>"); in_text = 0;
 
   /* Strings. */
-  "\""        token_start = loc->start; BEGIN SC_ESCAPED_STRING; flush(); piece_append("<EscapedString>");
+  "\""        token_start = loc->start; BEGIN SC_ESCAPED_STRING; piece_pack(); piece_append("<PYACC_String>"); in_text = 0;
 
   /* Prologue. */
-  "%{"        code_start = loc->start; BEGIN SC_PROLOGUE; flush(); piece_append("<Prologue>");
+  "%{"        code_start = loc->start; BEGIN SC_PROLOGUE; piece_pack(); piece_append("<PYACC_Section1_Prologue>"); flush(); piece_append("<PYACC_Text>");
 
   /* Code in between braces.  */
   "{" {
@@ -342,27 +346,31 @@ eqopt    ([[:space:]]*=)?
     nesting = 0;
     code_start = loc->start;
     BEGIN SC_BRACED_CODE;
+ piece_pack();
+ piece_append("<PYACC_BracedCode>");
  flush();
- piece_append("<BracedCode>");
+ piece_append("<PYACC_Text>");
   }
 
   /* Semantic predicate. */
   "%?"[ \f\n\t\v]*"{" {
     nesting = 0;
     code_start = loc->start;
+ piece_pack();
+ piece_append("<PYACC_BracedPredicate>");
  flush();
- piece_append("<Predicate>");
+ piece_append("<PYACC_Text>");
     BEGIN SC_PREDICATE;
   }
 
   /* A type. */
-  "<*>"       piece_pack(); piece_append("&lt;<TagAny>*</TagAny>&gt;"); ++piece0; return ~TAG_ANY; /*return TAG_ANY;*/
-  "<>"        piece_pack(); piece_append("&lt;<TagNone />&gt;"); ++piece0; return ~TAG_NONE; /*return TAG_NONE;*/
+  "<*>"       return TAG_ANY;
+  "<>"        return TAG_NONE;
   "<"         {
     nesting = 0;
     token_start = loc->start;
     BEGIN SC_TAG;
flush();
piece_pack();
  piece_append("<Tag>");
   }
 
@@ -564,8 +572,15 @@ eqopt    ([[:space:]]*=)?
     loc->start = token_start;
     val->code = last_string;
     BEGIN INITIAL;
- piece_append("</EscapedString>");
+#if 1
+ flush_text();
+ piece_esc(yytext, strlen(yytext));
+ piece_append("</PYACC_String>");
+ piece_pack();
+ return ~STRING;
+#else
     return STRING;
+#endif
   }
   <<EOF>>   unexpected_eof (token_start, "\"");
   "\n"      unexpected_newline (token_start, "\"");
@@ -595,8 +610,15 @@ eqopt    ([[:space:]]*=)?
                 _("extra characters in character literal"));
     STRING_FREE;
     BEGIN INITIAL;
- piece_append("</EscapedCharacter>");
+#if 1
+ flush_text();
+ piece_esc(yytext, strlen(yytext));
+ piece_append("</PYACC_Char>");
+ piece_pack();
+ return ~CHAR;
+#else
     return CHAR;
+#endif
   }
   "\n"      unexpected_newline (token_start, "'");
   <<EOF>>   unexpected_eof (token_start, "'");
@@ -619,8 +641,14 @@ eqopt    ([[:space:]]*=)?
         val->uniqstr = uniqstr_new (last_string);
         STRING_FREE;
         BEGIN INITIAL;
+#if 1
+ piece_esc(yytext, strlen(yytext));
  piece_append("</Tag>");
+ piece_pack();
+ return ~TAG;
+#else
         return TAG;
+#endif
       }
     STRING_GROW;
   }
@@ -645,10 +673,11 @@ eqopt    ([[:space:]]*=)?
     else
  {
       obstack_1grow (&obstack_for_string, c);
-  sprintf(piece_temp, "<Escape char=\"%d\">", (int)c);
+  flush_text();
+  sprintf(piece_temp, "<PYACC_Escape char=\"%d\">", (int)c);
   piece_append(piece_temp);
   flush();
-  piece_append("</Escape>"); 
+  piece_append("</PYACC_Escape>"); 
  }
   }
 
@@ -661,23 +690,24 @@ eqopt    ([[:space:]]*=)?
     else
  {
       obstack_1grow (&obstack_for_string, c);
-  sprintf(piece_temp, "<Escape char=\"%d\">", (int)c);
+  flush_text();
+  sprintf(piece_temp, "<PYACC_Escape char=\"%d\">", (int)c);
   piece_append(piece_temp);
   flush();
-  piece_append("</Escape>"); 
+  piece_append("</PYACC_Escape>"); 
  }
   }
 
-  \\a   obstack_1grow (&obstack_for_string, '\a'); piece_append("<Escape char=\"7\">"); flush(); piece_append("</Escape>");
-  \\b   obstack_1grow (&obstack_for_string, '\b'); piece_append("<Escape char=\"8\">"); flush(); piece_append("</Escape>");
-  \\f   obstack_1grow (&obstack_for_string, '\f'); piece_append("<Escape char=\"12\">"); flush(); piece_append("</Escape>");
-  \\n   obstack_1grow (&obstack_for_string, '\n'); piece_append("<Escape char=\"10\">"); flush(); piece_append("</Escape>");
-  \\r   obstack_1grow (&obstack_for_string, '\r'); piece_append("<Escape char=\"13\">"); flush(); piece_append("</Escape>");
-  \\t   obstack_1grow (&obstack_for_string, '\t'); piece_append("<Escape char=\"9\">"); flush(); piece_append("</Escape>");
-  \\v   obstack_1grow (&obstack_for_string, '\v'); piece_append("<Escape char=\"11\">"); flush(); piece_append("</Escape>");
+  \\a   obstack_1grow (&obstack_for_string, '\a'); flush_text(); piece_append("<PYACC_Escape char=\"7\">"); flush(); piece_append("</PYACC_Escape>");
+  \\b   obstack_1grow (&obstack_for_string, '\b'); flush_text(); piece_append("<PYACC_Escape char=\"8\">"); flush(); piece_append("</PYACC_Escape>");
+  \\f   obstack_1grow (&obstack_for_string, '\f'); flush_text(); piece_append("<PYACC_Escape char=\"12\">"); flush(); piece_append("</PYACC_Escape>");
+  \\n   obstack_1grow (&obstack_for_string, '\n'); flush_text(); piece_append("<PYACC_Escape char=\"10\">"); flush(); piece_append("</PYACC_Escape>");
+  \\r   obstack_1grow (&obstack_for_string, '\r'); flush_text(); piece_append("<PYACC_Escape char=\"13\">"); flush(); piece_append("</PYACC_Escape>");
+  \\t   obstack_1grow (&obstack_for_string, '\t'); flush_text(); piece_append("<PYACC_Escape char=\"9\">"); flush(); piece_append("</PYACC_Escape>");
+  \\v   obstack_1grow (&obstack_for_string, '\v'); flush_text(); piece_append("<PYACC_Escape char=\"11\">"); flush(); piece_append("</PYACC_Escape>");
 
   /* \\[\"\'?\\] would be shorter, but it confuses xgettext.  */
-  \\("\""|"'"|"?"|"\\")  obstack_1grow (&obstack_for_string, yytext[1]); sprintf(piece_temp, "<Escape char=\"%d\">", yytext[1]); piece_append(piece_temp); flush(); piece_append("</Escape>"); 
+  \\("\""|"'"|"?"|"\\")  obstack_1grow (&obstack_for_string, yytext[1]); flush_text(); sprintf(piece_temp, "<PYACC_Escape char=\"%d\">", yytext[1]); piece_append(piece_temp); flush(); piece_append("</PYACC_Escape>"); 
  
   \\(u|U[0-9abcdefABCDEF]{4})[0-9abcdefABCDEF]{4} {
     int c = convert_ucn_to_byte (yytext);
@@ -687,10 +717,11 @@ eqopt    ([[:space:]]*=)?
     else
  {
       obstack_1grow (&obstack_for_string, c);
-  sprintf(piece_temp, "<Escape char=\"%d\">", c);
+  flush_text();
+  sprintf(piece_temp, "<PYACC_Escape char=\"%d\">", c);
   piece_append(piece_temp);
   flush();
-  piece_append("</Escape>"); 
+  piece_append("</PYACC_Escape>"); 
  }
   }
   \\(.|\n)      {
@@ -702,6 +733,10 @@ eqopt    ([[:space:]]*=)?
       p = quotearg_style_mem (escape_quoting_style, p, 1);
     complain (loc, complaint, _("invalid character after \\-escape: %s"),
                  p);
+ if (in_text == 0) {
+  piece_append("<PYACC_Text>");
+  in_text = 1;
+ }
   }
 }
 
@@ -716,14 +751,14 @@ eqopt    ([[:space:]]*=)?
 
 <SC_CHARACTER>
 {
-  "'"           STRING_GROW; BEGIN context_state; /*piece_append("</Character>");*/
+  "'"           STRING_GROW; BEGIN context_state;
   \n            unexpected_newline (token_start, "'");
   <<EOF>>       unexpected_eof (token_start, "'");
 }
 
 <SC_STRING>
 {
-  "\""          STRING_GROW; BEGIN context_state; /*piece_append("</String>");*/
+  "\""          STRING_GROW; BEGIN context_state;
   \n            unexpected_newline (token_start, "\"");
   <<EOF>>       unexpected_eof (token_start, "\"");
 }
@@ -739,16 +774,12 @@ eqopt    ([[:space:]]*=)?
     STRING_GROW;
     context_state = YY_START;
     token_start = loc->start;
- /*flush();
- piece_append("<Character>");*/
     BEGIN SC_CHARACTER;
   }
   "\"" {
     STRING_GROW;
     context_state = YY_START;
     token_start = loc->start;
- /*flush();
- piece_append("<String>");*/
     BEGIN SC_STRING;
   }
   "/"{splice}"*" {
@@ -795,8 +826,15 @@ eqopt    ([[:space:]]*=)?
         loc->start = code_start;
         val->code = last_string;
         BEGIN INITIAL;
- piece_append("</BracedCode>"); 
+#if 1
+ piece_append("</PYACC_Text>");
+ piece_esc(yytext, strlen(yytext));
+ piece_append("</PYACC_BracedCode>");
+ piece_pack();
+ return ~BRACED_CODE;
+#else
         return BRACED_CODE;
+#endif
       }
   }
 }
@@ -811,8 +849,15 @@ eqopt    ([[:space:]]*=)?
         loc->start = code_start;
         val->code = last_string;
         BEGIN INITIAL;
- piece_append("</Predicate>");
+#if 1
+ piece_append("</PYACC_Text>");
+ piece_esc(yytext, strlen(yytext));
+ piece_append("</PYACC_BracedPredicate>");
+ piece_pack();
+ return ~BRACED_PREDICATE;
+#else
         return BRACED_PREDICATE;
+#endif
       }
     else
       obstack_1grow (&obstack_for_string, '}');
@@ -830,8 +875,15 @@ eqopt    ([[:space:]]*=)?
     loc->start = code_start;
     val->code = last_string;
     BEGIN INITIAL;
- piece_append("</Prologue>");
+#if 1
+ piece_append("</PYACC_Text>");
+ piece_esc(yytext, strlen(yytext));
+ piece_append("</PYACC_Section1_Prologue>");
+ piece_pack();
+ return ~PROLOGUE;
+#else
     return PROLOGUE;
+#endif
   }
 
   <<EOF>>   unexpected_eof (code_start, "%}");
@@ -1090,3 +1142,11 @@ gram_scanner_free (void)
   /* Reclaim Flex's buffers.  */
   yylex_destroy ();
 }
+
+/* Nick */
+static void flush_text(void) {
+ if (in_text) {
+  piece_append("</PYACC_Text>");
+  in_text = 0;
+ }
+}