Что ж, s-выражения по сути являются «абстрактным синтаксисом», в том смысле, что они являются просто конкретным синтаксисом для деревьев абстрактного синтаксиса, и поэтому любой язык может быть представлен в виде s-выражений и управляться с помощью команд s-выражений. Следовательно, syntax-ppss
говорить о «Sexps» - это просто способ Lisp говорить об абстрактных синтаксических деревьях.
Практически, однако, syntax-ppss
обычно не работает ни для одного режима. Он в основном нацелен на Lisp-подобные языки, и если конкретный язык языка слишком сильно отличается от Sexps, больше не имеет смысла использовать команды Sexp для манипулирования языком. Это будет работать, но между абстрактным представлением и конкретным синтаксисом будет слишком большой разрыв, что сделает большинство команд нелогичными.
Тем не менее, некоторая базовая инфраструктура syntax-ppss
является довольно общей. Основные режимы обычно стараются подключиться к нему, потому что он позволяет им хорошо работать со многими встроенными функциями Emacs и предоставляет общий интерфейс для других сторонних пакетов, таких как Smartparens.
В частности, syntax-ppss
опирается на таблицы синтаксиса для строк и комментариев. Синтаксические таблицы классифицируют отдельные символы по их синтаксическому классу. Существуют классы для парных разделителей, разделителей строк и символов комментариев.
Структура строк и комментариев практически одинакова практически во всех языках программирования: строки обычно заключаются в специальные разделители. Комментарии также могут иметь специальные разделители или начинаться с определенного символа и продолжаться до конца строки. Эти структуры могут быть легко зафиксированы в синтаксических таблицах, и почти все основные режимы определяют соответствующие синтаксические таблицы, если только получают выгоду от синтаксического обогащения Emacs.
Следовательно, syntax-ppss
хорошо работает со строками и комментариями практически на любом языке, но поддержка и «полезность» других функций варьируется.