IPA過去問ドリル

平成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

出典:平成23年度 特別 応用情報技術者試験 午前 問4

正解:エ

解説

識別子は「先頭が英字,それ以降は英数字が任意個続く文字列」です。BNFでは,1文字目のletterに続けて,identifier自身を再帰的に使いletterまたはdigitを1文字ずつ追加していく形で定義するのが一般的です。よって<identifier>::=<letter>|<identifier><letter>|<identifier><digit>という定義が該当します。

選択肢ごとの解説

  • 誤り。<identifier><letter>ではなく<letter><identifier>やそのほかの誤った並びを含んでおり,先頭が必ず英字になる保証がありません。
  • 誤り。<letter><identifier>という並びでは,識別子の末尾ではなく先頭にletterが来る形の再帰になり,2文字目以降がletterで始まる構造は生成されず,先頭が英字という制約を正しく表現できません。
  • 誤り。<identifier><digit>だけでは,英字が2文字以上続く識別子(例:abc)を生成できません。
  • 正しい。<letter>から始まり,<identifier><letter>又は<identifier><digit>を再帰的に繰り返すことで,先頭が英字,以降が任意個の英数字という定義を正しく表せます。
応用情報技術者の過去問を演習モードで解く