パーサーを生成したパーサー ジェネレーターで次のことができるものはありますか? パーサーが完全なファイルを再解析する必要がないように。
はじめまして、
マティアス
パーサーを生成したパーサー ジェネレーターで次のことができるものはありますか? パーサーが完全なファイルを再解析する必要がないように。
はじめまして、
マティアス
Tim Wagner はかなり長い間これに取り組みました。彼のGLR 構文解析エンジンに関する論文を参照してください。 基本的には、解析ツリーを保持し、「ストリーム全体」を一連の解析ツリーと変更されたトークンとして再解析しようとすることで機能します。そのかなり賢い。
Scott McPeak は、 Elsaがインクリメンタル GLR パーサーを実装していると主張しています。私の知る限り、Elsaは主にバッチ解析に使用されます。
私は明確な「はい」か「いいえ」を言うことはできませんが、私はそれを疑っています. パーサー ジェネレーターは、任意の文法のパーサーを作成するように設計されています。1 行を再検査するだけで構文解析ツリーを更新すると、文法や許可される変更に強い制約が課せられます。これは、構文解析ツリーの高度に局所化された部分のみに影響を与える必要があるためです。したがって、誰かがそのような機能を汎用パーサージェネレーターに統合したとは思えません。
Packrat の上に一般的な解析エンジンを実装することに成功しました。メモ化のため、この目的にうまく適合します。エディターは、変更された行と重なるメモ化されたチャンクのみを無効にし、ファイル全体を再解析しますが、変更された行のみが実際に解析され、残りはすべて前回の実行からメモ化されたままになります。
すぐに使用できるソリューションはありませんが、Packrat の実装を選択して、その上に独自のものを作成できます。
ここで、Packrat がテキスト エディターとどのように統合されているかを確認できます。