/* Print an xml on generated parser, for Bison,
- Copyright (C) 2007 Free Software Foundation, Inc.
+ Copyright (C) 2007, 2009 Free Software Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler.
{
transitions *trans = s->transitions;
reductions *reds = s->reductions;
- rule *default_rule = NULL;
+ rule *default_reduction = NULL;
int report = false;
int i, j;
- if (reds->num == 0) {
- xml_puts (out, level, "<reductions/>");
- return;
- }
+ if (reds->num == 0)
+ {
+ xml_puts (out, level, "<reductions/>");
+ return;
+ }
if (yydefact[s->number] != 0)
- default_rule = &rules[yydefact[s->number] - 1];
+ default_reduction = &rules[yydefact[s->number] - 1];
bitset_zero (no_reduce_set);
FOR_EACH_SHIFT (trans, i)
if (s->errs->symbols[i])
bitset_set (no_reduce_set, s->errs->symbols[i]->number);
- if (default_rule)
+ if (default_reduction)
report = true;
if (reds->lookahead_tokens)
{
if (! count)
{
- if (reds->rules[j] != default_rule)
+ if (reds->rules[j] != default_reduction)
report = true;
count = true;
}
{
if (! count)
{
- if (reds->rules[j] != default_rule)
+ if (reds->rules[j] != default_reduction)
print_reduction (out, level + 1, symbols[i]->tag,
reds->rules[j], true);
else
{
if (defaulted)
print_reduction (out, level + 1, symbols[i]->tag,
- default_rule, true);
+ default_reduction, true);
defaulted = false;
print_reduction (out, level + 1, symbols[i]->tag,
reds->rules[j], false);
}
}
- if (default_rule)
+ if (default_reduction)
print_reduction (out, level + 1,
- "$default", default_rule, true);
+ "$default", default_reduction, true);
xml_puts (out, level, "</reductions>");
}
if (token_translations[i] != undeftoken->number)
{
char const *tag = symbols[token_translations[i]]->tag;
- xml_printf (out, level + 2,
- "<terminal symbol-number=\"%d\" token-number=\"%d\""
- " name=\"%s\" usefulness=\"%s\"/>",
- token_translations[i], i, xml_escape (tag),
- reduce_token_unused_in_grammar (token_translations[i])
- ? "unused-in-grammar" : "useful");
+ int precedence = symbols[token_translations[i]]->prec;
+ assoc associativity = symbols[token_translations[i]]->assoc;
+ xml_indent (out, level + 2);
+ fprintf (out,
+ "<terminal symbol-number=\"%d\" token-number=\"%d\""
+ " name=\"%s\" usefulness=\"%s\"",
+ token_translations[i], i, xml_escape (tag),
+ reduce_token_unused_in_grammar (token_translations[i])
+ ? "unused-in-grammar" : "useful");
+ if (precedence)
+ fprintf (out, " prec=\"%d\"", precedence);
+ if (associativity != undef_assoc)
+ fprintf (out, " assoc=\"%s\"", assoc_to_string (associativity) + 1);
+ fputs ("/>\n", out);
}
xml_puts (out, level + 1, "</terminals>");
}
void
-xml_puts (FILE *out, int level, char const *s)
+xml_indent (FILE *out, int level)
{
int i;
for (i = 0; i < level; i++)
fputs (" ", out);
+}
+
+void
+xml_puts (FILE *out, int level, char const *s)
+{
+ xml_indent (out, level);
fputs (s, out);
fputc ('\n', out);
}
void
xml_printf (FILE *out, int level, char const *fmt, ...)
{
- int i;
va_list arglist;
- for (i = 0; i < level; i++)
- fputs (" ", out);
+ xml_indent (out, level);
va_start (arglist, fmt);
vfprintf (out, fmt, arglist);