Christopher
Christopher

Reputation: 629

Mysterious ANTLR error

All I know is that it's stopping antlr from generating, I apologize. Here's the log file:

(10): internal error: /Bridge/bridge.g : java.lang.IllegalStateException: java.lang.NullPointerException 
 org.deved.antlride.runtime.AntlrErrorListener$DynamicToken.invokeMethod(AntlrErrorListener.java:59) 
 org.deved.antlride.runtime.AntlrErrorListener$DynamicToken.getLine(AntlrErrorListener.java:64) 
 org.deved.antlride.runtime.AntlrErrorListener.report(AntlrErrorListener.java:131) 
 org.deved.antlride.runtime.AntlrErrorListener.message(AntlrErrorListener.java:115) 
 org.deved.antlride.runtime.AntlrErrorListener.warning(AntlrErrorListener.java:99) 
 org.antlr.tool.ErrorManager.grammarWarning(ErrorManager.java:742) 
 org.antlr.tool.ErrorManager.grammarWarning(ErrorManager.java:757) org.antlr.tool.Grammar.parseAndBuildAST(Grammar.java:655) 
 org.antlr.Tool.getRootGrammar(Tool.java:626) org.antlr.Tool.process(Tool.java:459) 
 org.deved.antlride.runtime.Tool2.main(Tool2.java:24)

Upvotes: 0

Views: 1239

Answers (2)

pyron
pyron

Reputation: 83

I got the same error with a simple grammar for logical formulas. For me the problem was, that ANTLR could not find an obvious start rule because I had a recursion on my intended start rule. Adding a new rule pointing to the recursive one did the job (see http://thesoftwarelife.blogspot.com/2008/07/antlr-frustrations.html).

It's a pity that ANTLR IDE does not correctly forward the error message. On the command line i get:

warning(138): Formula.g:0:1: grammar Formula: no start rule (no rule can obviously be followed by EOF)

Upvotes: 4

Matt
Matt

Reputation: 10833

I had the same problem yesterday. Not sure if my case is identical to yours but it worth a try. I had a rule named annotation like this:

annotation
    : AT class declaration?
        -> ^(ANNOTATION class declaration?)
    ;

And I wanted to parse sub annotations in curly braces so I did:

subAnnotation:
    : CURLY_START annotation CURLY_END
       -> ^(ANNOTATION annotation)
    ;

This was given me the same error has yours. So, I end up wondering with it is not working. Even if I'm unsure, I think the problem is the recursion of the annotation rule that was causing the error. So, I ended up doing this:

annotationValue:
    : CURLY_START subAnnotation CURLY_END
       -> ^(ANNOTATION subAnnotation)
    ;

subAnnotation
    : AT class declaration?
       -> ^(ANNOTATION class declaration?)
    ;

This resolved my problem. Like I said, I don't know if this fix can be applied to your problem. Moreover, I thought that ANTLR was able to deal with non-left-recursive rule. Maybe someone with a better knowledge of the tool could confirm it.

I must admit I did not try the suggestion of @BartKiers, maybe it would also solve the problem.

Regards,
Matt

Upvotes: 0

Related Questions