シンタックスハイライト

シンタックスハイライト・構文強調 () とは、テキストエディタの機能であり、テキスト中の一部分をその分類ごとに異なる色やフォントで表示するものである。シンタックスカラーリング・構文着色 () とも。

この機能により、プログラミング言語やマークアップ言語といった構造化された言語において、その構造や構文上のエラーが視覚的に区別しやすくなるため、ソースコードの記述が容易となる。エディタによってはシンタックスハイライトと、スペルチェックやコード畳み込みといった、その他の機能を統合して提供するものもある。

実用上の利点 

シンタックスハイライトは、特に複数ページにわたるようなコードについて、テキストの可読性を向上させ、文脈をより明瞭にする手法の1つである。読み手は関心のないコードやコメントを、それが長いものであっても、楽に無視して読むことができる。

また、プログラマがプログラム中の誤りをさがす助けともなる。例えば、ほとんどのエディタは文字列のリテラルを地のコードとは異なった色でハイライトする。文字色の対比から、文字列リテラルの区切り記号の抜けをより簡単に見つけることができる。また、多くのテキストエディタには括弧の対応をチェックする機能もある。カーソル位置の括弧のペアを特別な色で表示することで、正しく対応しているかの確認が容易となる。

エディタによっては、配色の情報を印刷や他のテキスト処理ソフトウェアとの交換に適した形式でエクスポートできるものもある。エクスポート用のファイル形式としてはHTMLや色付きのLaTeX、PostScript、RTFなどが使われる。

シンタックスハイライトが短いプログラムの理解に及ぼす影響を評価したプログラム心理学（PPIG）会議では、その存在によりプログラマがプログラムの構造を内在化するのにかかる時間が有意に減少したという研究が報告された。さらに調査中に視線追跡装置を使って集めたデータを見ると、プログラマはシンタックスの強調表示により、キーワードなど標準的な構文要素に気を取られなくなったと示唆している。

しかし、シンタックスハイライトには
 流し読みがしやすくなるので、プログラマはコード全体を理解しようとはしなくなる
 タイポグラフィ上の理由から、コードをハイライトすると、していないコードよりも実際には判読性が劣ってしまう
という指摘もある。

実例 
以下はC++のコードをシンタックスハイライトしたものである。

// Allocate all the windows
for (int i = 0; i < max; i++)
{
    wins[i] = new Window();
}

この例では、ソフトウェアはキーワード（予約語）としてfor・int・new を、変数名としてi・wins・max を判別し、異なる色でハイライトしている。1行目のコメントもコード部分とは区別できるようにハイライトされている。

複数の言語への対応と限界 
2つ以上の言語に対応するエディタでは、シンタックスハイライトを正しくおこなうために、ユーザーがテキストの言語を指定するか、エディタがファイルの拡張子や内容から言語を自動的に判別する必要がある。

複数の言語のシンタックスハイライトをサポートする方法として、言語ごとにシンタックスハイライトの規則を独立して保持する方式がある。この方式には複数の言語に対応したエディタの作成がある程度は簡単になるという利点があるが、潜在的な限界もある。

例えば、ユーザーによっては以下のような要求もありうる。
 複数の言語を含むテキストを取り扱いたい。例えば JavaScript コードを埋め込んだHTMLファイルなど。
 エディタが対応していない言語のテキストを取り扱いたい。例えば、マイナーな言語や擬似コードなど。

1985年に Live Parsing Editor（LEXXやLPEXと呼ばれる）がオックスフォード英語辞典の電子化のために開発された。これが色付きのシンタックスハイライトを利用したおそらく最初のエディタであろう。その Live parsing 機能はユーザーが文章やプログラム、データファイル用にパーサを追加することができた。

ほとんどのエディタは、言語ごとにパーサを実装するといった複雑で面倒な方法はとらず、パターンマッチングによるヒューリスティクスに基づいてシンタックスハイライトを行うので、その結果は完全に正確というわけにはいかない。さらに、パターンマッチングアルゴリズムによっては、ある種の構文のハイライト処理が非常に遅いものとなってしまう。常にファイル全体を解析するのではなく、表示する部分のみを解析することでこの問題を解決するエディタもある。

関連項目 
 における

 字下げスタイル
 
 構文解析

出典

コンピュータのユーザインタフェース
テキストエディタの機能