BNFとバッカス記法とは?びーえぬえふ
BNFとバッカス記法とは、言語の構文規則を、非終端記号を「::=」で置き換える規則として定義する記法。「|」で選択肢を並べ、再帰で入れ子や繰り返しを表す。電文フォーマットや設定ファイルの仕様を自然言語で書くと解釈が実装ごとにぶれるが、BNFで書けば構文解析器を規則から機械的に起こせ、あいまいさを仕様の段階で潰せる。
最終更新:2026-10-06
システムアーキテクトを最短で暗記・合格する →背景
初期のプログラミング言語仕様は散文で書かれ、「この書き方は許されるのか」を処理系ごとに解釈した結果、同じ言語のはずのものが実装ごとに違って動いた。ALGOL 60の報告書がバッカスとナウアの記法で構文を規則として書き切ったことで、仕様書から処理系を作れる状態が生まれた。設計者にとっては、外部インタフェースの仕様を「誰が読んでも同じ実装になる形」で書くための道具であり、独自フォーマットを定義するなら散文で書くよりも後工程の問合せが減る。
具体例
<数字列> ::= <数字> | <数字><数字列> と書けば、数字列は1桁の数字か、数字に数字列が続いたものだと再帰で言い切れる。JSONやURIの仕様(RFC 8259、RFC 3986)はBNFを拡張したABNFで文法を定義しており、yacc/bisonやANTLRといったパーサ生成器は、この形の規則から構文解析器を生成する。
試験での引っ掛け
定義できるのは構文(形)までで、意味(セマンティクス)はBNFの範囲外。正規表現と取り違えやすいが、正規表現では括弧の対応のような入れ子構造を表せず、再帰で定義できるBNFなら表せる。::= の左辺が定義される非終端記号、右辺がその内容であり、向きを逆に読むと構文図の設問を落とす。
関連用語
出典・参考
解説は資格暗記が独自に作成しています。過去問の出典は各問題に記載のとおりです。