1

ANTLR 3.2 的 C 运行时发行版曾经有一个函数声明为

ANTLR3_API pANTLR3_INPUT_STREAM antlr3NewAsciiStringCopyStream
    (pANTLR3_UINT8 inString, ANTLR3_UINT32 size, pANTLR3_UINT8 name);

include/antlr3defs.h. 还有一些类似的功能,例如antlr3NewAsciiStringInPlaceStreamantlr3NewUCS2StringInPlaceStream等等。

但在 3.4 版本中,这些功能似乎消失了。它们既没有在任何 .h 文件中声明,也没有编译到库中。

我查看了3.33.4的发行说明以及常见问题解答,但我找不到任何提及。相反,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 版本或上面列出的其他功能之一,但很高兴知道发生了什么,并且如何最好地处理这个问题。

4

1 回答 1

2

我最近也遇到了这个问题。看起来,您可以使用以下函数来获得相同的功能:

pANTLR3_INPUT_STREAM antlr3StringStreamNew (pANTLR3_UINT8 data, ANTLR3_UINT32 encoding, ANTLR3_UINT32 size, pANTLR3_UINT8 name);

对于编码,您将使用ANTLR3_ENC_8BIT(或其他方式)

汤姆。

于 2013-01-30T14:54:21.337 回答