[antlr-interest] How to force error recovery?
Junkman
j at junkwallah.org
Mon Oct 4 16:24:34 PDT 2010
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
>
More information about the antlr-interest
mailing list