【问题标题】:What happened to antlr3NewAsciiStringCopyStream in ANTLR 3.4 (C-runtime)?ANTLR 3.4(C 运行时)中的 antlr3NewAsciiStringCopyStream 发生了什么?
【发布时间】:2013-01-21 02:59:07
【问题描述】:

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.4the 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 版本或上面列出的其他功能之一,但很高兴知道什么发生了,以及如何最好地处理。

【问题讨论】:

  • 这个带有const char * 缓冲区的 ANTLR3.4C example 可能会有所帮助

标签: c antlr antlr3


【解决方案1】:

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

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

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

汤姆。

【讨论】:

  • 我会在几天后仔细研究一下——但现在谢谢 (+1)。我可能暂时不会接受答案,因为我仍然希望得到一些背景解释,但无论如何您提出的功能似乎是正确的选择。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-13
  • 2011-12-01
  • 2023-03-29
  • 1970-01-01
相关资源
最近更新 更多