

問題
次のBNFで定義される<変数名>に合致するものはどれか。
<数字>::= 0|1|2|3|4|5|6|7|8|9
<英字>::= A|B|C|D|E|F
<英数字>::=<英字>|<数字>|_
<変数名>::=<英字>|<変数名><英数字>
- ア:_B39
- イ:246
- ウ:3E5
- エ:F5_1
基本情報技術者令和元年秋期 午前問7
問題
次の規則から生成することができる式はどれか。
〔規則〕
<式> ::=<変数>|(<式>+<式>)|<式>*<式>
<変数> ::=A|B|C|D
- ア:A+(B+C)*D
- イ:(A+B)+(C+D)
- ウ:(A+B)*(C+D)
- エ:(A*B)+(C*D)
基本情報技術者平成23年秋期 午前問4
基本情報技術者試験や応用情報技術者試験で出題される問題であるバッカス・ナウア記法。基本情報技術者試験の過去問をみると難しく感じる問題です。
ただ、バッカス・ナウア記法の文法を覚えればそこまで難しい問題ではありません。
本記事では、バッカス・ナウア記法について図解で分かりやすく解説していきます。
本記事で学べること
- バッカス・ナウア記法の文法を理解
- バッカス・ナウア記法の再帰的定義を理解
- 基本情報技術者試験の過去問の解き方を学ぶ
目次
BNF(バッカス・ナウア記法)
BNFとは、Backus-Naur form(バッカス・ナウア記法)を略した言葉であり、文脈自由文法を定義するのに用いられるメタ言語(言語を記述するための言語)のことです。

BNF(バッカス・ナウア記法)で使用する記号
記号 | 意味 |
<記号> | 置き換え可能である(非終端記号)ことをあらわす |
::= | 「左辺は右辺である」という意味をあらわす |
| | 「または」という意味をあらわす |
スポンサーリンク
例えば次のようなBNF(バッカス・ナウア記法)の定義があるとします。
<数字> ::= 1 | 2
上記の例では、<数字>は「1」または「2」であるということをあらわしています。
<数字> :: = 1 | 2
<英字> :: = A | B
<英数字> :: = <英字><数字>
上記の例では<数字>は「1」または「2」、<英字>は「A」または「B」、<英数字>は <英字><数字>であるということをあらわしています。
<英数字>の<英字><数字>は(「A」または「B」)(「1」または「2」)のことであり「A1」「A2」「B1」「B2」の英数字を表現することができます。
BNF(バッカス・ナウア記法)の再帰的定義
BNF(バッカス・ナウア記法)では次のように定義の中に自分自身を含むことができます。このような手法を再帰的定義といいます。
<数字> :: = 1 | 2
<英字> :: = A | B
<英数字> :: = <英字> | <英数字><数字>
上記の例の<英字> | <英数字><数字>は(「A」または「B」)または(<英字> | <英数字><数字>)(「1」または「2」)のことをあらわしています。(<英数字>は自分自身なので<英字> | <英数字><数字>をあらわす)
このように定義の中に再帰的定義を書くことで、同じパターンの繰り返しを表現することができます。
基本情報技術者試験 過去問の解説
スポンサーリンク
基本情報技術者令和元年秋期 午前問7
問題
次のBNFで定義される<変数名>に合致するものはどれか。
<数字>::= 0|1|2|3|4|5|6|7|8|9
<英字>::= A|B|C|D|E|F
<英数字>::=<英字>|<数字>|_
<変数名>::=<英字>|<変数名><英数字>
- ア:_B39
- イ:246
- ウ:3E5
- エ:F5_1
基本情報技術者令和元年秋期 午前問7
この問題は<変数名>がどういうルールで定義されているかを考えます。
<変数名>::=<英字>|<変数名><英数字>
解答のア~エは3文字か4文字です。ということは「<変数名><英数字>」の条件に2回もしくは3回入ることがわかります。
3文字の場合の例
<英字>|<変数名><英数字>
↓ <変数名><英数字>の条件を選択
<変数名><英数字>
↓ <変数名>は再帰的定義
<<英字>|<変数名><英数字>><英数字>
↓ <変数名><英数字>の条件を選択
<<変数名><英数字>><英数字>
↓ <変数名>は再帰的定義
<<<英字>|<変数名><英数字>><英数字>><英数字>
↓ <英字>の条件を選択
<<<英字>><英数字>><英数字>
上記より3文字の文字列が作られる
そして、先頭は必ず<英字>になることもわかります。(<英字>|<変数名><英数字>で繰り返しにならない条件は<英字>を選んだときしかない。)
ア:_B39 ・・・ 先頭が英字ではないので不正解
イ:246 ・・・ 先頭が英字ではないので不正解
ウ:3E5 ・・・ 先頭が英字ではないので不正解
エ:F5_1 ・・・ 先頭が英字なので正解

