Next: Parser State, Previous: Motion via Parsing, Up: Parsing Expressions [Contents][Index]
インデントのような構文分析にとっては、与えられたバッファー位置に応じた構文状態の計算が有用なことが多々あります。それを手軽に行うのが以下の関数です。
この関数はパーサーがバッファー先頭から開始して位置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
を呼び出す必要がある。
この関数はsyntax-ppss
が使用するキャッシュを位置begからフラッシュする。残りの引数ignored-argsは無視される。before-change-functions
(Change Hooksを参照)のような関数で直接使用できるように、この関数はそれらの引数を受け入れる。
メジャーモードは、パース開始を要する箇所を指定することにより、syntax-ppss
の実行をより高速にできます。
これが非nil
なら、それはパーサー状態がnil
であるような以前のバッファー位置(別の言い方をすると任意のコメント、文字列、カッコの外部であるような位置)に移動する関数であること。キャッシュが助けとならない際、syntax-ppss
はその計算をおり最適化するためにこれを使用する。