static void print_transitions (state *s, FILE *out, int level) { transitions *trans = s->transitions; int n = 0; int i; for (i = 0; i < trans->num; i++) if (!TRANSITION_IS_DISABLED (trans, i)) { n++; } /* Nothing to report. */ if (!n) { xml_puts (out, level, "<transitions/>"); return; } /* Report lookahead tokens and shifts. */ xml_puts (out, level, "<transitions>"); for (i = 0; i < trans->num; i++) if (!TRANSITION_IS_DISABLED (trans, i) && TRANSITION_IS_SHIFT (trans, i)) { symbol *sym = symbols[TRANSITION_SYMBOL (trans, i)]; char const *tag = sym->tag; state *s1 = trans->states[i]; xml_printf (out, level + 1, "<transition type=\"shift\" symbol=\"%s\" state=\"%d\"/>", xml_escape (tag), s1->number); } for (i = 0; i < trans->num; i++) if (!TRANSITION_IS_DISABLED (trans, i) && !TRANSITION_IS_SHIFT (trans, i)) { symbol *sym = symbols[TRANSITION_SYMBOL (trans, i)]; char const *tag = sym->tag; state *s1 = trans->states[i]; xml_printf (out, level + 1, "<transition type=\"goto\" symbol=\"%s\" state=\"%d\"/>", xml_escape (tag), s1->number); } xml_puts (out, level, "</transitions>"); }
static void print_transitions (state *s, FILE *out, bool display_transitions_p) { transitions *trans = s->transitions; size_t width = 0; int i; /* Compute the width of the look-ahead token column. */ for (i = 0; i < trans->num; i++) if (!TRANSITION_IS_DISABLED (trans, i) && TRANSITION_IS_SHIFT (trans, i) == display_transitions_p) { symbol *sym = symbols[TRANSITION_SYMBOL (trans, i)]; max_length (&width, sym->tag); } /* Nothing to report. */ if (!width) return; fputc ('\n', out); width += 2; /* Report look-ahead tokens and shifts. */ for (i = 0; i < trans->num; i++) if (!TRANSITION_IS_DISABLED (trans, i) && TRANSITION_IS_SHIFT (trans, i) == display_transitions_p) { symbol *sym = symbols[TRANSITION_SYMBOL (trans, i)]; const char *tag = sym->tag; state *s1 = trans->states[i]; int j; fprintf (out, " %s", tag); for (j = width - strlen (tag); j > 0; --j) fputc (' ', out); if (display_transitions_p) fprintf (out, _("shift, and go to state %d\n"), s1->number); else fprintf (out, _("go to state %d\n"), s1->number); } }
static void flush_shift (state *s, int token) { transitions *trans = s->transitions; int i; bitset_reset (lookahead_set, token); for (i = 0; i < trans->num; i++) if (!TRANSITION_IS_DISABLED (trans, i) && TRANSITION_SYMBOL (trans, i) == token) TRANSITION_DISABLE (trans, i); }