トップページ > ドキュメント > Xcodeでの構文色付け定義
.xclangspecで行う構文定義は、大雑把に字句(単語やキーワード)の定義と字句を組み合わせる文法の定義に分かれます。そして、字句定義には、大きく分けて以下の4種類の定義方法があります。
{
Identifier = "my.lang.sample.text1";
Syntax = {
Match = (
"^[+-]?[0-9]+",
"^zero"
);
Type = "xcode.syntax.number";
};
},
正規表現を使って字句を定義するには、Match内に正規表現の文字列を書きます。Matchは配列なので、複数の正規表現が書けます。これらはorされるので、どれかにマッチすればこの構文にマッチしたことになります。なお、正規表現の「^」は行頭ではなく、単語境界の頭にマッチするようです。
{
Identifier = "my.lang.sample.text2";
Syntax = {
Words = (
"Red",
"Blue",
"Yellow"
);
Type = "xcode.syntax.keyword";
};
},
単純なキーワード文字列は、Words内に文字列を並べて定義します。プログラミング言語の予約語は、これを使って定義するのが一般的なようです。
{
Identifier = "my.lang.sample.text3";
Syntax = {
StartChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
Chars = "abcdefghijklmnopqrstuvwxyz";
Type = "xcode.syntax.preprocessor";
};
},
その他、識別子となりうる単語はStartCharsとCharsを使って定義します。StartCharsが単語の最初の1文字の集合。Charsがそれに続く文字の集合です。ユーザーが定義する変数名、関数名、クラス名など定義するときに使われます。
{
Identifier = "my.lang.sample.text4";
Syntax = {
Start = "/*";
End = "*/";
Type = "xcode.syntax.comment";
};
},
{
Identifier = "my.lang.sample.text5";
Syntax = {
Start = "\"";
EscapeChar = "\\";
End = "\"";
Type = "xcode.syntax.string";
};
},
ある文字に囲まれた部分を1つの字句とする場合の定義方法です。/*コメント*/や"文字列"などの定義に使います。囲みに使う文字列をStartとEndで指定します。囲みの終端文字を字句に含めたくない場合は、Endの代わりにUntilを使います。また、"文字列"のように囲みに使う文字そのものを囲みの内部で使いたい場合は、EscapeCharでエスケーブ用の文字を指定できます。
また、StartとEndには、構文識別子を書く事もできます。これにより、より複雑な範囲を一つの字句として定義できます。