[antlr-interest] How to force error recovery?

Jim Idle jimi at temporal-wave.com
Tue Oct 5 08:43:05 PDT 2010


Please read the article in the wiki on error recovery methods. You can see
there how to keep a parse loop going instead of it breaking out. You can
also see a real world example if you download the source code for the JavaFX
compiler, as I wrote the error recovery article after writing that parser.

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

Jim

> -----Original Message-----
> From: antlr-interest-bounces at antlr.org [mailto:antlr-interest-
> bounces at antlr.org] On Behalf Of Edson Tirelli
> Sent: Monday, October 04, 2010 3:27 PM
> To: antlr-interest at antlr.org
> Subject: [antlr-interest] How to force error recovery?
> 
>    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
> 
> List: http://www.antlr.org/mailman/listinfo/antlr-interest
> Unsubscribe: http://www.antlr.org/mailman/options/antlr-interest/your-
> email-address



More information about the antlr-interest mailing list