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
> 


List: http://www.antlr.org/mailman/listinfo/antlr-interest
Unsubscribe: 
http://www.antlr.org/mailman/options/antlr-interest/your-email-address

-- 
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.

Reply via email to