トップページドキュメント > 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";
    };
},

その他、識別子となりうる単語はStartCharsCharsを使って定義します。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つの字句とする場合の定義方法です。/*コメント*/"文字列"などの定義に使います。囲みに使う文字列をStartEndで指定します。囲みの終端文字を字句に含めたくない場合は、Endの代わりにUntilを使います。また、"文字列"のように囲みに使う文字そのものを囲みの内部で使いたい場合は、EscapeCharでエスケーブ用の文字を指定できます。

また、StartEndには、構文識別子を書く事もできます。これにより、より複雑な範囲を一つの字句として定義できます。

Copyright(C)2001-2010 STRIPE-NET. All Right Reserved.