平成23年度特別試験 問4 / 80

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

平成23年度特別試験の他の問題