戦国IT - 情報処理技術者試験の過去問対策サイト
ブログお知らせお問い合わせ料金プラン

基本情報技術者 2019年 秋期 午前(科目A)07


問題文

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

選択肢

_B39
246
3E5
F5_1(正解)

##: 次のBNFで定義される<変数名>に合致するものはどれか。【午前2 解説】

要点まとめ

  • 結論:正解は (F5_1)。先頭は必ず英字(この定義では A〜F の大文字)で始まります。
  • 根拠:BNFは <変数名> を再帰的に定義しており、先頭が <英字>、以降は <英数字>(A〜F、0〜9、_)が連結されます。
  • 差がつくポイント:先頭が数字や'_'だと不正、英字の範囲は A〜F に限定、大文字小文字の扱いも確認が必要です。

正解の理由

正解は です。BNF を読み替えると、変数名は「先頭が <英字>(A〜F の大文字)で、続けて 0 個以上の <英数字>(A〜F、0〜9、)が続く」形式になります。
F5_1 の各文字を当てはめると、先頭 F は <英字> に一致し、続く 5、
、1 はすべて <英数字> の定義に合致します。したがって有効な変数名です。
(正規表現で表すとおおむね ^[A-F][A-F0-9_]*$ に相当します。)

よくある誤解

  • 「英字」は任意のアルファベットと誤解し、a〜z や小文字を許容してしまう点。定義では A〜F のみです。
  • アンダースコアが先頭に来ても良いと勘違いする点。BNF では先頭は必ず <英字> です。
  • BNF の再帰表現を読み飛ばして、途中の文字だけを見て有効/無効を判断するミス。

解法ステップ

  1. BNF の各非終端記号の定義を確認する(<英字> = A|B|...F、<英数字> = <英字>|<数字>|_)。
  2. 変数名の先頭文字が <英字> に合致するかをチェックする(ここでは A〜F の大文字)。
  3. 先頭以降のすべての文字が <英数字>(A〜F、0〜9、_ のいずれか)か確認する。
  4. 上の条件を満たす選択肢を正解とする。

選択肢別の誤答解説

  • ア: _B39
    • 先頭が '_' であり、BNF の <変数名> は先頭が <英字>(A〜F)である必要があるため不正。
  • イ: 246
    • 先頭が数字 '2' のため不正。<変数名> は必ず <英字> で開始する。
  • ウ: 3E5
    • 同様に先頭が数字 '3' のため不正。先頭文字の制約に違反。
  • エ: F5_1
    • 先頭が 'F'(<英字> に一致)、続く '5'、'_'、'1' はすべて <英数字> に一致するため正しい。

補足コラム

  • BNF の再帰定義 "<変数名> ::= <英字> | <変数名><英数字>" は「先頭に必ず英字があり、その後に英数字が任意個続く」ことを示します。試験対策では再帰を展開して「開始文字の条件」と「残り文字の許容集合」の二点を素早く確認する練習が有効です。
  • 実務的にはこのようなルールは字句解析(レキサー)で正規表現に変換して扱います。例:
    ^[A-F][A-F0-9_]*$
    を使えば自動判定可能です。
import re
pat = re.compile(r'^[A-F][A-F0-9_]*$')
for s in ["_B39","246","3E5","F5_1"]:
    print(s, bool(pat.match(s)))

FAQ

Q1: 小文字の a〜f は許されますか?
A1: 定義では <英字> が A〜F のみなので、小文字は許されません(問題文の定義に従います)。
Q2: アンダースコアはどこでも使えますか?
A2: はい。ただし先頭は <英字> でなければならないので、2文字目以降でのみ使用可能です。
Q3: BNF を見て瞬時に判定するコツは?
A3: 「先頭文字」「以降に許される文字集合」「繰り返し(0回以上)」の3点を順にチェックすると速く正確に判定できます。

関連キーワード: BNF、BNF文法、識別子ルール、英数字、アンダースコア、正規表現、字句解析、構文解析、再帰定義、午前問題対策
← 前の問題へ次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

基本情報技術者
クイズ形式で学習しませんか?

クイズ画面へ遷移する

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてブログプライバシーポリシー利用規約特商法表記開発者について