読み方 : ビーエヌエフ

BNF【Backus-Naur Form】BN記法

別名  :バッカス・ナウア記法/BNF記法

概要

BNFとは、コンピュータが扱う人工言語の文法を定義する際に用いられるメタ言語(言語を記述するための言語)の一つ。コンピュータ言語の多くはその仕様をBNFで定義している。
BNFのイメージ画像

BNFは言語内で意味を持つ記号列と、それがどのような内容を取りうるのかを「<記号>::=定義」という構文を用いて列挙していく。左辺値に現れる記号は右辺値で変換可能な「非終端記号」で、右辺値にしか現れない記号はそれ以上変換できない「終端記号」である。

定義には「<居住自治体>::=<都道府県> <市区町村>」のようにスペースで区切って複数の要素の組み合わせ(連接)を置いたり、「<真理値>::=true|false」のように縦棒(|)で区切って複数の要素の選択を表すことができる。BNF内で定義する記号列は山括弧(<>)で括り、括られてない記号列は定義対象の言語における表記とみなされる。

BNFは構文を形式的に定義するための言語で、意味を規定するものではないため、BNFだけで言語のすべてを定義することはできない。プログラミング言語の定義だけでなく、プロトコルデータ形式、マークアップ言語の定義などにも使われる。マークアップ言語として最も普及しているXMLも、その構文はBNF(正確には拡張BNF)で規定されている。

BNFは1959年にアメリカ人のジョン・バッカス(John Backus)氏が提案し、デンマーク人のピーター・ナウア(Peter Naur)氏が修正を加え、1960年にプログラミング言語ALGOL」(ALGOL 60規格)の仕様定義のために初めて採用された。現在ではオリジナルのBNFに拡張が加えられた「拡張BNF」(EBNF)が使われることが多いが、EBNFには変種や独自拡張が多く、どの版を使用しているかに注意を払う必要がある。

他の辞典等による「BNF」の解説 (外部サイト)

資格試験などの「BNF」の出題履歴

▼ 基本情報技術者試験
令6修1 問3】 次のBNFにおいて非終端記号〈A〉から生成される文字列はどれか。〈R 0 〉::= 0 | 3 | 6 | 9〈R 1 〉::= 1 | 4 | 7〈R 2 〉::= 2 | 5 | 8〈A〉::=〈R 0 〉|〈A〉〈R 0 〉|〈B〉〈R 2 〉|〈C〉〈R 1 〉〈B〉::=〈R 1 〉|〈A〉〈R 1 〉|〈B〉〈R 0 〉|〈C〉〈R 2 〉〈C〉::=〈R 2 〉|〈A〉〈R 2 〉|〈B〉〈R 1 〉|〈C〉〈R 0 〉。
令1秋 問7】 次のBNFで定義される<変数名>に合致するものはどれか。<数字>::=0|1|2|3|4|5|6|7|8|9<英字>::=A|B|C|D|E|F<英数字>::=<英字>|<数字>|_<変数名>::=<英字>|<変数名><英数字>。
この記事の著者 : (株)インセプト IT用語辞典 e-Words 編集部
1997年8月より「IT用語辞典 e-Words」を執筆・編集しています。累計公開記事数は1万ページ以上、累計サイト訪問者数は1億人以上です。学術論文や官公庁の資料などへも多数の記事が引用・参照されています。