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

Indhu Bharathi indhu.b at s7software.com
Tue Mar 24 02:46:24 PDT 2009


I assume when you say 'keyword' you are talking about the keywords (like 
'if', 'else'. 'type', etc) in the language you are trying to parse. 
Those must be finite and the regular approach is to have a production 
for each. Under that assumption the proposed model is certainly scalable.

But I'm just getting a doubt if you are meaning something else by 
'keyword'. Are you trying to parse a input containing name value pair 
where name and value can be anything?

And what do you mean by Name1, Name2, ... NameN? I dont see any such 
thing in grammar. Is name not a plain ID (like a variable name)?

Throwing some more light on what exactly you are trying to parse will be 
helpful.

- Indhu

Gabriel Petrovay wrote:
> Hi Indhu,
>
> I was trying to simplify the example such that I still get the error 
> and the example is simple enough for everybody to understand the problem.
>
> Here is the corrected grammar:
>
> //========================================
> grammar k;
> options {
> output=AST;
> }
>
> rule : KEYWORD1 (KEYWORD2 Name)? ';' ;
>
> KEYWORD1 : 'keywordA';
> KEYWORD2 : 'keywordB';
>
> Name : ('a'..'z' | 'A'..'Z')+ ;
> S : ('\t' | ' ' | '\n' | '\r')+  { $channel = HIDDEN; } ;
> //========================================
>
> With this the problems you mentioned are eliminated.
>
> As I can see your proposed solution is not scalable if I have the 
> keywords: keywordA, keywordB,...,keywordZ, and the Name rules: Name1, 
> Name2,..., NameN. Or is it?
>
> Any solution for this?
>
>
> Regards,
> Gabriel
>
>
> On Tue, Mar 24, 2009 at 9:29 AM, Indhu Bharathi 
> <indhu.b at s7software.com <mailto:indhu.b at s7software.com>> wrote:
>
>     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
>>       
>
>
>
>
> -- 
> MSc Gabriel Petrovay
> MCSA, MCDBA, MCAD
> Mobile: +41(0)787978034

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.antlr.org/pipermail/antlr-interest/attachments/20090324/9fa2c384/attachment.html 


More information about the antlr-interest mailing list