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

36.7 構文テーブルの内部構造

構文テーブルは文字テーブル(文字テーブルを参照)として実装されていますが、ほとんどの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開き括弧12comment-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)
関数: string-to-syntax desc

構文記述子 desc(文字列)が与えられた場合、この関数は対応する生の構文記述子を返します。

関数: syntax-class-to-char syntax

生の構文記述子 syntax(整数)が与えられたとき、この関数は対応する構文記述子(文字)を返します。

関数: syntax-after pos

この関数は、構文プロパティおよび構文テーブルを考慮し、位置 pos 以降のバッファ内の文字に対する生の構文記述子を返します。pos がバッファのアクセス可能領域(アクセス可能領域 を参照)外にある場合、戻り値は nil となります。

関数: syntax-class syntax

この関数は、生の構文記述子 syntax の構文コードを返します。より正確には、生の構文記述子の syntax-code コンポーネントから構文フラグを記録する上位16ビットをマスクし、得られた整数を返します。

syntax が nil の場合、戻り値は nil となります。 これは、式が

(syntax-class (syntax-after pos))

pos がバッファのアクセス可能範囲外である場合、エラーを発生させたり誤ったコードを返したりすることなく、nil と評価されます。