[antlr-interest] Declaring exceptions in rules

Jim Idle jimi at temporal-wave.com
Tue Apr 21 07:12:39 PDT 2009


Gavin Lambert wrote:
> At 17:08 21/04/2009, Christof Lutteroth wrote:
>  >I am trying to get ANTRL 3.1.3 to generate a method that 
> declares
>  >an exception.
>  >For example, I want rule compilationUnit (from the Java grammar 
> in
>  >the grammars section of the ANTLR website) to throw an 
> Exception:
>  >
>  >compilationUnit  throws Exception
>  >     :   (   (annotations)?
>  >             packageDecl=packageDeclaration
>  >         )?
>  >         (importDeclaration)*
>  >         (typeDeclaration)*
>  >     ;
>  >
>  >So now I would expect that the compilationUnit() method that is
>  >generated would declare "throws Exception", but:
>  >
>  >     public final void compilationUnit() throws
>  >RecognitionException {
>  >
>  >Why is the Exception declaration not generated?
>
> Because while that's accepted by the ANTLR grammar structure, it's 
> a feature that isn't currently implemented.  (There are a few more 
> things like that.)
>
> For now, you'll need to throw a RuntimeError-derived class 
> instead.  (Since IIRC you don't need to declare those.)
>
>
> List: http://www.antlr.org/mailman/listinfo/antlr-interest
> Unsubscribe: http://www.antlr.org/mailman/options/antlr-interest/your-email-address
>   
Another way is:

cu: X Y Z ;
catch [RecognitionException re] {

// my code
throw new MyException(re);
}

Which you can use to intercept the standard recognition error and do 
something special or throw a different exception for a particular rule.

Jim


More information about the antlr-interest mailing list