平成23年度 特別試験 応用情報技術者試験 午前 問4
あるプログラム言語において,識別子(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 ]
キーボード:1〜4 で解答 → 次の問題 ← 前の問題
正解と解説を見る
解答する前に解説を開いたので、この問題は「見て解いた」として記録します(正解数には入りません)。
正解:エ
識別子は「英字1文字」から始まり,その後ろに英字又は数字を1文字ずつ付け足していくことで作れます。BNFでは次のように再帰的に定義できます。
- 英字1文字は識別子である:
<letter> - 識別子の後ろに数字を付けたものも識別子である:
<identifier><digit> -
識別子の後ろに英字を付けたものも識別子である:
<identifier><letter> -
ア:
<letter> | <digit> | <identifier><letter> | <identifier><digit>
誤り。<digit>単独も識別子になってしまうため,数字1文字(例:5)が識別子として認められてしまいます。 -
イ:
<letter> | <digit> | <letter><identifier> | <identifier><digit>
誤り。<digit>単独を含むので数字1文字が識別子になり,さらに<letter><identifier>によって数字で始まる識別子の前に英字を付けた形などが生じ,先頭が英字という条件を満たさないものも含まれます。 -
ウ:
<letter> | <identifier><digit>
誤り。英字1文字の後ろに数字しか続けられません。例えば「ab」のように2文字目以降に英字が来る識別子を表せません。 -
エ:
<letter> | <identifier><digit> | <identifier><letter>
正しい。先頭は必ず英字1文字で,その後ろに英字又は数字を任意個付け足せるので,定義どおりの識別子を表せます。
答え
エ: <letter> | <identifier><digit> | <identifier><letter>
出典:平成23年度 特別試験 応用情報技術者試験 午前 問4