私は、パーサー ジェネレーターと、ストリームを最初から最後まで一度に処理するパーサーの基本に精通しています。
私の質問は、構文を強調表示するテキスト エディターのような状況についてです。ユーザーが非常に大きなファイルに 1 文字ずつ変更を加えると、ファイル全体を再解析して再強調表示するために多くの計算を実行する必要があります。
私が考えることができる簡単な最適化:
- キーストロークが数秒間アイドル状態になるまで、その操作を遅らせます
- ファイル全体を再解析しますが、書式設定は表示されているビューポート テキストにのみ適用できます
しかし、ファイルの先頭から開始せずに「ローカル」テキストのみを再処理するための一般的に適用可能な手法はありますか?
考え:
- アップストリームの変更の影響は、ダウンストリームの変更よりも影響が少ないように思われるため、アルゴリズムが許可する先読みトークンの数によっては、その多くのトークンからファイルの末尾まで再処理できるのではないでしょうか?
- ほとんどの再処理要求時にカーソルがどこにあるかを知っているので、その時点での状態のスナップショットをキャプチャして、そこから再開することができます (それが役立つ場合)。
しかし、私はこれが解決されたか、それが機能しないことを誰かが知っていること、および一般的な文法にはファイル全体の解析が常に必要であることを前提としています。
ありがとう!