4

おはようございます、

私は言語パーサーを作成しており、現在次のことを行うロールバック キャッシュに使用する最適な構造を探しています。

  • ストリームから新しい文字を要求すると、ロールバックが要求された場合に備えて、文字がキャッシュに追加されます。
  • ロールバックが要求されたら、キャッシュ内の特定のポイントに戻り、別の文字が要求されたときに代わりにそこから取得できるようにします。
  • トークンが見つかったら、ロールバック キャッシュ内の現在の位置までのすべてを削除します。

要するに、どのデータ構造が最適であると思われるかを知りたいです。

  • 優先度 1: 文字の追加 (codePoints は歓迎される追加)
  • 優先度 2: データ構造で部分文字列 (StringBuilder.delete(...) など) を実行する (または完全にクリアする)
  • 優先度 3: キャッシュの文字列を作成できること (例: StringBuilder.toString())

私はすぐにあなたから話を聞くことを望む!

4

2 に答える 2

1

もし私があなただったら、そのような特殊な用途のために、パフォーマンスとリソースの制約がある可能性があるため、プリミティブから独自のバッファーを実装します。既存の構造を適応させるのはもっと難しいと思います。もちろん、問題がなければ、CharSequenceAppendable、などのよく知られた関連インターフェースに準拠しようとしますList

于 2011-05-14T11:00:55.113 に答える
0

StringBuilder と の組み合わせがPushbackReader必要なものを提供すると思います。StringBuilder を使用して文字を蓄積し、トークン文字列を作成し、PushbackReader のメソッドmarkresetメソッドを使用してロールバックを実装します。

または、入力ファイル全体を文字列として事前に読み取り、文字列にインデックスを付けて部分文字列を取得することでトークナイザーを実装します。

于 2011-05-14T10:47:09.557 に答える