読み方 : ビーエヌエフ

BNF 【Backus-Naur Form】 BN記法 / バッカス・ナウア記法 / BNF記法

概要

BNF(Backus-Naur Form)とは、コンピュータが扱う人工言語の文法を定義する際に用いられるメタ言語(言語を記述するための言語)の一つ。コンピュータ言語の多くはその仕様を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には変種や独自拡張が多く、どの版を使用しているかに注意を払う必要がある。

(2024.8.21更新)

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

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

▼ 基本情報技術者試験
令6修1 問3】 次のBNFにおいて非終端記号〈A〉から生成される文字列はどれか。〈R0〉::= 0 | 3 | 6 | 9〈R1〉::= 1 | 4 | 7〈R2〉::= 2 | 5 | 8〈A〉::=〈R0〉|〈A〉〈R0〉|〈B〉〈R2〉|〈C〉〈R1〉〈B〉::=〈R1〉|〈A〉〈R1〉|〈B〉〈R0〉|〈C〉〈R2〉〈C〉::=〈R2〉|〈A〉〈R2〉|〈B〉〈R1〉|〈C〉〈R0〉。
令1秋 問7】 次のBNFで定義される<変数名>に合致するものはどれか。<数字>::=0|1|2|3|4|5|6|7|8|9<英字>::=A|B|C|D|E|F<英数字>::=<英字>|<数字>|_<変数名>::=<英字>|<変数名><英数字>。