インデントのような構文分析にとっては、与えられたバッファー位置に応じた構文状態の計算が有用なことが多々あります。それを手軽に行うのが以下の関数です。
この関数はパーサーがバッファーの可視範囲の先頭から開始して位置posで停止するだろうというパーサー状態をリターンする。 パーサー状態の説明はパーサー状態を参照のこと 。
リターン値はバッファーの可視範囲の先頭からposまでパースするために低レベル関数parse-partial-sexp
(低レベルのパースを参照)を呼び出した場合と同じようになる。しかしsyntax-ppss
は計算速度向上のためにキャッシュを使用する。この最適化のために、リターンされるパーサー状態のうち2つ目の値(前の完全な部分式)と6つ目の値(最小のカッコ深さ)は意味をもたない。
この関数はsyntax-ppss-flush-cache
(以下参照)にたいして、before-change-functions
(フックの変更を参照)にバッファーローカルなエントリーを追加するという副作用をもつ。このエントリーはバッファー変更にたいしてキャッシュの一貫性を保つ。とはいえbefore-change-functions
が一時的にletでバインドされている間にsyntax-ppss
が呼び出された場合、またはinhibit-modification-hooks
使用時のようにバッファーがフックを実行せずに変更される場合にはキャッシュは更新されないかもしれない。そのような場合には明示的にsyntax-ppss-flush-cache
を呼び出す必要がある。