[antlr-interest] Beginner grammar question
Matt Palmer
mattpalms at gmail.com
Fri Sep 12 02:38:06 PDT 2008
Ooops - get rid of the BAR token too, as it's not needed.
grammar test;
list : (element)+
;
element : bar NAME
;
bar : {input.LT(1).getText().equals("bar")}? NAME
;
NAME
: ('a'..'z' | 'A'..'Z')
('a'..'z' | 'A'..'Z' | '0'..'9' | '_')*
;
WS
: (' '|'\r'|'\t'|'\u000C'|'\n') {$channel=HIDDEN;}
;
On Fri, Sep 12, 2008 at 10:37 AM, Matt Palmer <mattpalms at gmail.com> wrote:
> Hi Fabian,
>
> this is a classic problem - it's specifically mentioned in the ANTLR
> reference book. There's more than one way of solving it, but where you
> have keywords that are the same as IDs, you can use predicates to do it.
> Basically, make bar a NAME too, but put a predicate before it to see if it's
> "bar". Then the lexer will just recognise NAME tokens, but the parser can
> switch to a bar rule if necessary:
>
> grammar test;
>
> list : (element)+
> ;
>
> element : bar NAME
> ;
>
> bar : {input.LT(1).getText().equals("bar")}? NAME
> ;
>
> BAR : 'bar'
> ;
>
> NAME
> : ('a'..'z' | 'A'..'Z')
> ('a'..'z' | 'A'..'Z' | '0'..'9' | '_')*
> ;
>
> WS
> : (' '|'\r'|'\t'|'\u000C'|'\n') {$channel=HIDDEN;}
> ;
>
> Matt
>
> On Fri, Sep 12, 2008 at 8:39 AM, Fabian Baboschi <fabian20ro at gmail.com>wrote:
>
>> Hi,
>> I have a question about the following grammar:
>>
>> grammar test;
>>
>> list : (element)+
>> ;
>>
>> element : BAR NAME
>> ;
>>
>> BAR : 'bar'
>> ;
>>
>> NAME
>> : ('a'..'z'|'A'..'Z')('a'..'z'|'A'..'Z'|'0'..'9'|'_')*
>> ;
>>
>> WS
>> : (' '|'\r'|'\t'|'\u000C'|'\n') {$channel=HIDDEN;}
>> ;
>>
>> I tried to use the following input: bar bar
>> and I get errors because the parser doesn't recognize that the second bar
>> should be treated as a name.
>> I tried to change the grammar or options but without success. What am I
>> missing?
>>
>> If it matters I'm using antlrworks-1.2 and antlr-3.1.
>>
>> Thank you,
>> Fabian
>>
>>
>> List: http://www.antlr.org/mailman/listinfo/antlr-interest
>> Unsubscribe:
>> http://www.antlr.org/mailman/options/antlr-interest/your-email-address
>>
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.antlr.org/pipermail/antlr-interest/attachments/20080912/568dd5de/attachment.html
More information about the antlr-interest
mailing list