
_START_ARTICLE_
Ctags
_START_PARAGRAPH_
Ctags（英: Ctags）はソース及びヘッダ内にある名前のインデックス（又はタグ）ファイルを生成するプログラム。様々なプログラミング言語に対応している。言語に依存するが、サブルーチン(関数)、変数、クラスのメンバ、マクロ等がインデックス化される。これらのタグによりテキストエディタなどのツールで高速かつ容易に定義を参照できる。相互参照ファイルを出力でき、また名前についての情報を人が読みやすい形で列挙した言語ファイルを生成することもできる。_NEWLINE_CtagsはKen ArnoldがBSD Unix用に開発した。後にJim KlecknerによりFortranがサポートされ、ビル・ジョイによりPascalがサポートされた。
_START_SECTION_
ctagsの派生版
_START_PARAGRAPH_
ctagsにはいくつかの派生版が存在する。
_START_SECTION_
Etags
_START_PARAGRAPH_
EtagsはEmacs上で動作するctagsである。ctagsが生成するViフォーマットのタグファイル用にのみ意味のあるオプションはetagsでは解釈されず無視される。
_START_SECTION_
Exuberant Ctags
_START_PARAGRAPH_
Darren Hiebertが開発したExuberant Ctagsは元々Vimと共に配布されていたが、Vim 6のリリースに合わせて独立したプロジェクトになった。 Emacs互換機能をサポートしている。_NEWLINE_Exuberant Ctagsは正規表現を用いることにより数多くのプログラミング言語に対応でき、30以上の言語に対応している。
_START_SECTION_
タグファイルのフォーマット
_START_PARAGRAPH_
複数のタグファイルフォーマットがある。その一部を以下で説明する。説明中の<\x##>は16進数でバイトを表している。
_START_SECTION_
Ctagsフォーマット及びExuberant Ctagsフォーマット
_START_PARAGRAPH_
オリジナルのctagsフォーマットとExuberant Ctagsフォーマットはファイルフォーマットが似ている。
_START_SECTION_
Etagsフォーマット
_START_PARAGRAPH_
Emacs用の etags のフォーマット。タグファイルは通常は TAGS という名前である。_NEWLINE_etags のファイルは複数のセクションで構成されている。入力ソースファイル毎に1つのセクションを持つ。各セクションはプレーンなテキストファイルであるが、特別な制御用にアスキー外の文字を使用する。以下の説明においてこれらの文字は<>で囲まれた16進数のコードで表す。_NEWLINE_セクションは2行のヘッダで始まる。1行目は<\x0c>一文字のみを含む。2行目は次のようになる。_NEWLINE__NEWLINE_{ソースファイル<},{タグ定義データのバイト数}_NEWLINE_ヘッダの後にはタグの定義が続く。各定義毎に1行。フォーマットは以下の通り。_NEWLINE__NEWLINE_{タグ定義テキスト}<\x7f>{タグ名}<\x01>{行番号},{バイトオフセット}_NEWLINE_タグ定義よりタグの名称が導き出せる場合は{タグ名} とその後ろの \x01 が無視される。
_START_SECTION_
例
_START_PARAGRAPH_
ソースコードとして次のような1行だけのtest.cを読み込ませた場合、_NEWLINE_#define CCC(x)_NEWLINE_TAGS ファイルは次のようになる。_NEWLINE__NEWLINE_<\x0c>_NEWLINE_test.c,21_NEWLINE_#define CCC(<\x7f>CCC<\x01>1,0