ANTLR 3.2的C运行时分布曾经有一个声明为
的函数ANTLR3_API pANTLR3_INPUT_STREAM antlr3NewAsciiStringCopyStream
(pANTLR3_UINT8 inString, ANTLR3_UINT32 size, pANTLR3_UINT8 name);
include/antlr3defs.h
中的。还有一些类似的功能,例如antlr3NewAsciiStringInPlaceStream
,antlr3NewUCS2StringInPlaceStream
等等。
但在3.4版本中,这些功能似乎已经消失了。它们既没有在任何.h文件中声明,也没有被编译到库中。
我查看了3.3和3.4以及the FAQ的发行说明,但我找不到任何提及。相反,FAQ建议(参见下面的[2]):
如何从std :: string(或char *变量)获取pANTLR3_INPUT_STREAM?
功能[1]pANTLR3_INPUT_STREAM [2]antlr3NewAsciiStringCopyStream ([3]pANTLR3_UINT8 inString, [4]ANTLR3_UINT32 size, [5]pANTLR3_UINT8 name)
创建一个ASCII字符串流作为ANTLR 3的输入, 复制输入字符串。
我有使用ANTLR 3和此功能的遗留代码,我无法轻松切换到ANTLR 4.我可以继续使用3.2版本或上面列出的其他功能之一,但是知道什么是好的发生了,以及如何最好地处理这个问题。
答案 0 :(得分:2)
我最近也遇到过这个问题。看起来,您可以使用以下函数来获得相同的功能:
pANTLR3_INPUT_STREAM antlr3StringStreamNew (pANTLR3_UINT8 data, ANTLR3_UINT32 encoding, ANTLR3_UINT32 size, pANTLR3_UINT8 name);
对于编码,您使用ANTLR3_ENC_8BIT
(或其他方式)
汤姆。