GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/elisp/Parser-State.html ・ emacs-doc.conao3.com

36.6.3 パーサーの状態

パーサー状態とは、バッファ内の指定された開始点と終了点の間のテキストをparse-partial-sexpを用いて解析した後の、構文パーサーの状態を記述する(現時点で)11個の要素からなるリストのことです(低レベル解析を参照)。syntax-ppss(位置に対応するパーサー状態の取得を参照)などの解析関数も、値としてパーサー状態を返します。parse-partial-sexpは、解析を再開するためにパーサー状態を引数として受け取ることができます。

パーサー状態の各要素の意味は以下の通りです。

  1. 0から始まる括弧内の深度。 注意: パーサーの開始点と終了点の間に、開き括弧よりも閉じ括弧の方が多い場合、この値は負になることがあります。
  2. 停止点を含む最内層の括弧グループの開始位置;nil ない場合はなし。
  3. 終了した最後の完全な部分式の開始位置;ない場合は nil。
  4. 文字列内の場合は Non-nil。より正確には、これは文字列を終端させる文字であり、汎用的な文字列区切り文字で終端させる場合は t となります。
  5. t ネスト不可能なコメント(コメントスタイルを問わず。構文フラグを参照)内にある場合、またはネスト可能なコメント内にある場合はそのコメントのネストレベル。
  6. t 終端点が引用符の直後にある場合。
  7. このスキャン中に検出された最小の括弧の深さ。
  8. どのようなコメントが有効か:コメント内でない場合、またはスタイル ‘a’ のコメント内であれば nil、スタイル ‘b’ のコメントであれば 1、スタイル ‘c’ のコメントであれば 2、そして汎用的なコメント区切り文字で終了すべきコメントであれば syntax-table となります。
  9. 文字列またはコメントの開始位置。コメント内の場合はコメントが始まった位置、文字列内の場合は文字列が始まった位置となります。文字列やコメントの外にある場合、この要素は nil となります。
  10. 最外のものから順に、現在開いている括弧の位置の一覧。
  11. 最後にスキャンされたバッファ位置が、2文字構成要素(コメント区切り記号、またはエスケープ済み/文字引用符で囲まれた文字ペア)の(潜在的な)先頭文字であった場合は、その位置の syntax-code(構文テーブルの内部仕様を参照)。それ以外の場合は nil。

要素1、2、6は、パースを継続するためにparse-partial-sexpに引数として渡す状態で無視されます。要素9と10は、主にパーサーコード内部で使用されます。

これらの関数を用いてパーサーの状態から、さらにいくつかの有用な情報を取得できます:

関数: syntax-ppss-toplevel-pos state

この関数は、パーサー状態 state から、構文構造のトップレベルにあった、パース中に最後にスキャンされた位置を抽出します。「トップレベル」とは、括弧、コメント、または文字列の外側であることを意味します。

state がトップレベルの位置に到達した構文解析を表す場合、その値は nil となります。

関数: syntax-ppss-context state

state を返すスキャンの終了位置が文字列内にある場合は string を、コメント内にある場合は comment を返します。それ以外の場合は nil を返します。