インデントなどの構文解析では、多くの場合、指定されたバッファ位置に対応する構文状態を計算することが有用です。この関数を使えば、それを手軽に行えます。
この関数は、バッファの可視部分の先頭から位置 pos においてパーサーが到達する状態を返します。パーサーの状態に関する説明については、パーサーの状態を参照してください。
戻り値は、低レベル解析関数 parse-partial-sexp
を呼び出してバッファの可視領域の先頭から pos までを解析した場合と同じになります(低レベル解析 を参照)。ただし、syntax-ppss
では計算を高速化するためにキャッシュを使用しています。この最適化により、返されるパーサー状態における2番目の値(直前の完全な部分式)と6番目の値(最小括弧深度)は意味を持ちません。
この関数には副作用があります。syntax-ppss-flush-cache(後述)のために、before-change-functions にバッファローカルなエントリを追加します(Change Hooks
を参照)。このエントリにより、バッファが変更されてもキャッシュの整合性が保たれます。ただし、before-change-functions が一時的に let-bound されている間に syntax-ppss が呼び出された場合や、inhibit-modification-hooks
を使用する場合のようにフックを実行せずにバッファが変更された場合には、キャッシュが更新されないことがあります。そのような場合には、明示的に syntax-ppss-flush-cache を呼び出す必要があります。