[antlr-interest] How to force error recovery?

Edson Tirelli tirelli at post.com
Mon Oct 4 16:26:52 PDT 2010


   Thanks for the suggestion. I just found this:

http://www.antlr.org/wiki/display/ANTLR3/Custom+Syntax+Error+Recovery

   I am trying to check if it works for my case. Otherwise I will try
your approach.

   Edson

2010/10/4 Junkman <j at junkwallah.org>:
> Greetings,
>
> I ran into the same issue, and you probably noticed that, when the
> lookahead doesn't match a statement, it breaks out of * loop and tries
> to match EOF.
>
> I resorted to calling statement() in a loop to force continuation of
> parsing regardless of error, instead of calling compilationUnit().
> Seems to work well enough.
>
> It would be good to know if there is a better to handle this, though.
>
> Best,
>
> J
>
>
> On 10/4/2010 3:27 PM, Edson Tirelli wrote:
>>    Hi all,
>>
>>    Look at this simple grammar:
>>
>> grammar testGrammar;
>> options {
>>   output=AST;
>> }
>>
>> compilationUnit
>>   : statement* EOF
>>   ;
>>
>> statement
>>   :   A^
>>   |   B^ C
>>   ;
>>
>> A   :   'a';
>>
>> B   : 'b';
>>
>> C   :   'c';
>>
>> WS  :   ( ' '
>>         | '\t'
>>         | '\r'
>>         | '\n'
>>         ) {$channel=HIDDEN;}
>>     ;
>>
>>
>>     Using the above grammar, it will successfully parse an input like:
>>
>> a b c a
>>
>>     Now, if the input is:
>>
>> a c a
>>
>>     The generated parser will parse "a", and will fail at "c", as it
>> is not a valid statement. Reading the error recovery chapter on the
>> ANTLR book, I would imagine ANTLR would delete/skip the "c" token and
>> try to recover, successfully parsing the second "a", as that is a
>> valid statement again. But it is not working like this. It is aborting
>> the parsing with an error at "c".
>>
>>     Question: how do I force it to recover from the error and continue parsing?
>>
>>     The actual scenario is that the parser I am working on is used by
>> an IDE environment (eclipse), so we need it to continue parsing and
>> presenting the users with all the errors found in the file, not just
>> the first one. The error recovery seems to work on some rules, but not
>> on the top rule (compilationUnit).
>>
>>     Thanks,
>>        Edson
>>
>
>



-- 
  Edson Tirelli
  JBoss Drools Core Development
  JBoss by Red Hat @ www.jboss.com


More information about the antlr-interest mailing list