Interpreting shift/reduce conflicts from .output file

2005-06-12 Thread Frans Englich

Hi,

In my grammar I have 2 shift/reduce conflicts. I could find those by staring 
at my grammar until I find where I introduced it, but I thought I could learn 
to make use of Bison's nifty debugging -- the output file.

At the top of my .output file it says:

State 118 conflicts: 2 shift/reduce


And state 118 looks like this:

---
state 118

   72 SequenceType: ItemType .
   73 | ItemType . STAR
   74 | ItemType . PLUS
   75 | ItemType . QUESTION_MARK

PLUS   shift, and go to state 134
STAR   shift, and go to state 135
QUESTION_MARK  shift, and go to state 136

PLUS  [reduce using rule 72 (SequenceType)]
STAR  [reduce using rule 72 (SequenceType)]
$default  reduce using rule 72 (SequenceType)

---
State 134, 135, and 136 looks all very similar. For example, state 134 looks 
like this:

state 134

   74 SequenceType: ItemType PLUS .

$default  reduce using rule 74 (SequenceType)


I fail to understand what is the problem, and hence how to fix it. AFAICT, 
both (for example) state 134 and 118 reduces the tokens to a SequenceType. I 
don't see where the ambiguity is. I'm neither fully sure about what the 
brackets are communicating in state 118.

Perhaps my confusion can be cleared from what I've written so far?

For those interested, the grammar can be found here:

http://websvn.kde.org/*checkout*/branches/work/kdom/xpath/impl/parser/Parser.output?rev=424401
http://websvn.kde.org/*checkout*/branches/work/kdom/xpath/impl/parser/Parser.ypp?rev=424401


Cheers,

Frans


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


Re: Interpreting shift/reduce conflicts from .output file

2005-06-12 Thread Henrik Sorensen
look in the output file for all of the 'go to state 118', this will give you 
the hints were the grammar are conflicting.

hope this helps
Henrik

On Sunday 12 June 2005 15.04, Frans Englich wrote:
> Hi,
>
> In my grammar I have 2 shift/reduce conflicts. I could find those by
> staring at my grammar until I find where I introduced it, but I thought I
> could learn to make use of Bison's nifty debugging -- the output file.
>
> At the top of my .output file it says:
>
> State 118 conflicts: 2 shift/reduce
>
>
> And state 118 looks like this:
>
> ---
> state 118
>
>72 SequenceType: ItemType .
>73 | ItemType . STAR
>74 | ItemType . PLUS
>75 | ItemType . QUESTION_MARK
>
> PLUS   shift, and go to state 134
> STAR   shift, and go to state 135
> QUESTION_MARK  shift, and go to state 136
>
> PLUS  [reduce using rule 72 (SequenceType)]
> STAR  [reduce using rule 72 (SequenceType)]
> $default  reduce using rule 72 (SequenceType)
>
> ---
> State 134, 135, and 136 looks all very similar. For example, state 134
> looks like this:
>
> state 134
>
>74 SequenceType: ItemType PLUS .
>
> $default  reduce using rule 74 (SequenceType)
>
>
> I fail to understand what is the problem, and hence how to fix it. AFAICT,
> both (for example) state 134 and 118 reduces the tokens to a SequenceType.
> I don't see where the ambiguity is. I'm neither fully sure about what the
> brackets are communicating in state 118.
>
> Perhaps my confusion can be cleared from what I've written so far?
>
> For those interested, the grammar can be found here:
>
> http://websvn.kde.org/*checkout*/branches/work/kdom/xpath/impl/parser/Parse
>r.output?rev=424401
> http://websvn.kde.org/*checkout*/branches/work/kdom/xpath/impl/parser/Parse
>r.ypp?rev=424401
>
>
> Cheers,
>
>   Frans
>
>
> ___
> Help-bison@gnu.org http://lists.gnu.org/mailman/listinfo/help-bison


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


Re: Interpreting shift/reduce conflicts from .output file

2005-06-12 Thread Sylvain Schmitz

Frans Englich wrote:

state 118

   72 SequenceType: ItemType .
   73 | ItemType . STAR
   74 | ItemType . PLUS
   75 | ItemType . QUESTION_MARK

PLUS   shift, and go to state 134
STAR   shift, and go to state 135
QUESTION_MARK  shift, and go to state 136

PLUS  [reduce using rule 72 (SequenceType)]
STAR  [reduce using rule 72 (SequenceType)]
$default  reduce using rule 72 (SequenceType)
bison tells you in the output file that, in state 118, seeing PLUS or 
STAR in its lookahead window, he cannot choose between shift (to states 
134 and 135 respectively) and reduce (using rule 72: "SequenceType: 
ItemType").  It seems that your SequenceType can be followed by a STAR 
or a PLUS in some other rules (rules 17 and 20 to be precise), so when 
bison has recognized an ItemType, he doesn't know which parsing action 
to do, shift or reduce.  The brackets indicate that the reduction will 
not occur in front of PLUS or STAR because shift has the priority in bison.


In general, what you should do:
1) first try to remove the conflict by rewriting your grammar.  This can 
be difficult, and dangerous if you end up recognizing a language 
different from the one you intended to parse.
2) otherwise find in which cases this shift/reduce conflict can occur, 
and see if the default shift is good enough; if this is the case, 
%expect is your friend.

3) otherwise try 1) harder.
4) turn to a GLR parser using %glr-parser.

Looking at your grammar, one can have the derivations
MutliplicativeExpr
  =>  MultiplicativeExpr STAR UnionExpr (rule 20)
  =>   UnionExpr STAR UnionExpr (rule 19)
  =>InstanceOfExpr   STAR UnionExpr (rule 28)
  => TreatExpr INSTANCE OF SequenceType  STAR UnionExpr (rule 30),
and then
  => TreatExpr INSTANCE OF   ItemTypeSTAR UnionExpr (rule 72)
or
  => TreatExpr INSTANCE OF ItemType STAR STAR UnionExpr (rule 73)

This language is not easily generated in an LALR(1) grammar.  Can you 
modify it, for instance by adding parenthesis around the SequenceType?



state 134

   74 SequenceType: ItemType PLUS .

$default  reduce using rule 74 (SequenceType)

There is no conflicting shift action there, only a reduce.

--
  Sylvain


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