Состояние парсера
Состояние парсера — это список (в настоящее время) одиннадцати элементов, описывающих состояние синтаксического парсера после того, как он проанализировал текст между заданной начальной и конечной точками в буфере с использованием parse-partial-sexp (см. Парсинг низкого уровня). Функции парсинга, такие как syntax-ppss (см. Парсинг позиции), также возвращают состояние парсера в качестве значения. parse-partial-sexp может принимать состояние парсера в качестве аргумента для возобновления парсинга.
Вот значения элементов состояния парсера:
- Глубина в скобках, считая с 0. Предупреждение: может быть отрицательной, если закрывающих скобок больше, чем открывающих между начальной и конечной точками парсера.
- Позиция символа начала самого внутреннего скобочного группирования, содержащего конечную точку;
nilесли нет. - Позиция символа начала последнего завершённого подвыражения;
nilесли нет. - Не-
nilесли внутри строки. Точнее, это символ, который завершит строку, илиtесли строку должен завершить символ-разделитель строки по умолчанию. tесли внутри не-вложенного комментария (любого стиля комментария; см. Флаги синтаксиса); или уровень вложенности комментария, если внутри комментария, который может быть вложен.tесли конечная точка находится сразу после символа кавычки.- Минимальная глубина скобок, встреченная во время этого сканирования.
- Тип активного комментария:
nilесли не в комментарии или в комментарии стиля ‘a’; 1 для комментария стиля ‘b’; 2 для комментария стиля ‘c’; иsyntax-tableдля комментария, который должен быть завершён символом-разделителем комментария по умолчанию. - Позиция начала строки или комментария. Внутри комментария — это позиция начала комментария; внутри строки — это позиция начала строки. Вне строк и комментариев этот элемент —
nil. - Список позиций открытых скобок, начиная с самой внешней.
- Если последняя просканированная позиция буфера была (возможным) первым символом двусимвольного конструктора (разделитель комментария или пара «экранированного»/«символа с кавычками»), то syntax-code (см. Внутреннее устройство таблицы синтаксиса) этой позиции. В противном случае
nil.
Элементы 1, 2 и 6 игнорируются в состоянии, которое вы передаёте в качестве аргумента parse-partial-sexp для продолжения парсинга. Элементы 9 и 10 в основном используются внутри кода парсера.
Некоторая дополнительная полезная информация доступна из состояния парсера с помощью этих функций:
- Функция: syntax-ppss-toplevel-pos state
-
Эта функция извлекает из состояния парсера state последнюю просканированную позицию в процессе парсинга, которая находилась на верхнем уровне в грамматической структуре. «На верхнем уровне» означает вне скобок, комментариев или строк.
Значение —
nilесли state представляет собой парсинг, который достиг позиции на верхнем уровне.
- Функция: syntax-ppss-context state
Возвращает
stringесли конечная позиция сканирования, возвращающая state, находится в строке, иcommentесли она находится в комментарии. В противном случае возвращаетnil.
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/Parser-State.html