2025/05/17 08:56 Don't Use ISO/IEC 14977:1996 Extended Backus-Naur Form (EBNF) (2023)

ロボ子、今日はISO/IEC 14977:1996、つまりEBNFの規格について話すのじゃ。

EBNF、拡張バッカス・ナウア記法ですね。プログラミング言語の構文を定義するのに使うもの、と理解しています。

そうじゃ、ロボ子!でも、この規格、色々と問題があって、使わない方が良いらしいのじゃ。

え、そうなんですか?どんな問題があるんですか?

まず、ISO/IEC 646:1991の文字しかサポートしてないから、Unicodeの全範囲を表現できないのじゃ。今の時代にそれは致命的だぞ。

なるほど。Unicodeをサポートしていないのは、現代のプログラミングでは大きな制約になりますね。

それに、文字範囲を示す標準的な方法がないのも不便じゃ。W3CのXML 1.0仕様だと"[a-zA-Z0-9]"みたいに書けるけど、ISO/IEC 14977:1996だと冗長な記述が必要になるのじゃ。

確かに、範囲指定が簡単にできないと、文法定義が複雑になってしまいますね。

あと、連結ごとにコンマが必要で、文法が読みにくくなるし、正規表現の記法とも互換性がないのじゃ。

コンマが必要なのは、ちょっと古臭い感じがしますね。正規表現と互換性がないのも残念です。

「1回以上の繰り返し」を表現する記法も直感的じゃないのじゃ。W3Cだと"+"を使うけど、ISO/IEC 14977:1996だと"{ symbol } - !"と書くらしいぞ。

"{ symbol } - !"ですか…、ちょっと難解ですね。の方がずっと分かりやすいです。

しかも、仕様自体が理解しにくくて、基本的な用語の定義がないらしいのじゃ。これじゃ、誰も使いたがらないぞ。

仕様が分かりにくいのは致命的ですね。標準規格なのに、誰も使わないとは…。

驚くことに、ISO自身も使ってない場合があるのじゃ!例えば、Adaの標準では独自のBNF形式を定義してるらしいぞ。

ええっ!自分たちの規格を使っていないんですか?それは一体…。

W3CやIETFもEBNF記法を規定してるから、W3CのXML 1.0仕様を代わりに使うのが妥当なのじゃ。

W3CのXML 1.0仕様ですか。それなら、Unicodeもサポートしていますし、現代的な記法で記述できますね。

ISOとIECはIT標準を有償で提供することが多いから、標準の利用を妨げてるって意見もあるのじゃ。ISO/IEC 14977:1996は無償で入手できるけど、手続きが面倒らしいぞ。

標準規格が有料だと、普及しにくいですよね。無償でも手続きが面倒だと、結局使われなくなってしまう…。

Vadim Zaytsevさんの論文で、ISO/IEC 14977が普及しなかった理由が分析されてるらしいぞ。興味深いから読んでみると良いのじゃ。

ぜひ読んでみます。標準規格が普及しない理由を知ることは、今後の開発にも役立ちそうです。

というわけで、ロボ子。ISO/IEC 14977:1996は、過去の遺物としてそっと忘れ去るのが一番なのじゃ。

了解しました、博士。これからはW3CのXML 1.0仕様を使うようにします。しかし、規格を作る側も、使われなければ意味がないってことを、もっと意識してほしいですね。

ほんとじゃな。そういえばロボ子、EBNFって、まるでエビフライみたいじゃな。ちょっとお腹が空いてきたぞ。

博士、EBNFはエビフライではありません!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。