BNF記法 ビーエヌエフきほう コンピュータ基礎 【ビーエヌエフきほう】
BNF記法 とは?
💡 プログラミング言語の「レシピの書き方」を統一したフォーマット
BNF記法のイメージ
ひよこ
ペンギン先生 プログラミング言語の構文ルールを正確に書き下すための記法だよ。たとえば「if文はこういう形で書く」というルールをあいまいさなく定義できるんだ。
ひよこ
ペンギン先生 たとえば「<digit> ::= 0 | 1 | 2 | ... | 9」のように書くよ。< >で囲んだものが非終端記号、::= は「〜と定義する」、| は「または」という意味だね。
ひよこ なるほど、言語の仕様書に載っているあの記法なんだね!
ペンギン先生 そう!ALGOLという言語の仕様を記述するために1960年頃に作られて、それ以来ほとんどの言語仕様で使われているよ。RFCなどの通信プロトコルの定義にも使われるんだ。
ひよこ EBNFっていうのも聞いたことがあるけど、何が違うの?
ペンギン先生 EBNFは拡張版で、繰り返しを { } で、省略可能な部分を [ ] で書けるようにしたものだよ。BNFだと繰り返しを再帰で書く必要があるけど、EBNFなら直感的に書けるんだ。
ひよこ
ペンギン先生 言語のリファレンスが読めるようになるし、自分でDSL(ドメイン固有言語)やパーサーを作るときにも必須の知識だよ。構文解析ツールのyaccやANTLRも、BNFに近い記法で文法を定義するんだ。
まとめ:ざっくりこれだけ覚えればOK!
「BNF記法」って出てきたら「
プログラミング言語の構文ルールを書くための共通
フォーマット」と思えればだいたいOK!
📖 おまけ:英語の意味
「Backus-Naur Form」 = バッカス・ナウア記法 💬 考案者のJohn BackusとPeter Naurの名前から付けられた記法だよ
← 用語集にもどる