応用情報技術者試験 応用情報技術者試験 平成29年度春期 午前4: あるプログラム言語において,識別子(identifier)は,先頭が英字で始まり,それ以降に任意個の英数字が続く文字列である。これをBNFで定義したとき,aに入

応用情報技術者試験 平成29年度春期 午前
Q 44 / 80
あるプログラム言語において,識別子(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%(1,217件)

問題本文

あるプログラム言語において,識別子(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