コンテンツにスキップ

英文维基 | 中文维基 | 日文维基 | 草榴社区

「シンタックスハイライト」の版間の差分

出典: フリー百科事典『ウィキペディア(Wikipedia)』
削除された内容 追加された内容
編集の要約なし
Cewbot (会話 | 投稿記録)
m Bot作業依頼: sourceタグをsyntaxhighlightタグに置換 (Category:非推奨のsourceタグを使用しているページ) - log
54行目: 54行目:
以下は[[C++]]のコードをシンタックスハイライトしたものである。
以下は[[C++]]のコードをシンタックスハイライトしたものである。


<source lang="cpp">
<syntaxhighlight lang="cpp">
// Allocate all the windows
// Allocate all the windows
for (int i = 0; i < max; i++)
for (int i = 0; i < max; i++)
60行目: 60行目:
wins[i] = new Window();
wins[i] = new Window();
}
}
</syntaxhighlight>
</source>


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

2020年7月5日 (日) 22:56時点における版

シンタックスハイライトされたHTMLコード

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

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

実用上の利点

Javascriptにて、watch='falseに続く区切り文字「'」が1つ足りないと、強調表示に及ぼす影響を示す様子。

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

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

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

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

しかし、シンタックスハイライトには

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

という指摘もある[7]

実例

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

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

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

複数の言語への対応と限界

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

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

例えば、ユーザーによっては以下のような要求もありうる。

  • 複数の言語を含むテキストを取り扱いたい。例えば JavaScript コードを埋め込んだHTMLファイルなど。
  • エディタが対応していない言語のテキストを取り扱いたい。例えば、マイナーな言語や擬似コードなど。

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

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

関連項目

出典

  1. ^ 入力時の構文チェック - MATLAB & Simulink - MathWorks 日本”. MathWorks, Inc.. 2018年8月24日閲覧。
  2. ^ EmEditor 使い方: 新しい構文ファイルを作成するには”. Emurasoft, Inc.. 2018年8月24日閲覧。
  3. ^ IBM Knowledge Center - COBOL、JCL、PL/I、アセンブラー、および C++ ファイルの編集”. IBM Corporation. 2018年8月24日閲覧。
  4. ^ Nobuhide Tsuda. “世界最速「さくさくエディタ」”. 2018年8月24日閲覧。
  5. ^ Sun[tm ONE Studio 4 update 1, Mobile Edition リリースノート]”. 2019年8月29日閲覧。
  6. ^ Sarkar, Advait (2015). “シンタックスに色付けするとプログラム理解にどう影響するか [The impact of syntax colouring on program comprehension”] (英語). 課題グループ議事録(第26回プログラム心理学会議) [Proceedings of the 26th Annual Conference of the Psychology of Programming Interest Group]: 49-58. http://www.ppig.org/library/paper/impact-syntax-colouring-program-comprehension 2015年9月5日閲覧。. 
  7. ^ Linus Åkesson (2007年8月26日). “シンタックス強調表示の不利な事例 [A case against syntax highlighting]” (英語). 2007年8月28日閲覧。
  8. ^ LEXX – A programmable structured editor, Cowlishaw, M. F., IBM Journal of Research and Development, Vol 31, No. 1, 1987, IBM Reprint order number G322-0151