hi! crap. ok,Added the following to your post on that webpage:
> Ok, looks like we need some kind of formal mechanism after all, or at least a
> predicate that tests the input without consuming. Problem is I already use ~
> to mean "not element but consume" and '!' to mean don't include in the tree.
> Maybe -LetterOrDigit?
Still, we could easily do it with a simple {...}? so ANTLR can still do it
without formalism, just as PEGs force you to manually say that as well. :)
Ter
On Apr 17, 2011, at 3:35 AM, Peter Kooiman wrote:
> Ter,
>
> First of all, let me explain that the only reason I'm being such a nuisance
> is that I really want this to work! However, I'm afraid that in the end,
> ANTLR falls just short of being a scannerless tool.
>
> The problem lies with distinguishing between keywords, and identifiers that
> happen to start with the same letters as a keyword.
> The sample at http://bit.ly/gT3Q1C cannot distinguish between "returnme;" and
> "return me;", because kreturn is expressed as:
>
> kreturn : 'r' 'e' 't' 'u' 'r' 'n' ws? ;
>
> My first thought was, just make the whitespace not optional. But, in C for
> example, we can have
> return;
> return me;
>
> whereas "returnme;" would be a syntax error. Now, making ws not optional is
> no longer possible; what is really needed is a way to express
> "'r' 'e' 't' 'u' 'r' 'n' followed by anything that can NOT be part of an
> identifier". Although you could re-write the return statement rule to
> something awful like
>
> retstat: kreturn ws? colon
> | kreturn ws id colon
> ;
>
> the underlying problem remains: there is no way to prevent ANTLR entering
> rule kreturn upon seeing an identifier like "returnme" that happens to start
> with the same letters as keyword "return". In Rats!, you would write
>
> KRETURN = "return" !LetterOrDigit ws? ;
>
> where the "!" operator denotes a syntactic predicate meaning "LetterOrDigit
> must not match, and corresponding input will not be consumed"
>
> Without the ability to express "something followed by anything that is not a
> letter or digit", I don't see how to get it right in ANTLR. I very much hope
> I am wrong though!
>
List: http://www.antlr.org/mailman/listinfo/antlr-interest
Unsubscribe:
http://www.antlr.org/mailman/options/antlr-interest/your-email-address
--
You received this message because you are subscribed to the Google Groups
"il-antlr-interest" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/il-antlr-interest?hl=en.