情報処理安全確保支援士試験 情報処理安全確保支援士試験 平成29年度春期 午前Ⅰ2: あるプログラム言語において,識別子(identifier)は,先頭が英字で始まり,それ以降に任意個の英数字が続く文字列である。これを BNF で定義したとき,a

情報処理安全確保支援士試験 平成29年度春期 午前Ⅰ
Q 22 / 30
あるプログラム言語において,識別子(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

問題本文

あるプログラム言語において,識別子(identifier)は,先頭が英字で始まり,それ以降に任意個の英数字が続く文字列である。これを BNF で定義したとき,a に入るものはどれか。 <digit ::= 0 9 <letter ::= A z <identifier ::= a

選択肢

  • .<letter <identifier<digit
  • .<letter <identifier<digit
  • .<letter | <identifier<digit
  • .<letter <identifier<letter

正解

. <letter <identifier<letter

解説

識別子は「先頭が英字、以降は任意個の英数字」。BNFでは再帰で「既存の識別子の末尾に英字または数字を追加」と定義する。基底は<letter(先頭1文字は英字)、再帰部は<identifier<letterと<identifier<digit。これらを過不足なく含むエが正解。構文を再帰規則で表す感覚はコンパイラ理解の基礎となる。

選択肢ごとの解説

  • .基底に<digitを含み、数字始まりの識別子を許してしまうため誤り。
  • .<digit基底や<letter<identifier(2文字目以降を先頭扱い)を含み定義に反し誤り。
  • .<identifier<letterが無く、2文字目以降に英字を付けられないため不足で誤り。
  • .基底<letterと再帰<identifier<digit・<identifier<letterを過不足なく備え正しい。

情報処理安全確保支援士試験 平成29年度春期 午前Ⅰ過去問一覧へ戻る・問2