[antlr-interest] How can I avoid "mismatched input" error?

Indhu Bharathi indhu.b at s7software.com
Tue Mar 24 01:29:53 PDT 2009


Looks like you are trying to use keyword as identifier. AFAIK, this 
cannot be resolved in the lexer. You have to use predicates in the 
parser rule. Something like this:

rule : keyKEYWORD1 (keyKEYWORD2 enc=Name)? ';' ;

keyKEYWORD1
    :    {input.LT(1).getText().equals("keyword1")}? Name ;

keyKEYWORD2
    :    {input.LT(1).getText().equals("keyword2")}? Name ;


One more problem I see is the production "Name : Letter* ;". Lexer 
production cannot define a zero length string.

Another problem is you are expecting 'keyword1' to be parsed as Name but 
production for Name doesn't allow numbers.

- Indhu

Gabriel Petrovay wrote:
> Hi all,
>
> I have the following grammar file:
>
> //========================================
> grammar k;
> options {
> output=AST;
> }
>
> rule : KEYWORD1 (KEYWORD2 enc=Name)? ';' ;
>
> KEYWORD1 : 'keyword1';
> KEYWORD2 : 'keyword2';
>
> Name : Letter* ;
> fragment Letter : 'a'..'z' | 'A'..'Z' ;
>
> S            :    ('\t' | ' ' | '\n' | '\r')+  { $channel = HIDDEN; } ;
> //========================================
>
>
> The following text is not a valid one.
>
> INPUT:
> =====
> keyword1 keyword2 keyword1 ;
>
> OUTPUT:
> =======
> line 1:18 mismatched input 'keyword1' expecting Name
> <mismatched token: [@4,18:25='keyword1',<4>,1:18], resync=keyword1 
> keyword2 keyword1 ;>
>
>
> How can I make a parser to recognize this input? I want to be able to 
> allow the keywords in the places where any char combination is 
> allowed. How can I make this?
>
> Regards,
> Gabriel
> ------------------------------------------------------------------------
>
>
> 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/20090324/13b82b39/attachment.html 


More information about the antlr-interest mailing list