基本情報技術者平成23年秋期 午前問4
問題
次の規則から生成することができる式はどれか。
〔規則〕
<式> ::=<変数>|(<式>+<式>)|<式>*<式>
<変数> ::=A|B|C|D
- ア:A+(B+C)*D
- イ:(A+B)+(C+D)
- ウ:(A+B)*(C+D)
- エ:(A*B)+(C*D)
基本情報技術者平成23年秋期 午前問4
この問題は解答のア~エを問題の規則に従って変換していき<式>の形式になるものを探します。
〔規則〕
<式> ::=<変数>|(<式>+<式>)|<式>*<式>
<変数> ::=A|B|C|D
解答ア A+(B+C)*D
解答アを規則に従って変換していきます。
解答アの変換
A+(B+C)*D
↓
※Aは<変数>に一致、(B+C)は(<式>+<式>)に一致、Dは<変数>に一致するので、いずれも<式>に変換できる
<式> + <式> * <式>
↓
※<式> * <式>は<式>*<式>に一致するので<式>に変換できる
<式>+<式>
これ以上は変換できないので不正解
解答イ (A+B)+(C+D)
解答イを規則に従って変換していきます。
解答イの変換
(A+B)+(C+D)
↓
※(A+B)は(<式>+<式>)に一致、(C+D)は(<式>+<式>)に一致するので、いずれも<式>に変換できる
<式> + <式>
これ以上は変換できないので不正解
解答ウ (A+B)*(C+D)
解答ウを規則に従って変換していきます。
解答ウの変換
(A+B)*(C+D)
↓
※(A+B)は(<式>+<式>)に一致、(C+D)は(<式>+<式>)に一致するので、いずれも<式>に変換できる
<式> * <式>
↓
※<式> * <式>は<式>*<式>に一致するので<式>に変換できる
<式>
<式>に変換できたので正解
解答エ (A*B)+(C*D)
解答エを規則に従って変換していきます。
解答イの変換
(A*B)+(C*D)
↓
※A*Bは<式>*<式>に一致、C*Dは<式>*<式>に一致するので、いずれも<式>に変換できる
(<式>) + (<式>)
これ以上は変換できないので不正解

基本情報技術者試験おすすめの参考書・問題集
いちばんやさしい 基本情報技術者 | 『基本情報技術者試験』試験に、短期間で一発合格するための試験対策本。ITの知識がまったくない、未経験者やでもスラスラと学習を進められるよう、丁寧に解説。 |
かやのき先生の基本情報技術者教室 | 基本情報技術者をめざす方のためのやさしいオールインワンタイプの参考書&問題集。イラストや豊富な図解・例え話を駆使して理解しやすく・記憶に残りやすいように説明。 |
基本情報技術者 パーフェクトラーニング過去問題集 | 科目A・Bともに万全の対策ができる、定番の過去問題集!科目A・科目Bの両方について万全の対策ができる。 |
キタミ式イラストIT塾 基本情報技術者 | すべての解説をイラストベースで行っているため,とてもわかりやすい解説本。いちばん最初に読む基本情報技術者試験関連の書籍を探している人におすすめ! |
出るとこだけ!基本情報技術者[科目B] | 基本情報技術者【科目B】対策の定番書!前提知識+解き方+試験問題を掲載。効率よく学習できる。 |
基本情報技術者 合格教本 | 出題範囲を体系的にきちんと理解しながら学習したい人におすすめ!基本情報技術者試験の定番テキストの改訂版。 |
基本情報技術者 超効率の教科書+よく出る問題集 | 動画でスムーズに学習スタート、テキストでしっかり理解度を深める!よく出る問題を反復学習することで、合格に直結するチカラが身に付く! |