スポンサーリンク

【応用情報技術者試験】BNFを5分で理解!

「BNFって何…?」

応用情報技術者試験では、コンパイラや形式言語の分野で出題されるテーマですが、

  • 記号が多くて読めない…
  • < >::= の意味は?
  • 文法を表すってどういうこと?
  • 試験では何を覚えればいいの?

で苦手な人が非常に多い分野です。

この記事では、

  • BNFとは?
  • BNFの記号
  • 書き方
  • 具体例
  • 試験での頻出ポイント

を5分で理解できるように解説します!


まず結論

BNF

「プログラミング言語の文法を書くための記法」


コンパイラは

BNFを使って文法を定義しています。


BNFとは?

超重要!

BNFとは

Backus-Naur Form

(バッカス・ナウア記法)

の略です。

プログラムで

「どんな書き方が正しいか」

を決めるために使われます。


なぜBNFが必要?

例えば、

次のような式があります。

3+5

これは正しい式です。

一方、

+3=

は文法として間違っています。

コンパイラは

文法が正しいか

をBNFで判断します。


BNFでよく使う記号

超頻出!

記号意味
< >文法要素(非終端記号)
::=~で定義される
または

< >

超重要!

<数字>

これは

数字という文法要素

を表します。


::=

超重要!

<数字> ::= 0

「数字は0である」

という意味です。

つまり

「~で定義する」

という記号です。


超重要!

<数字> ::= 0|1|2

数字は

  • 0
  • 1
  • 2

のどれかになります。

つまり

「または」

という意味です。


BNFの例

超頻出!

<符号> ::= + | -

これは

+

または

-

という意味です。


さらに

<数字> ::= 0|1|2|3

なら

数字は

0〜3のどれかになります。


もう少し複雑な例

例えば

<式>

::=

<数字>

+

<数字>

なら

次のような式が作れます。

1+2

3+4

2+0

など。


イメージで理解

BNFは

料理のレシピ

のようなものです。

レシピがあるから

料理を作れます。

BNFがあるから

プログラムを書けます。


試験で覚えるポイント

超重要!

< >

文法要素


::=

~で定義する


または


この3つだけで

ほとんどの問題が解けます。


よくあるひっかけ

「::= は等しい」

→ ❌違う!

「~で定義する」

です。


「| はAND」

→ ❌違う!

「または」

です。


「< > は比較演算子」

→ ❌違う!

BNFでは

文法要素

を表します。


応用情報で超頻出

かなり狙われる👇

  • BNF
  • コンパイラ
  • 字句解析
  • 構文解析
  • オートマトン
  • 形式言語

1分で復習!

BNF

文法を書く記法


< >

文法要素


::=

~で定義する


または


超重要

  • BNF=文法を書くルール
  • < >=文法要素
  • ::==~で定義する
  • =または
  • コンパイラで利用される

練習問題

問題

次のBNFの記述が表す内容として最も適切なものはどれか。

<数字>

::=

0|1|2

数字は0・1・2のいずれかである

数字は0と1と2をすべて含む

数字は0から2を引く

数字は定義されていない


解答

正解:ア

解説

::= は「~で定義する」、 は「または」を意味します。

そのため、

<数字>

::=

0|1|2

「数字は0・1・2のいずれかである」

という意味になります。


まとめ

BNFとは

「プログラミング言語の文法を書くための記法」


超重要

  • BNF=文法を書くルール
  • < >=文法要素
  • ::==~で定義する
  • =または
  • コンパイラの構文解析で利用される

まずは、

「BNF=プログラムの文法書」

::==~で定義する」

=または」

この3つを覚えれば、BNFの問題はかなり解けるようになります!


知識に自信ができた方は、今度は自身のキャリアアップに向けて準備してみませんか?

未経験から、ITエンジニアへ。
「IT業界に興味はあるけれど、自分にできるか不安」「何から始めればいいのか分からない」そんな方のために、Tech GO は未経験からのIT転職を専門的にサポートします。求人を紹介するだけではなく、あなたの強みを整理し、応募準備から入社後の成…

まずは無料でキャリア相談

コメント