Emacs предоставляет различные способы разбора исходного текста программы и получения синтаксического дерева. В синтаксическом дереве текст больше не рассматривается как одномерный поток символов, а как структурированное дерево узлов, где каждый узел представляет часть текста. Таким образом, синтаксическое дерево может обеспечить интересные функции, такие как точное форматирование шрифта, отступы, навигация, структурированное редактирование и т. д.
Emacs имеет простую возможность разбора сбалансированных выражений (см. Разбор выражений). Также существует библиотека SMIE для общей навигации и отступов (см. Простой движок отступов).
В дополнение к этому, Emacs также предоставляет интеграцию с библиотекой tree-sitter, если поддержка этой библиотеки была скомпилирована. Библиотека tree-sitter реализует инкрементальный парсер и поддерживает широкий спектр языков программирования.
Эта функция возвращает не-nil, если функции tree-sitter доступны для текущей сессии Emacs.
Чтобы иметь возможность разбора исходного кода программы с использованием библиотеки tree-sitter и доступа к синтаксическому дереву программы, программа на Lisp должна загрузить библиотеку грамматики языка и создать парсер для этого языка и текущего буфера. После этого программа на Lisp может запрашивать у парсера информацию о конкретных узлах синтаксического дерева. Затем она может получить доступ к различным видам информации о каждом узле и искать узлы с помощью мощного синтаксиса сопоставления шаблонов. В этой главе объясняется, как это сделать, а также как программа на Lisp может работать с исходными файлами, содержащими несколько языков программирования.