diff --git a/src/conflicts.c b/src/conflicts.c index d57b7231..5e7268a7 100644 --- a/src/conflicts.c +++ b/src/conflicts.c @@ -506,26 +506,25 @@ count_rr_conflicts (bool one_per_token) /*----------------------------------------------------------------------. | For a given rule, count the number of states for which it is involved | -| in shift/reduce conflicts. | +| in shift/reduce conflicts. | `----------------------------------------------------------------------*/ static bool rule_has_state_sr_conflicts (rule *r, state *s) { - int i; - int j; transitions *trans = s->transitions; reductions *reds = s->reductions; - for (i = 0; i < reds->num; i++) + for (int i = 0; i < reds->num; ++i) if (reds->rules[i] == r) - break; - if (i >= reds->num) - return false; - - FOR_EACH_SHIFT (trans, j) - if (bitset_test (reds->lookahead_tokens[i], TRANSITION_SYMBOL (trans, j))) - return true; + { + bitset lookaheads = reds->lookahead_tokens[i]; + int j; + FOR_EACH_SHIFT (trans, j) + if (bitset_test (lookaheads, TRANSITION_SYMBOL (trans, j))) + return true; + break; + } return false; } @@ -533,11 +532,8 @@ rule_has_state_sr_conflicts (rule *r, state *s) static size_t count_rule_sr_conflicts (rule *r) { - state_number i; - size_t res; - - res = 0; - for (i = 0; i < nstates; i++) + size_t res = 0; + for (state_number i = 0; i < nstates; ++i) if (conflicts[i] && rule_has_state_sr_conflicts (r, states[i])) res++; return res; @@ -551,22 +547,18 @@ count_rule_sr_conflicts (rule *r) static bool rule_has_state_rr_conflicts (rule *r, state *s) { - int i; reductions *reds = s->reductions; - size_t res; - bitset lookaheads; - - for (i = 0; i < reds->num; i++) - if (reds->rules[i] == r) - break; - if (i >= reds->num) - return 0; - lookaheads = reds->lookahead_tokens[i]; - for (i = 0; i < reds->num; i++) - if (reds->rules[i] != r && - !bitset_disjoint_p (lookaheads, reds->lookahead_tokens[i])) - return true; + for (int i = 0; i < reds->num; ++i) + if (reds->rules[i] == r) + { + bitset lookaheads = reds->lookahead_tokens[i]; + for (int j = 0; j < reds->num; ++j) + if (reds->rules[j] != r && + !bitset_disjoint_p (lookaheads, reds->lookahead_tokens[j])) + return true; + break; + } return false; } @@ -574,13 +566,10 @@ rule_has_state_rr_conflicts (rule *r, state *s) static size_t count_rule_rr_conflicts (rule *r) { - state_number i; - size_t res; - - res = 0; - for (i = 0; i < nstates; i++) + size_t res = 0; + for (state_number i = 0; i < nstates; ++i) if (conflicts[i] && rule_has_state_rr_conflicts (r, states[i])) - res++; + res++; return res; } @@ -635,25 +624,25 @@ conflicts_total_count (void) static void rule_conflicts_print (void) { - rule_number i; - - for (i = 0; i < nrules; i += 1) + for (rule_number i = 0; i < nrules; i += 1) { rule *r = &rules[i]; int expected_sr = r->expected_sr_conflicts; int expected_rr = r->expected_rr_conflicts; - if (expected_sr != -1 || expected_rr != -1) + if (expected_sr != -1 || expected_rr != -1) { int sr = count_rule_sr_conflicts (r); - int rr = count_rule_rr_conflicts (r); if (sr != expected_sr && (sr != 0 || expected_sr != -1)) - complain (&r->location, complaint, _("\ -shift/reduce conflicts for rule %d: %d found, %d expected"), + complain (&r->location, complaint, + _("shift/reduce conflicts for rule %d:" + " %d found, %d expected"), r->user_number, sr, expected_sr); + int rr = count_rule_rr_conflicts (r); if (rr != expected_rr && (rr != 0 || expected_rr != -1)) - complain (&r->location, complaint, _("\ -reduce/reduce conflicts for rule %d: %d found, %d expected"), + complain (&r->location, complaint, + _("reduce/reduce conflicts for rule %d:" + " %d found, %d expected"), r->user_number, rr, expected_rr); } } diff --git a/src/reader.c b/src/reader.c index 72b5ca45..985647a5 100644 --- a/src/reader.c +++ b/src/reader.c @@ -114,13 +114,11 @@ record_merge_function_type (int merger, uniqstr type, location declaration_loc) if (merger <= 0) return; - int merger_find; - merger_list *merge_function; - if (type == NULL) type = uniqstr_new (""); - merger_find = 1; + merger_list *merge_function; + int merger_find = 1; for (merge_function = merge_functions; merge_function != NULL && merger_find != merger; merge_function = merge_function->next) @@ -585,6 +583,7 @@ grammar_current_rule_predicate_append (const char *pred, location loc) void grammar_current_rule_expect_sr (int count, location loc) { + (void) loc; current_rule->expected_sr_conflicts = count; } @@ -608,13 +607,11 @@ static void packgram (void) { unsigned itemno = 0; - rule_number ruleno = 0; - ritem = xnmalloc (nritems + 1, sizeof *ritem); - /* This sentinel is used by build_relations in gram.c. */ *ritem++ = 0; + rule_number ruleno = 0; rules = xnmalloc (nrules, sizeof *rules); for (symbol_list *p = grammar; p; p = p->next) @@ -747,11 +744,10 @@ prepare_percent_define_front_end_variables (void) /* Set %define front-end variable defaults. */ muscle_percent_define_default ("lr.keep-unreachable-state", "false"); { - char *lr_type; /* IELR would be a better default, but LALR is historically the default. */ muscle_percent_define_default ("lr.type", "lalr"); - lr_type = muscle_percent_define_get ("lr.type"); + char *lr_type = muscle_percent_define_get ("lr.type"); if (STRNEQ (lr_type, "canonical-lr")) muscle_percent_define_default ("lr.default-reduction", "most"); else