[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

shift/reduce problem

I am using sablecc to parse some if statements, the grammar is as follows:
  if_statement =
   {if} if general_expression then [true]:statement |
   {if_else} if general_expression then [true]:statement else statement;
After run SableCC, I got the following error message:
     [exec] shift/reduce conflict in state [stack: TIf PGeneralExpression TThen
PStatement *] on TElse in {
     [exec]     [ PIfStatement = TIf PGeneralExpression TThen PStatement * TElse
 PStatement ] (shift),
     [exec]     [ PIfStatement = TIf PGeneralExpression TThen PStatement * ] fol
lowed by TElse (reduce)
The message basically says that there is a reduce/shift conflict after it sees the
keyword "else". I would like the code behaving do shift first. Any suggestion?
Also I look at simplecc.sablecc sample, it looks like they have similar grammar to
define the "if" statements, just wondering how they can avoid the problem.
Thanks a lot.
Yuntao Cui