パーサーを書いていて、厄介なエラーが発生しました。私のルールの1つは次のようなものです:
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 行です。