Hi guys,
I would really appreciate any kind of an advice, I'm really stuck here.. Thanks again, Vitaliy From: [email protected] [mailto:[email protected]] On Behalf Of Vitaliy Sent: Wednesday, February 11, 2009 14:18 To: Jim Idle Cc: [email protected] Subject: Re: [antlr-interest] Antlr won't backtrack? Jim, Thanks for your response. The problem is that the grammar I've presented below is a very simplified version of the real grammar I'm handling. In the actual grammar there are many rules which might end in some cases with an identifier, while in other cases - not. It's simply impractical to analyze all these cases, go over them and add the semantic predicate you've suggested. Moreover, there is unfortunately no statement terminator in my grammar, which no doubt could have made my life so much easier, like you said. Is there any other alternative? Can't I just tell it somehow to try all alternatives upon failure in an exhaustive search until success? Or somehow increase the lookahead in this case? BTW, I still don't get it why Antlr won't backtrack upon failure in this case.. Again, isn't it just what the 'backtrack' option is all about?? I would really appreciate any suggestion, Vitaliy From: [email protected] [mailto:[email protected]] On Behalf Of Jim Idle Sent: Monday, February 09, 2009 18:51 Cc: [email protected] Subject: Re: [antlr-interest] Antlr won't backtrack? Vitaliy wrote: Hi Ter, Thanks for your quick response! I'm still confused: What can I do to suggest Antlr to consider the other alternative, and backtrack instead of failing? Shouldn't the backtrack option do just that - make Antlr backtrack if it has failed upon a given input? Why would the variable alternative effect its behavior? I would recommend that you do not use backtrack at this point. While it can be useful for prototyping, one off conversion grammars and some horrible grammars such as VBSCript, it will generally be more difficult to work out why the grammar isn't working. The errors and warnings that non-backtrack gives are real and you can backtrack on specific rule rather than the entire grammar if you must. Left factor the rules: statement : Identifier (COLON {isLabel =true;} | {isVariable=true; }) | KEYWORD ((Identifier)=>Identifier)? | etc. In some grammars it is necessary to look for some kind of terminator. For instance a statement might end in ';' or at '\n'. If it did then you grammar would avoid the ambiguity between the optional Identifier that follows KEYWORD and Identifier and Identifier COLON. The answers to your quests are that your grammar is so ambiguous that even the best guess of backtrack mode cannot make the correct guess in all cases. As soon as it if fins an alt that looks correct it will take it. So if you have: KEYWORD IDENTIFIER COLON It consumes IDENTIFIER with the KEYWORD and leaves you with a COLON, as will my example above. If you must really have the grammar this way, then you will have to use a semantic predicate: | KEYWORD ( {input.LA(1) == Identifier && input.LA(2) != COLON}=> Identifier)? Jim Thanks allot for your help, Vitaliy From: Terence Parr [mailto:[email protected]] Sent: Sunday, February 08, 2009 19:46 To: Vitaliy Cc: [email protected]<mailto:[email protected]> Subject: Re: [antlr-interest] Antlr won't backtrack? On Feb 8, 2009, at 2:48 AM, Vitaliy wrote: root : statements EOF; statements : (statement)+; statement : label | keyword | variable ; identifier : Identifier; label : identifier COLON; keyword : KEYWORD (identifier)?; variable : identifier; "keyword label:" will always match rule keyword and then fail. ANTLR will match greedily because you told it to shut up and backtrack. It's hiding the warning that identifier can match now or later (during statements loop). Ter __________ Information from ESET NOD32 Antivirus, version of virus signature database 3837 (20090208) __________ The message was checked by ESET NOD32 Antivirus. http://www.eset.com _____ List: http://www.antlr.org/mailman/listinfo/antlr-interest Unsubscribe: http://www.antlr.org/mailman/options/antlr-interest/your-email-address __________ Information from ESET NOD32 Antivirus, version of virus signature database 3844 (20090211) __________ The message was checked by ESET NOD32 Antivirus. http://www.eset.com __________ Information from ESET NOD32 Antivirus, version of virus signature database 3845 (20090211) __________ The message was checked by ESET NOD32 Antivirus. http://www.eset.com --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
List: http://www.antlr.org/mailman/listinfo/antlr-interest Unsubscribe: http://www.antlr.org/mailman/options/antlr-interest/your-email-address
List: http://www.antlr.org/mailman/listinfo/antlr-interest Unsubscribe: http://www.antlr.org/mailman/options/antlr-interest/your-email-address
