SmaCC: Shift/Reduce Conflict

sig siguctua at gmail.com
Mon Apr 23 16:40:13 UTC 2007


> > Assignment :
> >       Id "=" Expression;
>
> If I add
> Expression :
>         FunctionCall
>         | Assignment
>         | ...
>
> Assignment :
>         Id "=" Expression;
>

Try this one instead:

AssignPart :
   Id "="
  | AssignPart Id "="
;

Expression:
  AssignPart ExpressionTail
  | ExpressionTail


ExpressionTail:
  |  Function
  |  BinaryOp
  | ...
  |   ExpressionTail Function
  |  ExpressionTail BinaryOp
  ..

This will remove shitf/reduce conflicts.

The main reason why its occurs is when you write something like this:

Expression:
   FixedPattern
 | FixedPattern Expression

this will force parser to shift and to grow its stack.
but if you write :

Expression:
   FixedPattern
 | Expression FixedPattern

parser will reduce faster.



More information about the Squeak-dev mailing list