[16] [DFN@en[BNF]] は、[[文脈自由文法]]の記述書式の一種です。 [[BNF]] とその変種は非常によく用いられています。多くの場合、 「[[BNF]]」と呼ばれていてもオリジナルな [[BNF]] ではなく、何らかの拡張や変更が加えられたものになっています。 また、大規模な変更を加えた [[ABNF]] や [[EBNF]] もよく用いられますが、 これらにもまた、様々な変種があります。 * 標準 [5] [[ISO/IEC]] の仕様でも [[BNF]] やその変種がよく用いられます。 [[EBNF]] を規定した [[ISO/IEC 14977]] という[[国際規格]]もあります (ただし、これを用いていない [[ISO/IEC]] [[規格]]もあります)。 [17] [[IETF]] の定義する[[インターネット標準]]としては、 [[STD 68]]/[[RFC 5234]] で定義される [[ABNF]] があります。 * 変種 - [[ABNF]] - [[EBNF]] -[[DXLのBNF]] -[[ISO 6093のBNF]] -[[ISO/IEC 10646のBNF]] -[[JIS X 4081のBNF]] -[[PascalのBNF]] -[[WBXMLのBNF]] - [[RBNF]] - [[R-BNF]] - [[BNF擬似スキーマ]] * 関連 - 類似した表記法 -- [[正規表現]] ― [[正規表現]]構文風味の [[BNF]] についてもこの項を参照。 -- [[内容モデル]] ― [[SGML]] や [[XML]] の[[要素内容]]の記述用の[[言語]]。 -- [[ASN.1]] -- [[C#の構文記述方法]] - 関係の深い概念 -- [[生成規則]] -- [[再帰降下型構文解析]] * メモ - [1] ''About BNF notation'' - [2] ''BNF etc.'' - [3] ''BNF and EBNF: What are they and how do they work?'' - [4] '' 再帰下降構文解析 Recursive Descent Parsing'' - [6] というか、はっきりいって、どんなのまで BNF と言うのかよく分からん。みんな好き勝手に拡張した自分の形式を BNF だと主張しているような。 - [7] 例えば [[JIS X 4081]]:2002 の「実体構造の表記法」は BNF なのかどうか。そうじゃないような気もするけどそうであるような気もするし。規格に BNF だとは書いてないから、 BNF じゃないのかな:) - [8] [[SGML]] の[[要素]]の[[内容モデル]]も BNF のような気もするけど、それが BNF なら[[正規表現]]も BNF のような気がしてくる。しかし正規表現の一種のような [[XML]] の構文記述法は [[EBNF]] だったりする。 - [9] でも流石に [[ASN.1]] は BNF ではないわな。 - [10] >>8 SGML 内容モデルの記法は規格本文では構文の定義に使われてる。そしてその使われ方はいかにも BNF(ry - [11] 単純な要素の線形連結を[[間隔]]を置いて並べるだけか、 [[COMMA]] を挟んで区切るのかの違いって、 BNF か否かに関係するのかな? もともとの BNF や [[IETF]] [[ABNF]] や XML の [[EBNF]] は間隔だけだけど、 SGML や JIS X 4081 は読点で区切っている。 - [12] >>11 正規表現は区切りに何もいらない。というか ([[perl]] 拡張とかでない限り) 間隔も入れちゃ駄目。 (間隔も読点もそれ自身として扱われる。) - [13] >>9 ASN.1 は BNF に[[関数]]を導入しただけにも見える。 (''だけ''ではない?) - [14] まあどれが BNF でどれが BNF でなくても良いが、結局構文記述のためのメタ構文は必然的に同じようなものになってしまうということか? [15] [CITE[BNFとプログラム、、、?]] [18] [CITE[IRC logs: freenode / #whatwg / 20090906]] ([TIME[2009-10-17 22:08:59 +09:00]] 版) [19] [CITE[OWL 2 Web Ontology Language Manchester Syntax]] ( ([TIME[2012-10-18 22:45:56 +09:00]] 版))