Hi Etienne, others,
The Eiffel grammar is nearly complete... however I am getting a shift / reduce
conflict, and I can't understand why.
I have included my grammar file.
Please advise.
Cheers,
Dave Makalsky
Error Message:
shift/reduce conflict in state [stack: PClassHeader *] on TInvariant in {
[ PFeatures = * ] followed by TInvariant (reduce),
[ PInvariant = * TInvariant PAssertion ] (shift)
}
java.lang.RuntimeException:
shift/reduce conflict in state [stack: PClassHeader *] on TInvariant in {
[ PFeatures = * ] followed by TInvariant (reduce),
[ PInvariant = * TInvariant PAssertion ] (shift)
}
at org.sablecc.sablecc.Grammar.computeLALR(Unknown Source)
at org.sablecc.sablecc.GenParser.caseStart(Unknown Source)
at org.sablecc.sablecc.node.Start.apply(Unknown Source)
at org.sablecc.sablecc.SableCC.processGrammar(Unknown Source)
at org.sablecc.sablecc.SableCC.processGrammar(Unknown Source)
at org.sablecc.sablecc.SableCC.main(Unknown Source)
Quoting Etienne Gagnon <etienne.gagnon@uqam.ca>:
> Hi Dave,
>
> Dave Makalsky wrote:
> > Hi:
> >
> > I am moving along nicely with my Eiffel grammar, but I hit a small snag.
> >
> > I have the following definition:
> >
> > feature_adaptation =
> > rename? new_exports? undefine? redefine? select? end
> >
> > How do I allow the keyword 'end' in the feature_adaptation iff at least one
> of
> > the optional constructs are present?
>
> I assume feature_adaptation is *used* with a "?" when it apprears
> somewhere else in the grammar (e.g. feature_adaptation?).
>
> There are 2 usual ways. The first is to delay the detection of the
> error in a post-parsing walk of the AST.
>
> The second is to write:
>
> feature_adaptation =
> rename new_exports? undefine? redefine? select? end |
> new_exports undefine? redefine? select? end |
> undefine redefine? select? end |
> redefine select? end |
> select end;
>
> Using SableCC 3, this can be converted back into a nice AST, e.g.
>
> rename new_exports? undefine? redefine? select? end
> {-> New feature_adaptation (rename, new_exports, undefine,
> redefine, select) |
> new_exports undefine? redefine? select? end
> {-> New feature_adaptation (null, new_exports, undefine,
> redefine, select) |
> ...
>
> I assume the AST does not need to keep the end token around.
>
> Etienne
>
> --
> Etienne M. Gagnon, Ph.D. http://www.info.uqam.ca/~egagnon/
> SableVM: http://www.sablevm.org/
> SableCC: http://www.sablecc.org/
>
>
>
> -------------------------------------------------------
> This sf.net email is sponsored by:ThinkGeek
> Welcome to geek heaven.
> http://thinkgeek.com/sf
> _______________________________________________
> Sablecc-user mailing list
> Sablecc-user@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/sablecc-user
>
----------------------------------------------------------------
This message was sent using IMP, the Internet Messaging Program.
Attachment:
eiffel.grammar
Description: Binary data