+# ifndef yytnamerr
+/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
+ quotes and backslashes, so that it's suitable for yyerror. The
+ heuristic is that double-quoting is unnecessary unless the string
+ contains an apostrophe, a comma, or backslash (other than
+ backslash-backslash). YYSTR is taken from yytname. If YYRES is
+ null, do not copy; instead, return the length of what the result
+ would have been. */
+static YYSIZE_T
+yytnamerr (char *yyres, const char *yystr)
+{
+ if (*yystr == '"')
+ {
+ size_t yyn = 0;
+ char const *yyp = yystr;
+
+ for (;;)
+ switch (*++yyp)
+ {
+ case '\'':
+ case ',':
+ goto do_not_strip_quotes;
+
+ case '\\':
+ if (*++yyp != '\\')
+ goto do_not_strip_quotes;
+ /* Fall through. */
+ default:
+ if (yyres)
+ yyres[yyn] = *yyp;
+ yyn++;
+ break;
+
+ case '"':
+ if (yyres)
+ yyres[yyn] = '\0';
+ return yyn;
+ }
+ do_not_strip_quotes: ;
+ }
+
+ if (! yyres)
+ return yystrlen (yystr);
+
+ return yystpcpy (yyres, yystr) - yyres;
+}
+# endif
+
+#endif /* YYERROR_VERBOSE */
+
+\f
+
+#if YYDEBUG
+/*--------------------------------.
+| Print this symbol on YYOUTPUT. |
+`--------------------------------*/
+
+#if defined (__STDC__) || defined (__cplusplus)
+static void
+yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocationp)
+#else
+static void
+yysymprint (yyoutput, yytype, yyvaluep, yylocationp)
+ FILE *yyoutput;
+ int yytype;
+ YYSTYPE *yyvaluep;
+ YYLTYPE *yylocationp;
+#endif
+{
+ /* Pacify ``unused variable'' warnings. */
+ (void) yyvaluep;
+ (void) yylocationp;
+
+ if (yytype < YYNTOKENS)
+ YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
+ else
+ YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
+
+ YY_LOCATION_PRINT (yyoutput, *yylocationp);
+ YYFPRINTF (yyoutput, ": ");
+
+# ifdef YYPRINT
+ if (yytype < YYNTOKENS)
+ YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+# endif
+ switch (yytype)
+ {
+ case 3: /* "\"string\"" */
+#line 165 "parse-gram.y"
+ { fprintf (stderr, "\"%s\"", (yyvaluep->chars)); };
+#line 1066 "parse-gram.c"
+ break;
+ case 4: /* "\"integer\"" */
+#line 178 "parse-gram.y"
+ { fprintf (stderr, "%d", (yyvaluep->integer)); };
+#line 1071 "parse-gram.c"
+ break;
+ case 8: /* "\"%destructor {...}\"" */
+#line 167 "parse-gram.y"
+ { fprintf (stderr, "{\n%s\n}", (yyvaluep->chars)); };
+#line 1076 "parse-gram.c"
+ break;
+ case 9: /* "\"%printer {...}\"" */
+#line 171 "parse-gram.y"
+ { fprintf (stderr, "{\n%s\n}", (yyvaluep->chars)); };
+#line 1081 "parse-gram.c"
+ break;
+ case 10: /* "\"%union {...}\"" */
+#line 172 "parse-gram.y"
+ { fprintf (stderr, "{\n%s\n}", (yyvaluep->chars)); };
+#line 1086 "parse-gram.c"
+ break;
+ case 26: /* "\"%initial-action {...}\"" */
+#line 168 "parse-gram.y"
+ { fprintf (stderr, "{\n%s\n}", (yyvaluep->chars)); };
+#line 1091 "parse-gram.c"
+ break;
+ case 27: /* "\"%lex-param {...}\"" */
+#line 169 "parse-gram.y"
+ { fprintf (stderr, "{\n%s\n}", (yyvaluep->chars)); };
+#line 1096 "parse-gram.c"
+ break;
+ case 34: /* "\"%parse-param {...}\"" */
+#line 170 "parse-gram.y"
+ { fprintf (stderr, "{\n%s\n}", (yyvaluep->chars)); };
+#line 1101 "parse-gram.c"
+ break;
+ case 41: /* "\"type\"" */
+#line 176 "parse-gram.y"
+ { fprintf (stderr, "<%s>", (yyvaluep->uniqstr)); };
+#line 1106 "parse-gram.c"
+ break;
+ case 45: /* "\"identifier\"" */
+#line 180 "parse-gram.y"
+ { fprintf (stderr, "%s", (yyvaluep->symbol)->tag); };
+#line 1111 "parse-gram.c"
+ break;
+ case 46: /* "\"identifier:\"" */
+#line 182 "parse-gram.y"
+ { fprintf (stderr, "%s:", (yyvaluep->symbol)->tag); };
+#line 1116 "parse-gram.c"
+ break;
+ case 48: /* "\"%{...%}\"" */
+#line 174 "parse-gram.y"
+ { fprintf (stderr, "{\n%s\n}", (yyvaluep->chars)); };
+#line 1121 "parse-gram.c"
+ break;
+ case 49: /* "\"epilogue\"" */
+#line 174 "parse-gram.y"
+ { fprintf (stderr, "{\n%s\n}", (yyvaluep->chars)); };
+#line 1126 "parse-gram.c"
+ break;
+ case 50: /* "\"{...}\"" */
+#line 173 "parse-gram.y"
+ { fprintf (stderr, "{\n%s\n}", (yyvaluep->chars)); };
+#line 1131 "parse-gram.c"
+ break;
+ case 71: /* "symbol" */
+#line 180 "parse-gram.y"
+ { fprintf (stderr, "%s", (yyvaluep->symbol)->tag); };
+#line 1136 "parse-gram.c"
+ break;
+ case 72: /* "action" */
+#line 173 "parse-gram.y"
+ { fprintf (stderr, "{\n%s\n}", (yyvaluep->chars)); };
+#line 1141 "parse-gram.c"
+ break;
+ case 73: /* "string_as_id" */
+#line 180 "parse-gram.y"
+ { fprintf (stderr, "%s", (yyvaluep->symbol)->tag); };
+#line 1146 "parse-gram.c"
+ break;
+ case 74: /* "string_content" */
+#line 165 "parse-gram.y"
+ { fprintf (stderr, "\"%s\"", (yyvaluep->chars)); };
+#line 1151 "parse-gram.c"
+ break;
+ default:
+ break;
+ }
+ YYFPRINTF (yyoutput, ")");
+}
+
+#endif /* ! YYDEBUG */
+/*-----------------------------------------------.
+| Release the memory associated to this symbol. |
+`-----------------------------------------------*/
+
+#if defined (__STDC__) || defined (__cplusplus)
+static void
+yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocationp)
+#else
+static void
+yydestruct (yymsg, yytype, yyvaluep, yylocationp)
+ const char *yymsg;
+ int yytype;
+ YYSTYPE *yyvaluep;
+ YYLTYPE *yylocationp;
+#endif
+{
+ /* Pacify ``unused variable'' warnings. */
+ (void) yyvaluep;
+ (void) yylocationp;
+
+ if (!yymsg)
+ yymsg = "Deleting";
+ YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+
+ switch (yytype)
+ {