構文テーブルは文字テーブル(文字テーブルを参照)として実装されていますが、ほとんどのLispプログラムはその要素を直接操作することはありません。構文テーブルは、構文データを構文記述子(構文記述子を参照)として格納するのではなく、本節で説明する内部形式を採用しています。この内部形式は、構文プロパティ(構文プロパティを参照)として割り当てることも可能です。
構文テーブルの各エントリは生の構文記述子であり、(syntax-code . matching-char)
という形式のコンスセルです。syntax-code
は、以下の表に従って構文クラスと構文フラグをエンコードする整数です。matching-char
は、nil でない場合、対応する文字(構文記述子の2番目の文字に相当)を指定します。
文字の生の構文記述子(例:(aref (syntax-table) ch))を取得するには、aref を使用してください(配列を操作する関数を参照)。
各種構文クラスに対応する構文コードは以下の通りです。
| コード | クラス | コード | クラス |
| 0 | 空白文字 | 8 | ペア区切り文字 |
| 1 | 句読点 | 9 | 脱出 |
| 2 | 単語 | 10 | キャラクターの台詞 |
| 3 | 記号 | 11 | コメント開始 |
| 4 | 開き括弧 | 12 | comment-end |
| 5 | 閉じ括弧 | 13 | 継承 |
| 6 | 式接頭辞 | 14 | 汎用コメント |
| 7 | 文字列クォート | 15 | 汎用文字列 |
例えば、標準構文表では、‘(’ の項目は (4 . 41) となっています。41 は ‘)’ の文字コードです。
構文フラグは、最下位ビットから16ビット目までの上位ビットにエンコードされています。この表は、各構文フラグに対応する2のべき乗を示しています。
| 接頭辞 | 国旗 | 接頭辞 | 国旗 |
| ‘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) |
構文記述子 desc(文字列)が与えられた場合、この関数は対応する生の構文記述子を返します。
生の構文記述子 syntax(整数)が与えられたとき、この関数は対応する構文記述子(文字)を返します。
この関数は、構文プロパティおよび構文テーブルを考慮し、位置 pos
以降のバッファ内の文字に対する生の構文記述子を返します。pos がバッファのアクセス可能領域(アクセス可能領域 を参照)外にある場合、戻り値は nil となります。
この関数は、生の構文記述子 syntax の構文コードを返します。より正確には、生の構文記述子の syntax-code コンポーネントから構文フラグを記録する上位16ビットをマスクし、得られた整数を返します。
syntax が nil の場合、戻り値は nil となります。 これは、式が
(syntax-class (syntax-after pos))
pos
がバッファのアクセス可能範囲外である場合、エラーを発生させたり誤ったコードを返したりすることなく、nil と評価されます。