Emacsでは、プログラムのソースコードを解析して構文木を生成するためのさまざまな手法が提供されています。構文木において、テキストはもはや単なる一次元の文字ストリームではなく、各ノードがテキストの一部分を表す構造化されたノードの木として扱われます。これにより、構文木を用いて、精緻なフォント化、インデント、ナビゲーション、構造化編集といった興味深い機能を実現できます。
Emacsには、バランス式を解析するためのシンプルな機能が備わっています(Parsing Expressionsを参照)。また、汎用的なナビゲーションやインデントのためのSMIEライブラリもあります(Simple Minded Indentation Engineを参照)。
これらに加え、EmacsではTree-Sitterライブラリのサポートがコンパイル時に組み込まれている場合、同ライブラリとの連携も提供しています。Tree-Sitterライブラリはインクリメンタルパーサーを実装しており、幅広いプログラミング言語をサポートしています。
この関数は、現在のEmacsセッションでTree-sitterの機能が利用可能な場合、non-nilを返します。
Tree-sitterライブラリを用いてプログラムソースを解析し、プログラムの構文木にアクセスするためには、Lispプログラムで言語文法ライブラリを読み込み、その言語と現在のバッファ用のパーサーを作成する必要があります。その後、Lispプログラムはパーサーに対して構文木の特定のノードについて問い合わせることができます。さらに、各ノードに関するさまざまな情報にアクセスしたり、強力なパターンマッチング構文を用いてノードを検索したりすることが可能です。本章では、これらすべての方法に加え、複数のプログラミング言語が混在するソースファイルをLispプログラムで扱う方法について解説します。