antlr4编译错误:序列化的ATN数据元素超出范围



antlr4.5,目标Java,jdk1.6。

我编译了一个.g4组合文件,得到了这个错误:

Exception in thread "main" java.lang.UnsupportedOperationException: Serialized ATN data element out of range.
at org.antlr.v4.runtime.atn.ATNSerializer.serialize(ATNSerializer.java:370)
at org.antlr.v4.runtime.atn.ATNSerializer.getSerialized(ATNSerializer.java:547)
at org.antlr.v4.codegen.model.SerializedATN.<init>(SerializedATN.java:46)
at org.antlr.v4.codegen.model.Recognizer.<init>(Recognizer.java:87)
at org.antlr.v4.codegen.model.Lexer.<init>(Lexer.java:51)
at org.antlr.v4.codegen.OutputModelController.lexer(OutputModelController.java:176)
at org.antlr.v4.codegen.OutputModelController.buildLexerOutputModel(OutputModelController.java:129)
at org.antlr.v4.codegen.CodeGenerator.generateLexer(CodeGenerator.java:144)
at org.antlr.v4.codegen.CodeGenPipeline.process(CodeGenPipeline.java:73)
at org.antlr.v4.Tool.processNonCombinedGrammar(Tool.java:429)
at org.antlr.v4.Tool.process(Tool.java:379)
at org.antlr.v4.Tool.processGrammarsOnCommandLine(Tool.java:346)
at org.antlr.v4.Tool.main(Tool.java:193)
at com.dicp.fdsl.antlr.FDSLCompiler.main(FDSLCompiler.java:13)

这个错误是什么意思?

我也遇到了类似的问题,所以我开始注释语法中的行,直到错误消失。

在我的案例中,问题是我的数字文字规则中的拼写错误:

片段DIGIT:"0".."9’;

将其更改为以下任一项都会使错误消失:

片段DIGIT:"0".."9’;

片段DIGIT:[0123456789];

从"0"到"9"的字符范围似乎被解释为Unicode值,并且它产生了出乎意料的大范围。这与ANTLR小组在https://github.com/antlr/antlr4/issues/840.

最新更新