問4 BNF記法
あるプログラム言語において、識別子(identifier)は、先頭が英字で始まり、それ以降に任意個の英数字が続く文字列である。これをBNFで定義したとき、aに入るものはどれか。
::= 0|1|2|3|4|5|6|7|8|9
::= A|B|C|・・・|X|Y|Z|a|b|c|・・・|x|y|z|
::= [ a ]
| | | | | | | | |
バッカス・ナウアー記法はメタ言語の一種で、XMLまわりで利用されているそうです。私は試験勉強で初めて知りましたが、問題を解くだけならそれほど難しくありません。
- =はis defined asの意味で、右辺によって左辺を定義しています。|はor(または)の意味です。
「
ためしに、問題文の定義を使って、いくつか例をあげてみましょう。
ここで重要なのが、BNF記法は入れ子にして定義できるということ。
さて、問題文で要求されている「先頭が英字で始まり、それ以降に任意個の英数字が続く文字列」は、たとえばA12aとか、Bac3などのことです。
ここではA12aを満たすBNF記法を探してみましょう。
A12aは
まず1と2は除外できます。というのも、
3は「先頭が英字」という条件を満たしていますし、
4なら