Next: , Previous: , Up: Parsing Expressions   [Contents][Index]


34.6.2 ある位置のパース状態を調べる

インデントのような構文分析にとっては、与えられたバッファー位置に応じた構文状態の計算が有用なことが多々あります。それを手軽に行うのが以下の関数です。

Function: syntax-ppss &optional pos

この関数はパーサーがバッファー先頭から開始して位置posで停止するだろうというパーサー状態をリターンする。 パーサー状態の説明はParser Stateを参照のこと 。

リターン値はバッファー先頭からposまでパースするために低レベル関数parse-partial-sexp(Low-Level Parsingを参照)を呼び出した場合と同じようになる。しかしsyntax-ppssは計算速度向上のためにキャッシュを使用する。この最適化のために、リターンされるパーサー状態のうち2つ目の値(前の完全な部分式)と6つ目の値(最小のカッコ深さ)は意味をもたない。

この関数はsyntax-ppss-flush-cache (以下参照)にたいして、before-change-functions (Change Hooksを参照)にバッファーローカルなエントリーを追加するという副作用をもつ。このエントリーはバッファー変更にたいしてキャッシュの一貫性を保つ。とはいえbefore-change-functionsが一時的にletでバインドされている間にsyntax-ppssが呼び出された場合、またはinhibit-modification-hooks使用時のようにバッファーがフックを実行せずに変更される場合にはキャッシュは更新されないかもしれない。そのような場合には明示的にsyntax-ppss-flush-cacheを呼び出す必要がある。

Function: syntax-ppss-flush-cache beg &rest ignored-args

この関数はsyntax-ppssが使用するキャッシュを位置begからフラッシュする。残りの引数ignored-argsは無視される。before-change-functions (Change Hooksを参照)のような関数で直接使用できるように、この関数はそれらの引数を受け入れる。

メジャーモードは、パース開始を要する箇所を指定することにより、syntax-ppssの実行をより高速にできます。

Variable: syntax-begin-function

これが非nilなら、それはパーサー状態がnilであるような以前のバッファー位置(別の言い方をすると任意のコメント、文字列、カッコの外部であるような位置)に移動する関数であること。キャッシュが助けとならない際、syntax-ppssはその計算をおり最適化するためにこれを使用する。