[antlr-interest] Parser acessing lexer rules info for error recovery

Peggy Fieland madcapmaggie at yahoo.com
Wed Dec 7 08:50:49 PST 2005


If you need to make the same test in multiple  catch
blocks, you can
write a function to do it and just call it in all the
catch blocks.

 

--- Thiago Silva <thiago.silva at kdemail.net> wrote:

> Hello, 
> I'm having a problem on parser error recovery. Some
> times I need lexer rules 
> info to proceed with the recovery. But I'm not so
> sure the way to proceed, 
> after reading the manual, the generated sources and
> antlr sources.
> 
> As a simple example:
> 
> ----------------------
> class SomeParser extends Parser
> 
> somerule : (....);
> 
> exception
> catch[...] {
>    //here I need to check, for instance, if LA(1) is
> a T_DATATYPE
>   //or if LA(1) belongs to the token section
> (testLiteralsTable()?)
> }
> 
> 
> class SomeParser extends Lexer;
> 
> T_DATATYPE : T_FOO | T_BAR
> 
> T_FOO: "foo";
> T_BAR: "bar"
> ----------------------
> 
> Now, what I'm doing is checking the LA in the catch
> block, manually writing 
> (again) the members of T_DATATYPE:
> 
> catch[..]
>  if(la_token == T_FOO | la_token == T_BAR) {
>    //print a warning message
>  } else {
>    //print a different warning message
>  }
> 
> 
> So, if T_DATATYPE changes, I would have to update
> all the catch[] blocks that 
> checks for T_DATATYPE.
> 
> Did I miss something in the docs? Or is this the
> only way possible to do it?
> By the way, I'm using C++.
> 
> Thanks in advance,
> Thiago
> 
> 



More information about the antlr-interest mailing list