[antlr-interest] A Question on FAQ

Gokulakannan Somasundaram gokul007 at gmail.com
Thu Dec 25 19:07:32 PST 2008


Thanks a lot Gavin for the quick response.

On Fri, Dec 26, 2008 at 5:19 AM, Gavin Lambert <antlr at mirality.co.nz> wrote:

> At 10:23 26/12/2008, Gokulakannan Somasundaram wrote:
>
>> I was going through the FAQ "How can I allow keywords as identifiers?".
>> The example is like this
>>
> [...]
>
>> My doubt is, why can't we write KeyIF and KeyCall as
>>
>> KEYIF : 'if';
>>
>> KEYCALL : 'call';
>>
>> instead of writing like the above one. Or am i just repeating what is
>> already told in the second alternative in the same FAQ?
>>
>
> Pretty much.
>
> The two alternatives mentioned in the FAQ are:
>
> 1. Avoid matching the keywords directly in the lexer, instead recognising
> them only as IDs.  Then in the parser (where you have context) check the
> actual text of the ID tokens you find to determine whether they're keywords
> or not.
>
> 2. Match the keywords directly in the lexer (so you have IF and CALL
> tokens, and ID tokens are only generated for words that don't match a
> keyword).  Then in the parser you never refer to ID directly -- wherever an
> id may appear you instead refer to a parser rule like this:
>  id : ID | IF | CALL | ... other keyword tokens ... ;
>
> I tend to prefer this second approach, since I try to minimise the number
> of predicates (especially semantic predicates) used in my grammars.  But it
> does mean that whenever you add a keyword to the language you have to add it
> in two places (which is not the case with the first approach).  So which one
> you go for is mostly just a matter of taste.
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.antlr.org/pipermail/antlr-interest/attachments/20081226/3328cb4b/attachment.html 


More information about the antlr-interest mailing list