36.6.3 Состояние парсера

Состояние парсера — это список из (в настоящее время) одиннадцати элементов, описывающих состояние синтаксического парсера после того, как он обработал текст между заданной начальной и конечной точками в буфере с использованием parse-partial-sexp (см. Низкоуровневый парсинг). Функции парсинга, такие как syntax-ppss (см. Поиск состояния парсинга для позиции), также возвращают состояние парсера в качестве значения. parse-partial-sexp может принимать состояние парсера в качестве аргумента для возобновления парсинга.

Ниже приведены значения элементов состояния парсера:

  1. Глубина в скобках, считая от 0. Внимание: это может быть отрицательным, если между начальной и конечной точками парсера больше закрывающих, чем открывающих скобок.
  2. Позиция символа начала самой внутренней группировки в скобках, содержащей точку остановки; nil, если такой нет.
  3. Позиция символа начала последней завершенной подвыражения; nil, если такого нет.
  4. Не-nil, если находится внутри строки. Точнее, это символ, который завершит строку, или t, если должен завершить ее общий разделитель строки.
  5. t, если находится внутри не вложенного комментария (любого стиля комментария; см. Флаги синтаксиса); или уровень вложенности комментария, если находится внутри комментария, который может быть вложенным.
  6. t, если конечная точка находится сразу после символа кавычки.
  7. Минимальная глубина скобок, встреченная во время этого сканирования.
  8. Какой тип комментария активен: nil, если не в комментарии или в комментарии стиля «a»; 1 для комментария стиля «b`; 2 для комментария стиля «c`; и syntax-table для комментария, который должен быть завершен общим разделителем комментария.
  9. Позиция начала строки или комментария. Пока внутри комментария, это позиция, где начался комментарий; пока внутри строки, это позиция, где началась строка. Когда вне строк и комментариев, этот элемент равен nil.
  10. Список позиций открытых скобок, начиная с самой внешней.
  11. Когда последняя просканированная позиция буфера была (потенциально) первым символом двухсимвольного конструкта (разделитель комментария или экранированный/символьно-кавычированный символ), 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.