[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: rule cycle and reduce/reduce conflict
From: |
Akim Demaille |
Subject: |
Re: rule cycle and reduce/reduce conflict |
Date: |
Tue, 19 Nov 2013 14:20:40 +0100 |
Le 18 nov. 2013 à 22:17, Florent Teichteil <address@hidden> a écrit :
> Hi all,
>
> I am new to bison and would need your kind help to understand why the
> following (stupid) simple grammar is ambiguous:
Actually your question is why the conflict remains.</pedantic>
> %left '!'
> %left '='
>
> %%
>
> start : bool_expr ;
>
> bool_expr : '!' bool_expr
> | num_expr '=' num_expr
> | 'b'
> ;
>
> num_expr : bool_expr
> | 'n'
> ;
>
> %%
>
> There is a cycle in the rules (bool_expr depends on num_expr, which in
> turn depends on bool_expr), but I can't imagine an input that would be
> ambiguous. However, bison reports the following reduce/reduce
> conflict:
>
> State 7
>
> 2 bool_expr: '!' bool_expr .
> 5 num_expr: bool_expr .
>
> '=' reduce using rule 2 (bool_expr)
> '=' [reduce using rule 5 (num_expr)]
> $défaut reduce using rule 2 (bool_expr)
>
> I don't understand what are the 2 conflicting semantic actions that
> can be performed here. Could someone explain me please (perhaps with a
> counter-example?)
Precedence is never involved in resolving RR conflicts. It could arguably be
a feature-request, but often RR conflicts are signs that you should
rework your grammar (or that you should go for GLR and use %dprec).
More concretely, you "fall into the classical temptation" to treat
type issues at the syntactic level. Don't do that.