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.