Next: Categories, Previous: Parsing Expressions, Up: Syntax Tables [Contents][Index]
構文テーブルは文字テーブル(Char-Tablesを参照)として実装されていますが、ほとんどのLispプログラムが直接それらの要素に作用することはありません。構文テーブルは構文データとして構文記述子を格納しません(Syntax Descriptorsを参照)。それらは内部的なフォーマットを使用しており、それについてはこのセクションで説明します。この内部的フォーマットは構文プロパティとして割り当てることもできます(Syntax Propertiesを参照)。
構文テーブル内の各要素はraw構文記述子(raw syntax descriptor)という(syntax-code
.
matching-char)
という形式のコンスセルです。syntax-codeは下記のテーブルに応じて構文クラスと構文フラグをエンコードする整数です。matching-charが非nil
なら、それはマッチング文字(構文記述子内の2つ目の文字と同様)を指定します。
raw構文記述子の文字を取得するには(aref (syntax-table) ch)
のようにaref
(Array Functionsを参照)を使用してください。
以下はさまざまな構文クラスに対応する構文コードです。
Code | Class | Code | Class |
0 | 空白文字 | 8 | 区切り文字ペアー |
1 | 句読点 | 9 | エスケープ |
2 | 単語 | 10 | 文字クォート |
3 | シンボル | 11 | コメント開始 |
4 | 開カッコ | 12 | コメント終了 |
5 | 閉カッコ | 13 | 継承 |
6 | 式プレフィクス | 14 | 汎用コメント |
7 | 文字列クォート | 15 | 汎用文字列 |
たとえば標準構文テーブルでは‘(’にたいするエントリーは(4 . 41)
、41は‘)’の文字コードです。
構文フラグは最下位ビットから16ビット目より始まる高位ビットにエンコードされます。以下のテーブルは対応する各構文フラグにたいして2のべき乗を与えます。
Prefix | Flag | Prefix | Flag |
‘1’ | (lsh 1 16) | ‘p’ | (lsh 1 20) |
‘2’ | (lsh 1 17) | ‘b’ | (lsh 1 21) |
‘3’ | (lsh 1 18) | ‘n’ | (lsh 1 22) |
‘4’ | (lsh 1 19) | ‘c’ | (lsh 1 23) |
与えられた構文記述子desc(文字列)にたいして、この関数は対応するraw構文記述子をリターンする。
この関数はバッファー内の位置posの後の文字にたいして、構文テーブルと同様に構文プロパティも考慮したraw構文記述子をリターンする。posがバッファーのアクセス可能範囲(accessible portionを参照)の外部ならリターン値はnil
。
この関数はraw構文記述子syntaxにたいする構文コードをリターンする。より正確にはこれはraw構文記述子のsyntax-code要素から構文フラグを記録する高位16ビットをマスクして、その結果の整数をリターンする。
syntaxがnil
ならリターン値はnil
。これは以下の式
(syntax-class (syntax-after pos))
はpos
がバッファーのアクセス可能範囲外部なら、エラーをthrowしたり不正なコードをリターンすることなくnil
に評価されるため。