マナビング基本情報技術者

BNFの再帰定義で変数名の先頭をどう読むか

基本情報技術者試験 令和元年度秋期 午前 問7 / 基礎理論 › 情報に関する理論

過去問にチャレンジ

令和元年度秋期 午前 問7

次のBNFで定義される<変数名>に合致するものはどれか。 <数字>::= 0|1|2|3|4|5|6|7|8|9 <英字>::= A|B|C|D|E|F <英数字>::=<英字>|<数字>|_ <変数名>::=<英字>|<変数名><英数字>

  1. ア

    _B39

  2. イ

    246

  3. ウ

    3E5

  4. エ

    F5_1

会話形式の解説

講師講師
この問題では、変数名の最初の一文字と、その後に続けられる文字を分けて考えましょう。
受験者受験者
<英数字>には数字と下線もあります。どちらも先頭に使えるのでしょうか。
講師講師
まず、<変数名>を一文字だけで成立させるには何を選びますか。
受験者受験者
<英字>です。先頭はAからFのどれかになります。
講師講師
その通りです。先頭が下線の文字列は、下線の前に成立した変数名がないので、定義に合いません。
受験者受験者
先頭が2の数字だけの文字列も、出発点の<英字>を満たせませんね。
講師講師
はい。途中にEがある文字列も、最初が3なので同じ理由で合いません。
受験者受験者
では、Fで始まる文字列は、Fだけで変数名が成立しますね。
講師講師
成立します。その後の5、下線、1はいずれも<英数字>なので、一文字ずつ追加できます。正解はF5_1です。
受験者受験者
追加できる文字の種類だけで判断せず、先頭に英字があるかを先に確認するのですね。
講師講師
はい。定義の中に同じ<変数名>が現れるため、成立した変数名に文字を繰り返し追加できます。

まとめ

このBNFでは、変数名はAからFの英字一文字から始まります。成立した変数名の末尾には、英字・数字・下線を一文字ずつ追加できます。先頭が下線や数字の候補は条件を満たさず、F5_1が定義に合致します。

解答・解説

正解はエです

この問題のテーマ

BNFの再帰的な定義を読み、変数名として使える文字の並びを判定する問題です。

解き方の考え方

まず、<変数名>は<英字>だけでも成立するので、先頭はA~Fのいずれかだと分かります。次に、成立した<変数名>の末尾へ<英数字>を一文字ずつ追加できます。各選択肢の先頭と、それ以降の文字をこの順に確認します。

選択肢ごとの解説

  1. ×ア  _B39
    アの「_B39」は、最初の文字が「_」です。「_」を追加できるのは、先に変数名が成立している場合なので、先頭には置けません。
  2. ×イ  246
    イの「246」は、最初の「2」が数字です。数字だけを並べても、変数名の出発点となる<英字>を満たせません。
  3. ×ウ  3E5
    ウの「3E5」も、最初の「3」が数字です。途中の「E」は使える英字ですが、先頭の数字を許す定義にはなっていません。
  4. ○エ  F5_1
    エの「F5_1」は、「F」だけで変数名が成立します。続く「5」「_」「1」はいずれも<英数字>に含まれ、一文字ずつ追加できるため、定義に合致します。

POINT

  • BNFの「|」は、並んだ候補のいずれかを選べることを示します。
  • 定義の中に同じ<変数名>が現れるため、条件に合う文字を繰り返し追加できます。
  • 文字列全体を判定するときは、先頭の条件を確認してから後続の条件を確認します。

※出典:令和元年度秋期 基本情報技術者試験 午前 問7