【ビーエヌエフきほう】
BNF記法 とは?
最終更新:
💡 書ける文の形を決める、文法のレシピ
言語の構文を、名前を付けた規則の組で表す記法。文脈自由文法を記述するために使い、基本的なBNFでは「::=」で定義、「|」で選択肢を表す。仕様書によって表記は異なり、拡張版のEBNFやABNFもある。
📌 このページのポイント
- 非終端記号を、別の記号や文字の並びで定義する
- ::=は定義、|は選択肢を示す基本的な表記
- 構文の規則を書いても、文の意味すべてが決まるわけではない
- EBNFやABNFでは表記が異なる。仕様書の凡例を読む
BNFは何を決めるもの?
文や記号を、どんな形で並べられるかを書く方法だよ。たとえば「色はredかblueのどちらか」という小さな言語も、規則として書ける。言語の仕様を読むときに役立つね。
その規則は、どう書くの?
この例なら「<色> ::= red | blue」と書けるよ。<色>は規則の名前、::=は定義、|は「または」。redとblueは、これ以上規則へ分けない終端の文字列として使っているんだ。
文法を書いたら、意味も全部決まる?
構文と意味は分けて考えよう。たとえば数の並びが文法に合っていても、それを色番号と読むか数量と読むかは、別の意味の規則が必要だね。BNFで書けば文法の曖昧さも自動で消える、というわけではないよ。
EBNFはどう違うの?
通信の仕様書にも出る?
まとめ:ざっくりこれだけ覚えればOK!
「BNF記法」って出てきたら「言語の文法を、規則の組で書く方法」と思えばだいたいOK!
📖 おまけ:英語の意味
「Backus–Naur Form」 = バッカス・ナウア記法
💬 BackusとNaurの名を含む呼び方。ALGOL 60の構文定義に使われた記法が、BNFとして知られるようになったんだ。