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


35.6.3 パーサー状態

パーサー状態(parser state)とはparse-partial-sexp (Low-Level Parsingを参照)を使用してバッファー内の指定された開始位置と終了位置の間のテキストをパースした後の構文パーサーの状態を記述する(現在のところは)11要素のリストです。syntax-ppssのようなパース関数 (Position Parseを参照) も値としてパーサー状態をリターンします。 parse-partial-sexp can はパースを再開するために引数としてパーサー状態を受け取ります。

以下はパーサー状態の要素の意味です:

  1. 0から数えたカッコの深さ。警告: パーサーの開始位置と終了位置の間に開カッコより多くの閉カッコがあれば負になることもある。
  2. 停止位置を含む最内のカッコグループの開始文字位置。なければnil
  3. 最後の終端された完全な部分式の開始文字位置。なければnil
  4. 文字列内部なら非nil。より正確には文字列を終端させるであろう文字、または汎用文字列区切りが終端すべきような場合にはt
  5. ネスト不可なコメント(または任意のコメントスタイル。Syntax Flagsを参照)の内部ならt、ネスト可なコメントの内部ならコメントのネストレベル。
  6. 終了位置がクォート文字直後ならt
  7. 当該スキャン中に遭遇した最小のカッコ深さ。
  8. アクティブなコメントの種類。コメント以外、またはスタイル‘a’のコメント内ならnil、スタイル‘b’のコメントなら1、スタイル‘c’のコメントなら2、汎用コメント区切り文字で終端されるべきコメントならsyntax-table
  9. 文字列やコメントの開始位置。コメント内部ならコメントが始まる位置。文字列内部なら文字列が始まる位置。文字列やコメントの外部ならこの要素はnil
  10. もっとも外側のカッコから始まる開きカッコのカレント位置のリスト。
  11. スキャンされた最後のバッファー位置が(潜在的に)2文字構文(コメント区切りやエスケープされた文字とクォートされた文字のペア)の最初の文字ならその位置のsyntax-code (Syntax Table Internalsを参照)、それ以外ならnil

パース継続のための引数としてparse-partial-sexpに渡す場合には要素1、2、6は無視されます。要素9と10は主にパーサーコードにより内部的に使用されます。

以下の関数を使用することにより追加でパーサー状態からいくつかの有用な情報を利用できます:

Function: syntax-ppss-toplevel-pos state

この関数はパーサー状態stateから文法構造上トップレベルでのパースでのスキャンした最後の位置をリターンする。“トップレベル”とはすべてのカッコ、コメント、文字列の外部であることを意味する。

stateがトップレベルの位置に到達したパースを表す場合には値はnil

Function: syntax-ppss-context state

stateをリターンするスキャン終了位置が文字列内にあればstring、コメント内にあればcommentをリターンする。