[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Eiffel Grammar shift / reduce errors
Hi Dave and SableCC list members,
I am really overloaded, currently. I can offer quick advices, but
writing an Eiffel LALR(1) grammar is an effort that goies beyond the
little help I can offer in few minutes of work. From what I've heard,
the designers of Eiffel knowignly left some ambiguities in the Eiffel
grammar, and resort to GLR parsers to parse some constructs. As the
grammar is ambiguous, I think a parser can reject a specific program
when it exhibits (or "hits") an ambiguity! I just imagine a first-year
programming student getting a "you have written an ambiguous program"
compiler error...
Now, from what I have seen across your link, it seems that various
Eiffel compilers take different approaches to dealing with those
ambiguities (and I would't be suprised that some Eiffel compilers
actually use an LALR(1) parser). Some issue warnings; some resolve the
ambiguity by selecting some interpretation, etc.
You have to keep in mind what a grammar ambiguity means: it means that
there exists at least one input string (e.g. program) for which there
exists at least two distinct *and* valid syntax trees (according to the
grammar). In fact, many grammar ambiguities allow for an infinite
number of valid syntax trees for a single string. The problem of having
the parser choosing (arbitrarily) one syntax tree (among many), is that
the selected syntax tree might differ from the one the programmer had in
mind when he wrote the string (or program).
For you more immediate problem, I would say to try to add back the
separators in your grammar. Currently you consider them as Ignored
Tokens which is probably wrong.
If anyone wants to lend a hand, you are welcome!
Etienne
--
Etienne M. Gagnon, Ph.D. http://www.info.uqam.ca/~egagnon/
SableVM: http://www.sablevm.org/
SableCC: http://www.sablecc.org/