Next: , Previous: , Up: 構文テーブル   [Contents][Index]


36.7 構文テーブルの内部

構文テーブルは文字テーブル(文字テーブルを参照)として実装されていますが、ほとんどのLispプログラムが直接それらの要素に作用することはありません。構文テーブルは構文データとして構文記述子を格納しません(構文記述子を参照)。それらは内部的なフォーマットを使用しており、それについてはこのセクションで説明します。この内部的フォーマットは構文プロパティとして割り当てることもできます(構文プロパティを参照)。

構文テーブル内の各要素はraw構文記述子(raw syntax descriptor)という(syntax-code . matching-char)という形式のコンスセルです。syntax-codeは下記のテーブルに応じて構文クラスと構文フラグをエンコードする整数です。matching-charが非nilなら、それはマッチング文字(構文記述子内の2つ目の文字と同様)を指定します。

raw構文記述子の文字を取得するには(aref (syntax-table) ch)のようにaref (配列を操作する関数を参照)を使用してください。

以下はさまざまな構文クラスに対応する構文コードです。

CodeClassCodeClass
0空白文字8区切り文字ペアー
1句読点9エスケープ
2単語10文字クォート
3シンボル11コメント開始
4開カッコ12コメント終了
5閉カッコ13継承
6式プレフィクス14汎用コメント
7文字列クォート15汎用文字列

たとえば標準構文テーブルでは‘(’にたいするエントリーは(4 . 41)、41は‘)’の文字コードです。

構文フラグは最下位ビットから16ビット目より始まる高位ビットにエンコードされます。以下のテーブルは対応する各構文フラグにたいして2のべき乗を与えます。

PrefixFlagPrefixFlag
1(ash 1 16)p(ash 1 20)
2(ash 1 17)b(ash 1 21)
3(ash 1 18)n(ash 1 22)
4(ash 1 19)c(ash 1 23)
Function: string-to-syntax desc

与えられた構文記述子desc(文字列)にたいして、この関数は対応するraw構文記述子をリターンする。

Function: syntax-class-to-char syntax

与えられた構文記述子syntax (整数)にたいして、この関数は対応する構文記述子(文字)をリターンする。

Function: syntax-after pos

この関数はバッファー内の位置posの後の文字にたいして、構文テーブルと同様に構文プロパティも考慮したraw構文記述子をリターンする。posがバッファーのアクセス可能範囲(accessible portionを参照)の外部ならリターン値はnil

Function: syntax-class syntax

この関数はraw構文記述子syntaxにたいする構文コードをリターンする。より正確にはこれはraw構文記述子のsyntax-code要素から構文フラグを記録する高位16ビットをマスクして、その結果の整数をリターンする。

syntaxnilならリターン値はnil。これは以下の式

(syntax-class (syntax-after pos))

posがバッファーのアクセス可能範囲外部なら、エラーをthrowしたり不正なコードをリターンすることなくnilに評価されるため。