BNF

BNF

[16] BNF は、文脈自由文法の記述書式の一種です。 BNF とその変種は非常によく用いられています。多くの場合、 「BNF」と呼ばれていてもオリジナルな BNF ではなく、何らかの拡張や変更が加えられたものになっています。 また、大規模な変更を加えた ABNFEBNF もよく用いられますが、 これらにもまた、様々な変種があります。

標準

[32] BNF と呼ばれるものは数多あり、それら全体の「標準」と言えるものは存在していません。

[5] ISO/IEC の仕様でも BNF やその変種がよく用いられます。 EBNF を規定した ISO/IEC 14977 という国際規格もあります (ただし、これを用いていない ISO/IEC 規格もあります)。

[17] IETF の定義するインターネット標準としては、 STD 68/RFC 5234 で定義される ABNF があります。

変種

[25] BNF には沢山の互いに互換性のない変種があります。 色々な場面でそれぞれの変種が使われており、どれが標準とは一概には言えません。

[29] 第3章 TAD 詳細仕様書, , http://www.chokanji.com/developer/doc/btron3/shared_data/tad1.html#abx

[30] Microsoft Word - 910-S004-uBNF_0.00.05-061012.doc - UID-CO00003-0.00.05.pdf, , http://www.uidcenter.org/ja/wp-content/themes/wp.vicuna/pdf/UID-CO00003-0.00.05.pdf

[31] BSON (Binary JSON): Specification, , https://bsonspec.org/spec.html

a pseudo-BNFリンク syntax

(リンク先はEnglishWikipedia)

を定義なく使っています。

限界

[21] BNF の表現能力の限界は、方言により様々です。しかし次のような制限があるのが一般的です。

[26] BNF の変種やその利用方法によっては、言語のすべてを記述することを諦め、 自然言語文で制約を記述したものを構文規則の一部として記述できることがあります。 専用の構文がなくても、注釈が実質的にそのように利用されていることがあります。


[27] BNF に限らず機械可読な構文記述方式では表現能力に限界があり、 仕様書の利用者の混乱の元になると非難する人もいます。 BNF 等の方が (一定の訓練を経た人なら) 記述された内容を理解しやすいかもしれませんが、 自然言語等でより詳細・厳密に記述する方が望ましいとされます。

[28] かつて HTML その他の Web に関する技術の仕様書では DTDABNF が使われていました。しかし、 自然言語で記述された要件を無視して機械可読な要件だけを検査することで適合性を判断する誤った考え方の温床となっていたこと、 著者に対する生成の要件と実装に対する解釈の要件を明確に区別することが困難で混乱の元となること、 構文解析器誤りの処理など実際の動作を厳密に記述できる方式が存在しないことなどにより、 Web Applications 1.0 (後の HTML5) 以来自然言語のみの記述に置き換えられていきました。 現在では限られた部分で ABNF によって著者に対する要件のみが記述されるにとどまっています。

関連

メモ

[15] BNFとプログラム、、、? http://pc8.2ch.net/test/read.cgi/tech/1096884257/

[18] IRC logs: freenode / #whatwg / 20090906 ( 版) http://krijnhoetmer.nl/irc-logs/whatwg/20090906#l-169

[19] OWL 2 Web Ontology Language Manchester Syntax ( ( 版)) http://www.w3.org/TR/2012/NOTE-owl2-manchester-syntax-20121018/#The_Grammar

[20] バッカス・ナウア記法 - Wikipedia ( ( 版)) http://ja.wikipedia.org/wiki/%E3%83%90%E3%83%83%E3%82%AB%E3%82%B9%E3%83%BB%E3%83%8A%E3%82%A6%E3%82%A2%E8%A8%98%E6%B3%95