AUシステム監査技術者試験 午前Ⅰ

平成29年度春期 システム監査技術者 午前Ⅰ 問2

問題文と選択肢を読んで答えを考えてから、下の「正解と解説を見る」で確認しましょう。

問題

あるプログラム言語において,識別子(identifier)は,先頭が英字で始まり,それ以降に任意個の英数字が続く文字列である。これをBNFで定義したとき,[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]

選択肢

  1. ア
    <letter> | <digit> | <identifier><letter> | <identifier><digit>
  2. イ
    <letter> | <digit> | <letter><identifier> | <identifier><digit>
  3. ウ
    <letter> | <identifier><digit>
  4. エ
    <letter> | <identifier><digit> | <identifier><letter>
解き方のヒントを見る

記号の役割を切り分ける視点

BNFを読むときは、表記上の記号が担う役割と、要素どうしの関係を混同しないことが大切です。各部分を分けて捉えたうえで、定義全体の構造が一貫しているかを確認しましょう。

この問題で問われていること

選択肢を比べる際は、記号の見た目や個別の印象ではなく、定義の中で各要素がどの対象に対応し、どの範囲の関係を示しているかという一点に絞って丁寧に確認してください。

視点

字句構造の定義は、表記上の部品と、それらの関係を段階的に読み取ると整理しやすくなります。まず構成要素の役割を区別し、次に周囲との関係が一貫しているかを確認します。

確認ポイント

  • 各記号が定義内で担う役割を区別する
  • 要素どうしの対応関係を確認する
  • 全体の構造に一貫性があるか見直す
正解と解説を見る

正解

エ

解説

識別子は先頭が英字で、その後ろに英字または数字を任意個続けられる文字列です。BNFでは、まず英字一つを基底とし、そこへ英字または数字を再帰的に追加する形で表現する。

理由

識別子は最低1文字必要で、最初の文字は<letter>に限られる。したがって、<letter>を基底に置き、<identifier>へ英字または数字を追加する規則を組み合わせれば、先頭条件と後続条件を同時に表せる。

比較

<identifier>を右辺に含む規則は、既に正しい識別子へ文字を追加する再帰として働く。追加対象に<letter>と<digit>の両方があれば、英字だけ、数字だけ、英数字混在のいずれの後続部分も表現できる。

選択肢ア

これは不正解だよ。<letter>と<digit>を単独の候補にしているため、数字だけの文字列も識別子として生成できてしまう。問題の識別子は先頭が必ず英字なので、数字単独を許すこの規則は定義と一致しない。

選択肢イ

これは不正解だよ。<letter>から始める候補はあるが、<digit>を単独で選べるため、数字だけの文字列を識別子として認めてしまう。また、先頭条件を満たすための基底規則として不要な候補が含まれており、定義された文字列集合と一致しない。

選択肢ウ

これは不正解だよ。<letter>を基底にして数字を追加する形は表せるが、<identifier><letter>がないため、識別子の後ろに英字を追加できない。例えば英字が連続する後続部分や、英字と数字が混在する一部の文字列を生成できず、任意個の英数字という条件を満たさない。

選択肢エ(正解)

これは正解だよ。<letter>を基底にするので先頭は必ず英字になり、<identifier><digit>または<identifier><letter>によって、既に成立した識別子へ数字または英字を任意回追加できる。したがって、先頭が英字で後続が任意個の英数字という定義を過不足なく表現できる。

学習のポイント

BNFの基底規則と再帰規則を分けて、文字列の生成範囲を確認する。

出典:独立行政法人 情報処理推進機構(IPA)平成29年度春期 システム監査技術者試験 午前Ⅰ 問2(公式資料:問題冊子(PDF) / 解答例)

関連する過去問一覧

IPA Advancedは非公式の学習サイトです。解説にはAIによる補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針