Spec-Zone.ru › Elisp

Внутреннее устройство таблиц синтаксиса

Таблицы синтаксиса реализованы как таблицы символов (см. Таблицы символов), но большинство программ Lisp не работают напрямую с их элементами. Таблицы синтаксиса не хранят данные синтаксиса как описатели синтаксиса (см. Описание синтаксиса); они используют внутренний формат, который документирован в этом разделе. Этот внутренний формат также может быть присвоен как свойства синтаксиса (см. Свойства синтаксиса).

Каждый элемент в таблице синтаксиса — это необработанный описатель синтаксиса: ячейка cons вида (syntax-code . matching-char). syntax-code — это целое число, которое кодирует класс синтаксиса и флаги синтаксиса в соответствии с таблицей ниже. matching-char, если не nil, указывает соответствующий символ (аналогично второму символу в описателе синтаксиса).

Используйте aref (см. Функции массивов), чтобы получить необработанный описатель синтаксиса символа, например, (aref (syntax-table) ch).

Вот коды синтаксиса, соответствующие различным классам синтаксиса:

Код Класс Код Класс
0 пробелы 8 символ парного разделителя
1 знаки препинания 9 экранирование
2 слово 10 кавычки символа
3 символ 11 начало комментария
4 открывающая скобка 12 конец комментария
5 закрывающая скобка 13 наследование
6 префикс выражения 14 общий комментарий
7 кавычки строки 15 общая строка

Например, в стандартной таблице синтаксиса запись для ‘(’ равна (4 . 41). 41 — это код символа ‘)’.

Флаги синтаксиса закодированы в старших разрядах, начиная с 16 разрядов от младшего значащего бита. В этой таблице приведены степени двойки, которые соответствуют каждому флагу синтаксиса.

Префикс Флаг Префикс Флаг
‘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))

имело значение nil если pos находится вне доступной части буфера, не вызывая ошибок и не возвращая некорректный код.

Copyright © 1990-1996, 1998-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Syntax-Table-Internals.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API