X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/22b081deb7ab1d0ec7a279e5213fa7fdc2c85207..baa423bd59767a687ad742adc66a5b7428a41dee:/src/gram.c diff --git a/src/gram.c b/src/gram.c index 46c8cd19..3eb6c067 100644 --- a/src/gram.c +++ b/src/gram.c @@ -1,6 +1,6 @@ /* Allocate input grammar variables for Bison. - Copyright (C) 1984, 1986, 1989, 2001-2003, 2005-2012 Free Software + Copyright (C) 1984, 1986, 1989, 2001-2003, 2005-2015 Free Software Foundation, Inc. This file is part of Bison, the GNU Compiler Compiler. @@ -47,48 +47,41 @@ symbol_number *token_translations = NULL; int max_user_token_number = 256; bool -rule_useful_in_grammar_p (rule *r) +rule_useful_in_grammar_p (rule const *r) { return r->number < nrules; } bool -rule_useless_in_grammar_p (rule *r) +rule_useless_in_grammar_p (rule const *r) { return !rule_useful_in_grammar_p (r); } bool -rule_useless_in_parser_p (rule *r) +rule_useless_in_parser_p (rule const *r) { return !r->useful && rule_useful_in_grammar_p (r); } void -rule_lhs_print (rule *r, symbol *previous_lhs, FILE *out) +rule_lhs_print (rule const *r, symbol const *previous_lhs, FILE *out) { fprintf (out, " %3d ", r->number); if (previous_lhs != r->lhs) - { - fprintf (out, "%s:", r->lhs->tag); - } + fprintf (out, "%s:", r->lhs->tag); else - { - int n; - for (n = strlen (previous_lhs->tag); n > 0; --n) - fputc (' ', out); - fputc ('|', out); - } + fprintf (out, "%*s|", (int) strlen (previous_lhs->tag), ""); } void -rule_lhs_print_xml (rule *r, FILE *out, int level) +rule_lhs_print_xml (rule const *r, FILE *out, int level) { xml_printf (out, level, "%s", r->lhs->tag); } size_t -rule_rhs_length (rule *r) +rule_rhs_length (rule const *r) { size_t res = 0; item_number *rhsp; @@ -98,23 +91,20 @@ rule_rhs_length (rule *r) } void -rule_rhs_print (rule *r, FILE *out) +rule_rhs_print (rule const *r, FILE *out) { - if (*r->rhs >= 0) + if (0 <= *r->rhs) { item_number *rp; for (rp = r->rhs; *rp >= 0; rp++) fprintf (out, " %s", symbols[*rp]->tag); - fputc ('\n', out); } else - { - fprintf (out, " /* %s */\n", _("empty")); - } + fputs (" %empty", out); } static void -rule_rhs_print_xml (rule *r, FILE *out, int level) +rule_rhs_print_xml (rule const *r, FILE *out, int level) { if (*r->rhs >= 0) { @@ -133,13 +123,6 @@ rule_rhs_print_xml (rule *r, FILE *out, int level) } } -void -rule_print (rule *r, FILE *out) -{ - fprintf (out, "%s:", r->lhs->tag); - rule_rhs_print (r, out); -} - void ritem_print (FILE *out) { @@ -189,6 +172,7 @@ grammar_rules_partial_print (FILE *out, const char *title, first = false; rule_lhs_print (&rules[r], previous_lhs, out); rule_rhs_print (&rules[r], out); + fprintf (out, "\n"); previous_lhs = rules[r].lhs; } if (!first) @@ -263,10 +247,12 @@ grammar_dump (FILE *out, const char *title) fprintf (out, "Rules\n-----\n\n"); { rule_number i; - fprintf (out, "Num (Prec, Assoc, Useful, Ritem Range) Lhs -> Rhs (Ritem range) [Num]\n"); + 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]; + rule const *rule_i = &rules[i]; item_number *rp = NULL; unsigned int rhs_itemno = rule_i->rhs - ritem; unsigned int rhs_count = 0; @@ -294,8 +280,9 @@ grammar_dump (FILE *out, const char *title) rule_number r; for (r = 0; r < nrules + nuseless_productions; r++) { - fprintf (out, "%-5d ", r); - rule_print (&rules[r], out); + fprintf (out, "%-5d %s:", r, rules[r].lhs->tag); + rule_rhs_print (&rules[r], out); + fprintf (out, "\n"); } } fprintf (out, "\n\n"); @@ -307,14 +294,7 @@ grammar_rules_useless_report (const char *message) rule_number r; for (r = 0; r < nrules ; ++r) if (!rules[r].useful) - { - warn_at (rules[r].location, "%s: ", message); - if (warnings_flag & warnings_other) - { - rule_print (&rules[r], stderr); - fflush (stderr); - } - } + complain (&rules[r].location, Wother, "%s", message); } void