On 23 Jun 2009, at 20:29, Michiel Helvensteijn wrote:

 The operator precedences in my language are
static. I just need a way to isolate the different groupings of precedence
declarations, so that no shift/reduce conflict is resolved by two
declarations from different groupings.

My method can be worked by hand. This is in fact the safe part; I also made a part where LR is directly modified, and I need to check Knuth's paper on it - on the todo list :-).

Take this example:

%nonassoc IF_THEN_RULE
%nonassoc "else"

%left '+' '-'
%left '*'

It generates the following relative orders:

IF_THEN_RULE < "else"
IF_THEN_RULE < '+'
IF_THEN_RULE < '-'
IF_THEN_RULE < '*'
"else" < '+'
"else" < '-'
"else" < '*'
'+' < '*'
'- < '*'

But I would prefer if only the following relations were understood:

IF_THEN_RULE < "else"
'+' < '*'
'- < '*'

All the others were unintentional, and might silently (and badly) resolve a
shift/reduce conflict that I introduced by accident.

What about adding a '%nonassoc "then"', which resolve the dangling else. The other things should follow.

If that does not help, I can send you my paper (and also if you just want it :-)).

  Hans




_______________________________________________
help-bison@gnu.org http://lists.gnu.org/mailman/listinfo/help-bison

Reply via email to