基本情報技術者 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_]*$ に相当します。)
F5_1 の各文字を当てはめると、先頭 F は <英字> に一致し、続く 5、、1 はすべて <英数字> の定義に合致します。したがって有効な変数名です。
(正規表現で表すとおおむね ^[A-F][A-F0-9_]*$ に相当します。)
よくある誤解
- 「英字」は任意のアルファベットと誤解し、a〜z や小文字を許容してしまう点。定義では A〜F のみです。
- アンダースコアが先頭に来ても良いと勘違いする点。BNF では先頭は必ず <英字> です。
- BNF の再帰表現を読み飛ばして、途中の文字だけを見て有効/無効を判断するミス。
解法ステップ
- BNF の各非終端記号の定義を確認する(<英字> = A|B|...F、<英数字> = <英字>|<数字>|_)。
- 変数名の先頭文字が <英字> に合致するかをチェックする(ここでは A〜F の大文字)。
- 先頭以降のすべての文字が <英数字>(A〜F、0〜9、_ のいずれか)か確認する。
- 上の条件を満たす選択肢を正解とする。
選択肢別の誤答解説
- ア: _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 のみなので、小文字は許されません(問題文の定義に従います)。
A1: 定義では <英字> が A〜F のみなので、小文字は許されません(問題文の定義に従います)。
Q2: アンダースコアはどこでも使えますか?
A2: はい。ただし先頭は <英字> でなければならないので、2文字目以降でのみ使用可能です。
A2: はい。ただし先頭は <英字> でなければならないので、2文字目以降でのみ使用可能です。
Q3: BNF を見て瞬時に判定するコツは?
A3: 「先頭文字」「以降に許される文字集合」「繰り返し(0回以上)」の3点を順にチェックすると速く正確に判定できます。
A3: 「先頭文字」「以降に許される文字集合」「繰り返し(0回以上)」の3点を順にチェックすると速く正確に判定できます。
関連キーワード: BNF、BNF文法、識別子ルール、英数字、アンダースコア、正規表現、字句解析、構文解析、再帰定義、午前問題対策

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

