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.