Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

EBNF(イービーエヌエフ)とは | 意味や読み方など丁寧でわかりやすい用語解説

EBNF(イービーエヌエフ)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。

作成日: 更新日:

読み方

日本語表記

拡張バッカス・ナウア記法 (カクチョウバッカ スナウアキ)

英語表記

EBNF (イービーエヌエフ)

用語解説

EBNF(Extended Backus-Naur Form、拡張バッカス・ナウア記法)とは、プログラミング言語やデータ形式、通信プロトコルといった人工言語の文法を、人間にも機械にも明確かつ厳密に記述するための形式的な記法である。これは、もともと開発されたBNF(Backus-Naur Form)を拡張し、より表現力と可読性を高めたものである。システムエンジニアにとって、EBNFはコンパイラやインタプリタの開発において言語の構文解析部分を設計する際の基盤となったり、既存の仕様書を正確に理解したりするために不可欠な知識となる。

プログラミング言語の文法は、人間が自然言語で説明しようとすると「セミコロンで終わる文が並ぶ」や「括弧で囲まれた式」といった曖昧な表現になりがちである。しかし、コンピュータは曖昧な指示を理解できないため、どの記号がどのような順序で現れるべきか、どのような組み合わせが許されるのかを厳密に定義する必要がある。EBNFはまさにその目的のために存在する。

EBNFは、BNFが持つ繰り返しやオプション要素(省略可能な要素)の表現における制約を克服するために考案された。BNFでは、例えば「0個以上のAの繰り返し」を表現するために再帰的な定義を使わなければならず、文法が複雑になりがちだった。EBNFでは、これらの一般的なパターンをより直感的で簡潔な記法で表現できるようになったため、文法定義の可読性が大幅に向上している。

EBNFの基本的な記法をいくつか説明する。 まず、文法規則は「左辺 = 右辺 ;」の形式で記述される。左辺は非終端記号と呼ばれ、他の規則によってさらに詳細が定義される要素を示す。右辺は、その非終端記号がどのような要素の並びで構成されるかを定義する部分である。

  • 終端記号: 文法の中でそれ以上分解できない、最終的な文字や記号のこと。ダブルクォーテーション " やシングルクォーテーション ' で囲んで表現する。例: "if", ";", '+'.
  • 非終端記号: 別の規則で定義される要素。そのままの名称で記述する。例: expression, statement.
  • 定義記号: = は、左辺の非終端記号が右辺の内容で定義されることを示す。
  • 終端子: ; は、一つの文法規則の終わりを示す。
  • 選択: | (縦棒)は、複数の選択肢の中からいずれか一つを選択することを意味する。例: digit = "0" | "1" | "2" ; この規則は、digit"0""1""2" のいずれかであることを示す。
  • グループ化: ( ... ) (丸括弧)は、複数の要素をひとまとまりとして扱う場合に用いる。例: ifStatement = "if" , "(" , condition , ")" , statement ; この例では、"if" の後に丸括弧で囲まれた condition が続き、その後にさらに statement が続くことを示す。
  • 0回または1回: [ ... ] (角括弧)は、その中の要素が0回現れるか、1回現れるか(つまり省略可能であること)を示す。例: optionalPart = [ "," , extraInfo ] ; この規則は、カンマと extraInfo の並びが省略可能であることを示す。
  • 0回以上の繰り返し: { ... } (波括弧)は、その中の要素が0回以上繰り返し現れることを示す。例: number = digit , { digit } ; この規則は、numberdigit が少なくとも1つあり、その後に0個以上の digit が続くことを示す。これにより、"1", "12", "123" といった数値を表現できる。
  • コメント: (* ... *) は、文法規則の説明やメモを記述するためのコメントである。

これらの記法を組み合わせることで、複雑な文法も明確に記述できる。例えば、簡単な代入文の文法をEBNFで表現すると以下のようになる。 assignmentStatement = identifier , "=" , expression , ";" ; ここで、identifierexpression は別の規則で定義される非終端記号である。

システムエンジニアは、EBNFを理解することで、プログラミング言語の仕様書を正確に読み解き、その言語で書かれたコードが文法的に正しいかを判断する論理的思考力を養うことができる。また、自身で新しい言語やデータ形式を設計する際には、EBNFを用いてその文法を厳密に定義し、コンパイラやパーサ(構文解析器)を開発する際の設計図として活用する。EBNFは、形式言語理論の基本的な概念であり、コンピュータサイエンスの多くの分野で応用される重要なツールである。これを学ぶことは、システム開発における論理的で厳密な思考を身につける第一歩となる。

関連コンテンツ