BNFと構文図 想定問題 2
0と1の並び(列)を,次のBNFで定義する。ただし,::= は定義を表し,| はORを表す。また,並べて書いたものは,その順につなげることを表す。次の(ア)~(エ)の列について,この定義で作れるものを○,作れないものを×としたとき,最も適切な組合せはどれか。
<列> ::= 01|0<列>1|<列><列>
(ア)0101
(イ)0110
(ウ)001011
(エ)011001
アイウエ
解説
ポイント
01 と 0<列>1 に,列をつなげる規則を足したBNFで,作れる列を判定する問題です。
考え方と解き方
「<列><列>」があると,作った列を横につなげられます。0 を開きかっこ,1 を閉じかっこと読み,左から読んで途中で 1 が多くならないか確かめます。
ア:○。01 と 01 を「<列><列>」でつなげて作れます。
イ:×。左から読むと「011」の時点で 1 が 2 個,0 が 1 個となり,1 が多くなります。01 のあとに「10」が残り,これはどの規則でも作れません。
ウ:○。0101(01 と 01 をつないだもの)を 0<列>1 で囲むと,0 0101 1 = 001011 になります。
エ:×。0 と 1 は 3 個ずつですが,「011」の時点で 1 が多くなるので作れません。答えは ア ○,イ ×,ウ ○,エ ×
覚えておくこと
- <列>::=01|0<列>1|<列><列> のように「<列><列>」を足すと,作った列を横につなげられる。0 を開きかっこ,1 を閉じかっこと読むと,正しく対応したかっこの並びになる(テキスト・覚えること)
- 0 と 1 の個数が同じでも,途中で 1 が多くなる列(0110 など)は作れない(テキスト・ひっかけ)
- 「<列><列>」がある定義は,左から読んで,途中で 1 の数が 0 の数より多くならず,最後に同じ数になれば作れる(テキスト・解き方)
類似する過去問:平成29年度 基礎科目 I-2-5、平成24年度 基礎科目 I-2-2
テキスト「BNFと構文図」を読む