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を確認しましたが、これについての言及は見つかりませんでした。それどころか、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)

入力文字列をコピーして、ANTLR 3 への入力として ASCII 文字列ストリームを作成します。

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 に答える