36.1 Концепции таблиц синтаксиса

Таблица синтаксиса — это структура данных, которая может использоваться для поиска класса синтаксиса и других синтаксических свойств каждого символа. Таблицы синтаксиса используются программами Lisp для сканирования и перемещения по тексту.

Внутренне таблица синтаксиса — это таблица символов (см. Таблицы символов). Элемент по индексу c описывает символ с кодом c; его значение — это ячейка cons, которая указывает синтаксис данного символа. Подробности см. в Внутреннее устройство таблиц синтаксиса. Однако вместо использования aset и aref для изменения и инспекции содержимого таблицы синтаксиса, вам обычно следует использовать более высокоуровневые функции char-syntax и modify-syntax-entry, описанные в Функции таблиц синтаксиса.

Функция: syntax-table-p object

Эта функция возвращает t, если object является таблицей синтаксиса.

Каждый буфер имеет свой основной режим, и каждый основной режим имеет свое представление о классе синтаксиса различных символов. Например, в режиме Lisp символ ‘;’ начинает комментарий, но в режиме C он завершает оператор. Для поддержки этих вариаций таблица синтаксиса локальна для каждого буфера. Обычно каждый основной режим имеет свою собственную таблицу синтаксиса, которую он устанавливает во все буферы, использующие этот режим. Например, переменная emacs-lisp-mode-syntax-table содержит таблицу синтаксиса, используемую режимом Emacs Lisp, а c-mode-syntax-table содержит таблицу синтаксиса, используемую режимом C. Изменение таблицы синтаксиса основного режима изменяет синтаксис во всех буферах этого режима, а также во всех буферах, которые впоследствии переведены в этот режим. Иногда несколько похожих режимов используют одну таблицу синтаксиса. См. Примеры основных режимов для примера настройки таблицы синтаксиса.

Таблица синтаксиса может наследоваться от другой таблицы синтаксиса, которая называется ее родительской таблицей синтаксиса. Таблица синтаксиса может оставлять класс синтаксиса некоторых символов неопределенным, присваивая им класс синтаксиса «inherit»; такой символ затем наследует класс синтаксиса, указанный родительской таблицей синтаксиса (см. Таблица классов синтаксиса). Emacs определяет стандартную таблицу синтаксиса, которая является таблицей синтаксиса по умолчанию, и также является таблицей синтаксиса, используемой в режиме Fundamental.

Функция: standard-syntax-table

Эта функция возвращает стандартную таблицу синтаксиса, которая является таблицей синтаксиса, используемой в режиме Fundamental.

Таблицы синтаксиса не используются парсером Emacs Lisp, который имеет свои встроенные синтаксические правила, которые нельзя изменить. (Некоторые системы Lisp предоставляют способы переопределения синтаксиса чтения, но мы решили исключить эту функцию из Emacs Lisp для простоты.)