基礎科目・情報・アルゴリズム
BNFと構文図
4問H24・H26・H29・R1
BNF(バッカス・ナウア記法)や構文図で書かれた決まりから、作れるもの・作れないものを選ぶ問題が出ます。
よく出る形
- BNFで定義された「数値」の書き方から,表せない数値を選ぶ
- <数値列>::=01|0<数値列>1 のような自分自身を使う(再帰的な)定義から,作れる 0 と 1 の並びを選ぶ
- 英字と数字のくり返しを表す構文図から,表せない文字列を選ぶ
- BNFか構文図かで,定義の中身が替わる。平成24と平成29は同じ定義
覚えること
- 「A ::= B」は「A を B と定める」という意味
- 「|」は「または」。A ::= B|C は「A は B か C のどちらか」
- 並べて書いた A ::= B C は「B のあとに C を続けたもの」
- 自分自身を使う定義(例:数字列 ::= 数字|数字列 数字)は「くり返し」を表す。この例は「数字が1個以上並んだもの」
- <数値列>::=01|0<数値列>1 で作れるのは 01,0011,000111 … のように「0 が n 個のあとに 1 が同じ n 個」の並びだけ
- <列>::=01|0<列>1|<列><列> のように「<列><列>」を足すと,作った列を横につなげられる。0 を開きかっこ,1 を閉じかっこと読むと,正しく対応したかっこの並びになる
- 式のBNF:先に計算したい演算(×)は内側の規則(<項>),後の演算(+)は外側の規則(<式>)に置く
- 構文図は,矢印の道をたどって通れる順に記号を並べたものが,表せる文字列
解き方
- 選択肢を1つずつ,定義の中の部品(符号,整数,小数など)に分けられるか試す
- 例:数値 ::= 整数|小数|整数 小数,整数 ::= 数字列|符号 数字列,小数 ::= 小数点 数字列 のとき
- -19.1 は 整数「-19」+ 小数「.1」で作れる。.52 は小数として作れる
- -.37 は,符号「-」のすぐ後ろに数字列がないので作れない
- 再帰の定義は,短いものから順に 01 → 0011 → 000111 と実際に作って,選択肢と比べる
- 「<列><列>」がある定義は,左から読んで,途中で 1 の数が 0 の数より多くならず,最後に同じ数になれば作れる
ひっかけ
- 部品がどこにしか出てこないかを見落とさない(例:符号が使えるのは「符号 数字列」の形だけ)
- 0 と 1 の個数が同じでも,0101 のように交互に並ぶものは「0 が n 個のあとに 1 が n 個」の定義では作れない
- 0 と 1 の個数が同じでも,途中で 1 が多くなる列(0110 など)は作れない
- <式> ::= <項> のような「1つだけの形」を見落とさない(a×b は,そのまま<式>になれる)
このテーマの過去問(このサイトに解説がある 1問)
- 令和元年度BNFで表せない数値基礎科目 I-2-4解説を読む
平成に出た同じテーマ(3問)
このサイトにはまだ解説がありません。年度と題だけです。
- 平成29年度BNFで表せる数値列
- 平成26年度構文図と文字列
- 平成24年度BNF記法で作れる数値列