BNF による識別子の定義
出典: 平成29年度 春期 応用情報技術者試験 午前 問4 (IPA)
あるプログラム言語において,識別子(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> | <digit> | <identifier><letter> | <identifier><digit>
- イ <letter> | <digit> | <letter><identifier> | <identifier><digit>
- ウ <letter> | <identifier><digit>
- エ <letter> | <identifier><digit> | <identifier><letter>
正解と解説を見る
正解: エ
- ア: <digit> が単独で識別子になるので、数字で始まる識別子 (例: 1) が作れてしまいます。
- イ: <digit> が単独で識別子になってしまいます。また <letter><identifier> は先頭に英字を足す形です。
- ウ: <identifier><letter> がないので、2 文字目以降に英字を続けられません (例: ab が作れません)。
- エ: 英字 1 文字から始めて、後ろに英字か数字を何個でも付けられるので正しい答えです。
ポイント
- 識別子は「先頭が英字、その後に英数字が任意個」です。
- 最小の識別子は英字 1 文字なので <letter> が入ります。
- すでにある識別子の 後ろに 英字か数字を 1 つ付けたものも識別子なので、<identifier><letter> と <identifier><digit> が入ります。
- 数字 1 文字 (<digit>) を識別子にしてはいけません。