void tf_print (const struct tf *tf) { if (tf->prefix) printf ("Prefix: %s\n", DATA_STR (tf->prefix)); for (int i = 0; i < tf->nrules; i++) rule_print (&tf->rules[i], tf); }
void grammar_rules_never_reduced_report (const char *message) { rule_number r; for (r = 0; r < nrules ; ++r) if (!rules[r].useful) { location_print (stderr, rules[r].location); fprintf (stderr, ": %s: %s: ", _("warning"), message); rule_print (&rules[r], stderr); } }
void res_print (const struct res *res, bool backward) { if (!backward && res->parent) res_print (res->parent, backward); printf ("-> Port: %d", res->port); printf ("\n"); printf ("-> HS: \n"); hs_print (&res->hs); if (res->rules.cur) { printf (", Rules: "); for (int i = 0; i < res->rules.cur; i++) { if (i) printf (", "); const struct res_rule *r = &res->rules.arr[i]; printf ("%s_%d", r->tf ? r->tf : "", r->rule); printf ("\n"); rule_print (r->tf_rule, r->tf_tf); } } printf ("\n"); if (backward && res->parent) res_print (res->parent, backward); }
void grammar_dump (FILE *out, const char *title) { fprintf (out, "%s\n\n", title); fprintf (out, "ntokens = %d, nvars = %d, nsyms = %d, nrules = %d, nritems = %d\n\n", ntokens, nvars, nsyms, nrules, nritems); fprintf (out, "Variables\n---------\n\n"); { symbol_number i; fprintf (out, "Value Sprec Sassoc Tag\n"); for (i = ntokens; i < nsyms; i++) fprintf (out, "%5d %5d %5d %s\n", i, symbols[i]->prec, symbols[i]->assoc, symbols[i]->tag); fprintf (out, "\n\n"); } fprintf (out, "Rules\n-----\n\n"); { rule_number i; fprintf (out, "Num (Prec, Assoc, Useful, Ritem Range) Lhs -> Rhs (Ritem range) [Num]\n"); for (i = 0; i < nrules + nuseless_productions; i++) { rule *rule_i = &rules[i]; item_number *rp = NULL; unsigned int rhs_itemno = rule_i->rhs - ritem; unsigned int rhs_count = 0; /* Find the last RHS index in ritems. */ for (rp = rule_i->rhs; *rp >= 0; ++rp) ++rhs_count; fprintf (out, "%3d (%2d, %2d, %2d, %2u-%2u) %2d ->", i, rule_i->prec ? rule_i->prec->prec : 0, rule_i->prec ? rule_i->prec->assoc : 0, rule_i->useful, rhs_itemno, rhs_itemno + rhs_count - 1, rule_i->lhs->number); /* Dumped the RHS. */ for (rp = rule_i->rhs; *rp >= 0; rp++) fprintf (out, " %3d", *rp); fprintf (out, " [%d]\n", item_number_as_rule_number (*rp)); } } fprintf (out, "\n\n"); fprintf (out, "Rules interpreted\n-----------------\n\n"); { rule_number r; for (r = 0; r < nrules + nuseless_productions; r++) { fprintf (out, "%-5d ", r); rule_print (&rules[r], out); } } fprintf (out, "\n\n"); }