A型システムエンジニアの勉強メモ

情報処理試験の午前問題をネタにして、解説をじっくり書きながら勉強しています。基礎は大事。

広告

基本情報技術者試験 令和元年度 秋季 午前 問7

 BNF についての問題。

 

--------------------------

基本情報技術者試験

令和元年度 秋期 午前 問7

 

次の BNF で定義される <変数名> に合致するものはどれか。

 

<数字> :: = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

<英字> :: = A | B | C | D | E | F

<英数字> :: = <英字> | <数字> | _

<変数名> :: = <英字> | <変数名><英数字>

 

ア _B39

イ 246

ウ 3E5

エ F5_1 

--------------------------

解説

 

 

BNF とは、バッカス・ナウア記法(Backus-Naur Form) の略。

"文脈自由文法を定義するためのメタ言語" とのことであるが、この文章がまずわかりにくい。

文法(この問題だと "<変数名>" とかの構造)を定義するためのもの、と思えばいい。

 

 

<数字> :: = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

順番に見ていくとして、上の BNF における "<数字>" は 0 から 9 のどれかという意味になる。

なので、ここでは 10 とか 100 は "<数字>" ではない(定義に当てはまらない)。

"<数字><数字>" という BNF がもしあれば、10 とか 99 とかが当てはまる。

"<数字><数字><数字>" という BNF がもしあれば、100 とか 256 とかが当てはまる。

 

 

<英字> :: = A | B | C | D | E | F

次に上の BNF について。

ここでは "<英字>" は A か B か C か D か E か F のどれかという意味になる。

なので、ここでは Z は "<英字>" ではないし、2 文字以上でも "<英字>" ではない。

 

 

<英数字> :: = <英字> | <数字> | _

続いて上の BNF について。

"<英数字>" という定義の中に、先に説明した "<英字>" と "<数字>" が入っている。

"<英数字>" は "<英字>" か "<数字>" か _ のどれか、という意味になる。

"<英字>" と "<数字>" については上の説明の通り。

ということで、ここでは "<英数字>" は A, B, C, D, E, F, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, _ のうちどれか一文字という意味になる。

 

 

<変数名> :: = <英字> | <変数名><英数字>

最後の BNF について。

"<変数名>" の定義の中に自分自身である "<変数名>" が含まれていてややこしい。

"<変数名>" は "<英字>" か "<変数名><英数字>" のどちらか、という意味になる。

 

"<英字>" の場合は A, B, C, D, E, F のどれかなのでわかりやすい。

A の一文字だけでも、"<変数名>" の定義には当てはまることになる。

 

"<変数名><英数字>" の場合は再び "<変数名>" がでてきてしまう。

以下、少しでも見やすくするため <変数名> に色を付けてみる。

 

"<変数名>" は "<英字>" か "<変数名><英数字>" なので、

"<変数名><英数字>" は "<英字><英数字>" か "<変数名><英数字><英数字>" になる。

 

同じようにして、"<変数名><英数字><英数字>" は "<英字><英数字><英数字>" か "<変数名><英数字><英数字><英数字>" になる。

 

なんとなくパターンが見えてきた通り、"<変数名>"

 

"<英字>"

"<英字><英数字>"

"<英字><英数字><英数字>"

"<英字><英数字><英数字><英数字>"

"<英字><英数字><英数字><英数字>・・・<英数字>"

 

といった様に先頭が "<英字>" で、その後ろに任意の数だけ "<英数字>" が続く BNF になる。

 

 

問題の各選択肢がこの定義にあっているかをみてみる。

 

選択肢ア "_B39"、選択肢イ "246"、選択肢ウ "3E5"、はどれも先頭が "<英字>" ではないので誤り。

 

選択肢エ "F5_1" は先頭が "<英字>" の定義に当てはまり、"<英字><英数字><英数字><英数字>" の BNF に合致する。ということで正解は選択肢エ

 

 

 

前後の問題はこちら。

koki2016.hatenadiary.com