X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/21f1b063d812990caeb738fa8db21085ece53a30..09ccae9b18a7c09ebf7bb8df2a18c8c4a6def248:/src/conflicts.c diff --git a/src/conflicts.c b/src/conflicts.c index 9a02d4bb..05545b20 100644 --- a/src/conflicts.c +++ b/src/conflicts.c @@ -1,7 +1,7 @@ /* Find and resolve or report lookahead conflicts for bison, Copyright (C) 1984, 1989, 1992, 2000, 2001, 2002, 2003, 2004, 2005, 2006, - 2007 Free Software Foundation, Inc. + 2007, 2008 Free Software Foundation, Inc. This file is part of Bison, the GNU Compiler Compiler. @@ -135,78 +135,78 @@ log_resolution (rule *r, symbol_number token, } obstack_sgrow (&solved_conflicts_obstack, ".\n"); + } - /* XML report */ - if (xml_flag) - { - /* The description of the resolution. */ - switch (resolution) - { - case shift_resolution: - case right_resolution: - obstack_fgrow2 (&solved_conflicts_xml_obstack, - " ", - r->number, - xml_escape (symbols[token]->tag)); - break; - - case reduce_resolution: - case left_resolution: - obstack_fgrow2 (&solved_conflicts_xml_obstack, - " ", - r->number, - xml_escape (symbols[token]->tag)); - break; - - case nonassoc_resolution: - obstack_fgrow2 (&solved_conflicts_xml_obstack, - " ", - r->number, - xml_escape (symbols[token]->tag)); - break; - } - - /* The reason. */ - switch (resolution) - { - case shift_resolution: - obstack_fgrow2 (&solved_conflicts_xml_obstack, - "%s < %s", - xml_escape_n (0, r->prec->tag), - xml_escape_n (1, symbols[token]->tag)); - break; - - case reduce_resolution: - obstack_fgrow2 (&solved_conflicts_xml_obstack, - "%s < %s", - xml_escape_n (0, symbols[token]->tag), - xml_escape_n (1, r->prec->tag)); - break; - - case left_resolution: - obstack_fgrow1 (&solved_conflicts_xml_obstack, - "%%left %s", - xml_escape (symbols[token]->tag)); - break; - - case right_resolution: - obstack_fgrow1 (&solved_conflicts_xml_obstack, - "%%right %s", - xml_escape (symbols[token]->tag)); - break; - - case nonassoc_resolution: - obstack_fgrow1 (&solved_conflicts_xml_obstack, - "%%nonassoc %s", - xml_escape (symbols[token]->tag)); - break; - } + /* XML report */ + if (xml_flag) + { + /* The description of the resolution. */ + switch (resolution) + { + case shift_resolution: + case right_resolution: + obstack_fgrow2 (&solved_conflicts_xml_obstack, + " ", + r->number, + xml_escape (symbols[token]->tag)); + break; + + case reduce_resolution: + case left_resolution: + obstack_fgrow2 (&solved_conflicts_xml_obstack, + " ", + r->number, + xml_escape (symbols[token]->tag)); + break; + + case nonassoc_resolution: + obstack_fgrow2 (&solved_conflicts_xml_obstack, + " ", + r->number, + xml_escape (symbols[token]->tag)); + break; + } - obstack_sgrow (&solved_conflicts_xml_obstack, "\n"); - } + /* The reason. */ + switch (resolution) + { + case shift_resolution: + obstack_fgrow2 (&solved_conflicts_xml_obstack, + "%s < %s", + xml_escape_n (0, r->prec->tag), + xml_escape_n (1, symbols[token]->tag)); + break; + + case reduce_resolution: + obstack_fgrow2 (&solved_conflicts_xml_obstack, + "%s < %s", + xml_escape_n (0, symbols[token]->tag), + xml_escape_n (1, r->prec->tag)); + break; + + case left_resolution: + obstack_fgrow1 (&solved_conflicts_xml_obstack, + "%%left %s", + xml_escape (symbols[token]->tag)); + break; + + case right_resolution: + obstack_fgrow1 (&solved_conflicts_xml_obstack, + "%%right %s", + xml_escape (symbols[token]->tag)); + break; + + case nonassoc_resolution: + obstack_fgrow1 (&solved_conflicts_xml_obstack, + "%%nonassoc %s", + xml_escape (symbols[token]->tag)); + break; + } + + obstack_sgrow (&solved_conflicts_xml_obstack, "\n"); } } @@ -285,16 +285,21 @@ resolve_sr_conflict (state *s, int ruleno, symbol **errors, int *nerrs) flush_reduce (lookahead_tokens, i); } else - /* Matching precedence levels. - For left association, keep only the reduction. - For right association, keep only the shift. - For nonassociation, keep neither. */ + /* Matching precedence levels. + For non-defined associativity, keep both: unexpected + associativity conflict. + For left associativity, keep only the reduction. + For right associativity, keep only the shift. + For nonassociativity, keep neither. */ switch (symbols[i]->assoc) { - default: + case undef_assoc: abort (); + case precedence_assoc: + break; + case right_assoc: log_resolution (redrule, i, right_resolution); flush_reduce (lookahead_tokens, i);