応用情報技術者試験 応用情報技術者試験 平成29年度春期 午前 問4: あるプログラム言語において,識別子(identifier)は,先頭が英字で始まり,それ以降に任意個の英数字が続く文字列である。これをBNFで定義したとき,aに入
あるプログラム言語において,識別子(identifier)は,先頭が英字で始まり,それ以降に任意個の英数字が続く文字列である。これをで定義したとき,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
40.43%
問題本文
あるプログラム言語において,識別子(identifier)は,先頭が英字で始まり,それ以降に任意個の英数字が続く文字列である。これをBNFで定義したとき,aに入るものはどれか。 <digit> ::= 09 <letter> ::= Az <identifier> ::= a
選択肢
- ア.<letter><identifier><digit>
- イ.<letter><identifier><digit>
- ウ.<letter>|<identifier><digit>
- エ.<letter><identifier><letter>
正解
エ. <letter><identifier><letter>
解説
BNFの再帰定義では、無限の繰り返しを止める“終端”がどこかに必要で、識別子の終端(最も短い形)は条件「先頭が英字」を表す<letter>である。識別子は「すでにある識別子の後ろに英字または数字を1つ足す」形で伸ばせるので、<identifier><letter>と<identifier><digit>を加えた選択肢エが正しい。これにより、先頭は必ず<letter>、2文字目以降は英数字が任意個続く文字列を過不足なく定義できる。
選択肢ごとの解説
- ア.右辺に単独の<digit>を含むため、識別子が数字1文字だけで成立してしまい「先頭は英字」という条件に反する。誤り。
- イ.単独の<digit>を含む点でアと同じく数字始まりを許してしまう。さらに<letter><identifier>は「英字+識別子」となり末尾に英数字を足す形ではないため、定義として不適切。誤り。
- ウ.<identifier><digit>しかなく末尾に英字を足せないため、2文字目以降に英字が現れる識別子(例 Ab)を定義できない。誤り。
- エ.正しい。終端=<letter>で先頭を英字に固定し、<identifier><letter>と<identifier><digit>で末尾に英数字を任意個続けられるため、要求どおりの識別子をすべて表現できる。
応用情報技術者試験 平成29年度春期 午前 の過去問一覧へ戻る・問4