gpt4 book ai didi

antlr4 - 类型生成需要65535字节以上的字符串在常量池中以utf8格式编码

转载 作者:行者123 更新时间:2023-12-03 16:29:27 33 4
gpt4 key购买 nike

我正在尝试使用在 antlr3 中工作的有点大的语法的 antlr4。完成了 2 个所需的语法更改,现在我有了生成词法分析器和解析器的工具。

但是,词法分析器有一个编译错误:

1) The type generates a string that requires more than 65535 bytes to encode in Utf8 format in the constant pool



该错误显示在 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)

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

最佳答案

这确实是 Java 中的一个限制,而不是 ANTLR 中的错​​误(创建了正确的序列化字符串,但 Java 的编码无法存储它)。上周我们tweaked the _serializedATN 表示来帮助解决这个问题,但我们还没有实现一个完整的解决方法,包括将序列化的表单分成多个字符串或允许将其存储在运行时加载的单独文件中。
可能有一些方法可以调整语法以减少所需 ATN 的大小,但我需要查看语法来评估它。
更新:从 ANTLR 4.1 开始,_serializedATN现在根据需要进行拆分,以确保在生成的代码中不超过常量池限制。见 issue 76详情。

关于antlr4 - 类型生成需要65535字节以上的字符串在常量池中以utf8格式编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14381704/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com