あるプログラム言語において、識別子(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> |
BNF(バッカス・ナウア記法)とは、文脈自由文法を定義するのに用いられるメタ言語のことで、一般にBNFやBN記法と略される。
BNFでは、「<identifier>::=」はidentifier を定義するという意味で、「|」は、「または」を意味する。
これより
事が分かる。
ア | × | "1AB"のような先頭が数字の文字列が許されてしまう。 |
イ | × | "1AB"のような先頭が数字の文字列が許されてしまう。 |
ウ | × | ”AB123XYZ”のような最後の文字が英字のデータが許されない。 |
エ | ○ | 正しい。 |