
出典:公益社団法人 日本技術士会「技術士第一次試験 過去問題」
BNF記法で<数値列>::=01|0<数値列>1と定義される数値列として、最も適切なものを選ぶ問題。0がn個並んだ後に1がn個並ぶ形の文字列を表す再帰的な定義の理解が必要。
<数値列>::=01|0<数値列>1(::=は定義、|はOR)で表現できる数値列を選ぶ問題。
① <数値列>::=01|0<数値列>1 は、01 の外側を 0 と 1 で包んでいく → 01、0011、000111… と「0がn個の後に1がn個」
② 0が3個・1が3個で、0が先に並ぶのは 000111
③ ④
定義は、<数値列>が「01」であるか、または「0の後に<数値列>を挟んで1が続く」ものであることを意味する。これを繰り返し適用すると、01、0011、000111、00001111…と、0がn個続いた後に1がn個続く形の文字列(n≧1)が得られる。選択肢の中で、この形(0が3個の後に1が3個)に当てはまるのは、000111である。したがって④が正しい。
BNFの再帰的定義<数値列>::=01|0<数値列>1は、0^n1^n(n≧1)という「0と1が同数で、0が先に並ぶ」形の文字列を生成する。再帰の基底(01)と再帰の展開を1段ずつ適用して確かめるとよい。
キーワード: BNF、再帰的定義、文法、数値列、情報・論理