Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Antlr4 该类型生成一个字符串,该字符串需要超过65535字节才能在常量池中以Utf8格式编码_Antlr4 - Fatal编程技术网

Antlr4 该类型生成一个字符串,该字符串需要超过65535字节才能在常量池中以Utf8格式编码

Antlr4 该类型生成一个字符串,该字符串需要超过65535字节才能在常量池中以Utf8格式编码,antlr4,Antlr4,我正在用一个在antlr3中工作的语法来尝试antlr4。完成了所需的2个语法更改,现在我有了生成lexer和parser的工具 但是,lexer有一个编译错误: 1) 该类型生成的字符串需要超过65535个字节才能执行 在常量池中以Utf8格式编码 该错误在Eclipse中的类名上显示,因此不确定它所指的是哪个字符串,但我怀疑是这个很长的字符串: public static final String _serializedATN = "\1\2\u01c5\u1741\

我正在用一个在antlr3中工作的语法来尝试antlr4。完成了所需的2个语法更改,现在我有了生成lexer和parser的工具

但是,lexer有一个编译错误:

1) 该类型生成的字符串需要超过65535个字节才能执行 在常量池中以Utf8格式编码

该错误在Eclipse中的类名上显示,因此不确定它所指的是哪个字符串,但我怀疑是这个很长的字符串:

    public static final String _serializedATN =
        "\1\2\u01c5\u1741\6\uffff\2\0\7\0\2\1\7\1\2\2\7\2\2\3\7\3\2\4\7\4\2\5\7"+
        "\5\2\6\7\6\2\7\7\7\2\b\7\b\2\t\7\t\2\n\7\n\2\13\7\13\2\f\7\f\2\r\7\r\2"+
... etc, etc (few hundred lines of unicode)

看起来像是解析器生成器中的一个bug,但我不知道antlr4可能需要一些新设置(?)

这实际上是Java中的一个限制,而不是ANTLR中的bug(创建了正确的序列化字符串,但Java的编码无法存储它)。上周,我们尝试使用表示来帮助解决这个问题,但是我们还没有实现一个完整的解决方案,包括将序列化表单拆分为多个字符串,或者允许在运行时将其存储在单独加载的文件中

可能有一些方法可以调整语法以减少所需ATN的大小,但我需要查看语法来评估它

更新:从ANTLR 4.1开始,
\u serializedATN
现在根据需要进行拆分,以确保生成的代码中不超过常量池限制。有关详细信息,请参阅