mapfile 指令は、出力オブジェクトのさまざまな側面を指定するために存在します。これらの指令は共通の構文を共有しています。属性に名前と値のペアを使用し、階層およびグループを表すために {...} 構文を使用します。
mapfile 指令の構文は、次の一般的な形式に基づきます。
もっとも簡単な形式は、値を持たない指令の名前です。
directive;
次の形式は、指令の名前に、値または空白区切りの値のリストが付いたものです。
directive = value....;
示されている「=」代入演算子のほかに、「+=」および「-=」形式の代入も使用できます。「=」演算子は、指定された指令を、指定された値または値リストに設定します。「+=」演算子は、右側の値を現在の値に追加するために使用され、「-=」演算子は値を削除するために使用されます。
さらに複雑な指令では、複数の属性を {....} 括弧で囲んで、複数の属性を 1 つの単位としてグループ化して操作します。
directive [name] { attribute [directive = value]; .... } [name];
開き括弧 ({) の前に名前を置くことができ、指定されたステートメントの結果に名前を付けるために使用されます。同様に、閉じ括弧 (}) の後ろで終端のセミコロン (;) の前に、1 つ以上のオプションの名前を置くことができます。これらの名前は、定義される項目が、ほかの名前付き項目と関係があることを表すために使用されます。
グループ内の属性の形式は、上記で説明した同じ構文を使用します。つまり、単純な指令に、値が付いたものか、代入演算子 (=、+=、-=) の後に値が付いたものか、または空白区切りの値のリストが付いたもので、セミコロン (;) で終了します。
指令が持つ属性にはサブ属性を持たせることができます。そのような場合、サブ属性も階層を示すために、入れ子の {....} 括弧でグループ化されます。
directive [name] { attribute { subattribute [= value]; .... }; } [name....];
mapfile 構文の文法では、入れ子が許可される深さに制限がありません。入れ子の深さは、指令の要件のみに依存します。