在ANTLR4中抛出java.lang.IndexOutOfBoundsException

时间:2013-06-12 13:39:49

标签: antlr4

我正在写我的解析器而且我遇到了一个尴尬的错误。 我的一条规则如下:

operatorTerm[ReadOptions Options, int priority] returns [Term t]
@init
{
int p = priority;
Term t2 = null;
Term t = null;
CompoundTermTag f = null;
}     
    : {testFY($Options, $priority)}?
      a=op[$Options, p]     {f = $a.tag;}
      b=term[$Options, p]   {$t = $b.t; $t = createTerm(f, $t); }
    | {testFX($Options, $priority)}?
      d=op[$Options, p]     {f = $d.tag;}
      e=term[$Options, p-1] {$t = $e.t; $t = createTerm(f, $t);}
    ;

这将使用别名ANTLR4

抛出以下错误
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 199, Size: 199
at java.util.ArrayList.rangeCheck(ArrayList.java:604)
at java.util.ArrayList.get(ArrayList.java:382)
at org.antlr.v4.automata.ATNSerializer.serialize(ATNSerializer.java:201)
at org.antlr.v4.automata.ATNSerializer.getSerialized(ATNSerializer.java:375)
at org.antlr.v4.codegen.model.SerializedATN.<init>(SerializedATN.java:46)
at org.antlr.v4.codegen.model.Parser.<init>(Parser.java:96)
at org.antlr.v4.codegen.ParserFactory.parser(ParserFactory.java:92)
at org.antlr.v4.codegen.OutputModelController.parser(OutputModelController.java:165)
at org.antlr.v4.codegen.OutputModelController.buildParserOutputModel(OutputModelController.java:114)
at org.antlr.v4.codegen.CodeGenerator.generateParser(CodeGenerator.java:169)
at org.antlr.v4.codegen.CodeGenPipeline.process(CodeGenPipeline.java:73)
at org.antlr.v4.Tool.processNonCombinedGrammar(Tool.java:422)
at org.antlr.v4.Tool.process(Tool.java:384)
at org.antlr.v4.Tool.processGrammarsOnCommandLine(Tool.java:343)
at org.antlr.v4.Tool.main(Tool.java:190)

现在,如果我从代码中删除几行,这将编译。制定这个新规则引发了这个例外。此外,如果我从这条规则本身中删除几行,则不会抛出异常。

是因为我的语法大小变得非常大吗? 无法解决此错误。

此外,即使我删除了其他一些独立的规则,我也没有遇到这样的错误。语法文件的大小是否有限制?

我的语法文件大约有800行。

1 个答案:

答案 0 :(得分:1)

这听起来像ANTLR 4工具的特定版本中的错误。您可以在GitHub上向项目问题跟踪器报告错误:

https://github.com/antlr/antlr4/issues

注意:我无法在最新的源代码中重现此问题,该代码将在本月底发布的ANTLR 4.1中提供。

相关问题