2012-02-23 113 views
0

我所知道的是它阻止antlr产生,我很抱歉。这里的日志文件:神秘的ANTLR错误

(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) 
+1

可能不是一个ANTLR问题,但ANTLRIDE。尝试使用org.antlr.Tool生成词法分析器和/或解析器。从命令行执行:通过使用CLI验证您是否得到相同的错误,请执行:java -cp antlr-3.4-complete.jar org.antlr.Tool bridge.g' – 2012-02-23 08:58:03

回答

0

我昨天有同样的问题。不知道我的情况是否与你的情况相同,但值得一试。我有一个名为注释这样的规则:

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

而且我想在大括号来解析子注解,所以我做:

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

这是给我同样的错误了你的。所以,我最终怀疑它不工作。即使我不确定,我认为问题是导致错误的注释规则的递归。所以,我最终这样做:

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

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

这解决了我的问题。就像我说的,我不知道这个修复是否可以应用于您的问题。此外,我认为ANTLR能够处理非左递归规则。也许有更好的工具知识的人可以证实它。

我必须承认我没有尝试@BartKiers的建议,也许它也会解决问题。

问候,
马特

4

我用一个简单的语法逻辑公式得到了同样的错误。对我来说,问题是,ANTLR找不到明显的起始规则,因为我对我的预期起始规则进行了递归。指向递归的新规则添加了一条新规则(见http://thesoftwarelife.blogspot.com/2008/07/antlr-frustrations.html)。

很遗憾ANTLR IDE没有正确地转发错误信息。在命令行中我得到:

警告(138):Formula.g:0:1:语法公式:没有开始规则(无规则显然可以后跟EOF)

+0

。谢谢! – Donbhupi 2015-10-04 18:26:29