ABNF

ABNF (拡張バッカス・ナウア記法) について



ABNF(Augmented Backus-Naur Form)は、[バッカス・ナウア記法]を拡張したもので、主に通信プロトコルなどの形式体系を記述するために用いられるメタ言語です。RFC 5234で標準化されており、IETF(Internet Engineering Task Force)がプロトコルを定義する際によく利用されます。

ABNFの概要



ABNFは、生成規則の集合によって構成されます。各規則は、以下のような構造を持ちます。

abnf
rule = definition comment


  • - rule: 規則の名前を表す非終端記号。大文字と小文字は区別されます。
  • - definition: その規則の内容を定義する記号列。
  • - comment: コメントとして記述されるテキストで、説明を補足するのに役立ちます。

規則名は、アルファベット文字で始まり、その後にはアルファベット、数字、ハイフンが続く形で構成されます。規則名を囲む山括弧 `<>` は必須ではありませんが、視認性を高めるために使用されることが一般的です。

ABNFは7ビットASCIIでエンコードされ、最上位の8ビットは常にゼロに設定されます。

終端記号の値



終端記号は、一つ以上の文字コードで表されます。文字コードは、パーセント記号 "%" に続けて基数(b: 2進数、d: 10進数、x: 16進数)と値を指定します。複数の値を連結するには、ドット"."を使用します。例えば、復帰コードは `%d13` や `%x0D` と記述できます。また、復帰と改行を連続して表す場合は `%d13.10` のように記述します。

リテラル文字列は、ダブルクォート `"` で囲んで表現します。これらの文字列は大文字と小文字を区別せず、US-ASCII文字セットが適用されます。例えば、`"abc"` は、`"abc"`、`"Abc"`、`"aBc"`、`"abC"`、`"ABc"`、`"AbC"`、`"aBC"`、`"ABC"` のいずれとも一致します。大文字と小文字を区別したい場合は、文字コードによる表現を使用するか、RFC 7405で導入された `%s` プレフィックスを使用します。例えば、`"aBc"` を明示的に表現する場合は、`%d97 %d66 %d99` または `%s"aBc"` と記述します。

ABNF のオペレータ



ABNFでは、さまざまなオペレータを使用して複雑な規則を記述できます。

空白

空白は定義内の要素を区切るために使用されます。

連結

規則を並べて記述することで、連結を表します。

abnf
fu = %x61 ; a
bar = %x62 ; b
mumble = fu bar fu ; "aba" に一致


択一

スラッシュ `/` で区切って記述することで、複数の選択肢を表します。

abnf
fubar = fu / bar ; fu または bar のどちらかに一致


選択肢の追加

`=/` を使用して、既存の規則に選択肢を追加できます。

abnf
ruleset = alt1 / alt2
ruleset =/ alt3
ruleset =/ alt4 / alt5


この例では、 `ruleset` は `alt1`、`alt2`、`alt3`、`alt4`、`alt5` のいずれかに一致します。

値の範囲指定

`%c##-##` の形式で数値の範囲を指定できます。

abnf
OCTAL = %x30-37 ; 0 から 7 までの文字に一致


グループ化

括弧 `()` で要素をグループ化できます。

abnf
group = elem (fubar / tarfu) snafu ; "elem fubar snafu" または "elem tarfu snafu" に一致


変数の反復

`nmRule` の形式で、要素の繰り返し回数を指定できます。

  • - `element`: 0回以上の繰り返し
  • - `1element`: 1回以上の繰り返し
  • - `23element`: 2回または3回の繰り返し

特定回数の反復

`nRule` の形式で、特定回数の繰り返しを指定できます。これは `nnRule` と同等です。

オプション

括弧 `[]` で囲むことで、オプションの要素を表します。

abnf
[fubar snafu] ; fubar snafu はオプション


コメント

セミコロン `;` から行末までがコメントです。

オペレータの優先順位



オペレータは以下の順で優先されます。

1. 文字列、名前形成
2. コメント
3. 値の範囲
4. 反復
5. グループ化、オプション
6. 連結
7. 択一

択一と連結を組み合わせる場合は、グループ化で優先順位を明確にすることを推奨します。

中核規則



ABNFには、基本的な規則がいくつか定義されています。これらは、他の規則を定義する際に使用されます。

ABNFの例



アメリカの住所表記の例を ABNF で表現すると以下のようになります。

abnf
address = name 1
SP address-line (CRLF address-line)
name = 1
ALPHA
SP = %x20 ; space
address-line = number SP street SP city-state-zip
number = 1
DIGIT
street = 1ALPHA
city-state-zip = 1
ALPHA "," SP 1ALPHA SP 1DIGIT


参考文献



  • - RFC 7405 Case-Sensitive String Support in ABNF
  • - RFC 5234 Augmented BNF for Syntax Specifications: ABNF
  • - RFC 4234 Augmented BNF for Syntax Specifications: ABNF (Obsolete)
  • - RFC 2234 Augmented BNF for Syntax Specifications: ABNF (Obsolete)

ABNFは、ネットワークプロトコルやデータ形式を正確に記述するための強力なツールです。この解説を通じて、ABNFの基本を理解し、より複雑な形式記述に応用できるようになることを願っています。

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。