過去問解きまくり研究所 ホーム

平成29年度 春期 午前 問4

基礎理論

BNFに関する問題

あるプログラム言語において,識別子(identifier)は,先頭が英字で始まり,それ以降に任意個の英数字が続く文字列である。これを BNF で定義したとき,a に入るものはどれか。

<digit> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
<letter> ::= A | B | C | … | X | Y | Z | a | b | c | … | x | y | z
<identifier> ::= [ a ]
答えと解説を見る

✓ これが正解エ<letter> | <identifier><digit> | <identifier><letter>

解説

英字 1 文字から始め、後ろに英数字を足す形です。

設問は、先頭が英字で、その後ろに任意個の英数字が続く文字列を BNF で定義させています。日本語の条件を 2 つに割ると見通しがよくなります。1 つ目は、先頭に置けるのは英字だけということです。したがって、1 文字だけの識別子は英字の規則だけで作られます。数字 1 文字を識別子と認めてしまう並びが混じっていたら、その定義は外れます。2 つ目は、2 文字目以降には英字も数字も置けるということです。すでに識別子である文字列の後ろに英字を足しても、数字を足しても、やはり識別子になります。自分自身を右辺に呼び出す再帰の形です。この 2 つをともに満たす並びが当てはまります。短い文字列で試すのが確実で、数字 1 文字が作れないことと、英字が 2 つ並んだ文字列が作れることを見れば決まります。

ほかの選択肢はなぜ違うのか

この問題の用語

出典:平成29年度 春期 応用情報技術者試験 午前 問4

この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)