構文テーブルとは、各文字の構文クラスやその他の構文的特性を参照するために用いられるデータ構造である。Lispプログラムでは、テキストの走査や移動に構文テーブルが利用される。
内部的には、構文テーブルは文字テーブル(文字テーブルを参照)となっています。インデックス c の要素はコード c
の文字を記述しており、その値は当該文字の構文を指定するコンスセルです。詳細は 構文テーブルの内部構造
を参照してください。ただし、構文テーブルの内容を変更・検査する際に aset や aref を使用するのではなく、通常は 構文テーブル関数 で説明されているより高レベルな関数 char-syntax および modify-syntax-entry を使用してください。
この関数は、object が構文テーブルである場合に t を返します。
各バッファには独自のメジャーモードがあり、各メジャーモードは各種文字の構文クラスについて独自の定義を持っています。例えば、Lispモードでは文字
‘;’
はコメントの開始を意味しますが、Cモードでは文を終了させます。こうした差異に対応するため、構文テーブルは各バッファごとにローカルに保持されます。通常、各メジャーモードは独自の構文テーブルを持ち、そのモードを使用するすべてのバッファにそれを設定します。例えば、変数
emacs-lisp-mode-syntax-table にはEmacs
Lispモードで使用される構文テーブルが、c-mode-syntax-table
にはCモードで使用される構文テーブルが格納されています。メジャーモードの構文テーブルを変更すると、そのモードのすべてのバッファに加え、その後そのモードに設定されたあらゆるバッファの構文も変更されます。場合によっては、複数の類似したモードが一つの構文テーブルを共有することもあります。構文テーブルの設定方法の例については、メジャーモードの例を参照してください。
構文テーブルは、別の構文テーブルから継承することができ、そのテーブルは親構文テーブルと呼ばれます。構文テーブルは、一部の文字に「inherit」構文クラスを割り当てることで、その構文クラスを未指定のままにすることができます。すると、その文字は親構文テーブルで指定された構文クラスを持つことになります(構文クラス表を参照)。Emacsは、デフォルトの親構文テーブルであり、かつFundamentalモードで使用される標準構文テーブルを定義しています。
この関数は、Fundamentalモードで用いられる構文テーブルである標準構文テーブルを返します。
構文テーブルはEmacs Lispリーダーでは使用されません。同リーダーには、変更不可能な独自の組み込み構文規則が備わっています。(一部のLispシステムでは読み出し構文を再定義する手段が提供されていますが、簡便性の観点から、Emacs Lispではこの機能を省くことにしました。)