2. 規則の定義
2.1. 規則の命名 (Rule Naming)
規則の名前は単に名前そのもの、すなわち、英字で始まり、英字、数字およびハイフン (ダッシュ) の組み合わせが続く文字の並びです。
NOTE:
規則名は大文字と小文字を区別しません。
元の BNF とは異なり、山括弧 ("<", ">") は必須ではありません。ただし、規則名の使用を識別しやすくする場合には、規則名の周囲に山括弧を使用してもかまいません。これは通常、自由形式の文章 (free-form prose) における規則名の参照、または空白で区切られていない文字列に結合される部分規則を区別する場合 (以下で説明する繰り返しに関する議論に示すような場合) に限定されます。
2.2. 規則の形式 (Rule Form)
規則は次の並びによって定義されます。
name = elements crlf
ここで
視覚的な便宜のため、規則定義は左揃えにされます。規則が複数行を必要とする場合、継続行はインデントされます。左揃えとインデントは ABNF 規則の最初の行を基準とし、文書の左マージンと一致する必要はありません。
2.3. 終端値 (Terminal Values)
規則は、しばしば文字 (character) と呼ばれる終端値 (terminal value) の文字列に解決されます。ABNF では、文字は単なる非負整数です。特定の文脈では、値から文字集合 (character set) (ASCII など) への特定のマッピング (符号化) が指定されます。
終端値は 1 つ以上の数字文字で指定され、それらの文字の基数の解釈が明示的に示されます。現在定義されている基数は次のとおりです。
b = binary
d = decimal
x = hexadecimal
したがって、次のようになります。
CR = %d13
CR = %x0D
これらはそれぞれ、復帰 (carriage return) に対する [US-ASCII] の 10 進表現と 16 進表現を指定します。
そのような値の連結文字列は、その値内での文字の区切りを示すピリオド (".") を用いて簡潔に指定されます。したがって、次のようになります。
CRLF = %d13.10
ABNF は、引用符で囲まれたリテラルテキスト文字列 (literal text string) を直接指定することを認めています。したがって、次のようになります。
command = "command string"
リテラルテキスト文字列は、印字可能文字 (printable character) の連結された集合として解釈されます。
NOTE:
ABNF 文字列は大文字と小文字を区別せず、これらの文字列の文字集合は US-ASCII です。
したがって、次のようになります。
rulename = "abc"
および
rulename = "aBc"
は、"abc", "Abc", "aBc", "abC", "ABc", "aBC", "AbC", "ABC" に一致します。
大文字と小文字を区別する規則を指定するには、文字を個別に指定します。
例えば、次のようになります。
rulename = %d97 %d98 %d99
または
rulename = %d97.98.99
は、小文字のみからなる文字列 abc にのみ一致します。
2.4. 外部符号化 (External Encodings)
終端値文字の外部表現は、記憶域または伝送環境の制約に応じて異なります。したがって、同じ ABNF ベースの文法 (grammar) が、7 ビット US-ASCII 環境用、バイナリオクテット (binary octet) 環境用、さらに 16 ビット Unicode を使用する場合用など、複数の外部符号化を持つことがあります。符号化の詳細は ABNF の範囲外ですが、付録 B は、インターネットの大部分で一般的であった 7 ビット US-ASCII 環境の定義を提供しています。
外部符号化を構文から分離することにより、同じ構文に対して代替の符号化環境を使用できることを意図しています。