応用情報技術者 2018年 秋期 午前2 問04
問題文
次に示す記述は、BNFで表現されたあるプログラム言語の構文の一部である。<パラメタ指定> として、適切なものはどれか。
選択肢
ア:((abc, def)、 ghi)(正解)
イ:((abc, def))
ウ:(abc, (def))
エ:(abc)
BNFによるパラメタ指定の構文解析【午前2 解説】
要点まとめ
- 結論:正解はア: ((abc, def)、ghi)で、BNFの再帰的定義に合致しています。
- 根拠:パラメタ指定は単一パラメタか、パラメタ指定とパラメタの組み合わせでカンマ区切りのタプル形式を取るため、入れ子の括弧構造が必要です。
- 差がつくポイント:BNFの再帰的定義を正しく理解し、括弧の対応とカンマの位置を見極めることが重要です。
正解の理由
BNFの定義では、
〈パラメタ指定〉 ::= 〈パラメタ〉 | (〈パラメタ指定〉、〈パラメタ〉)
となっており、パラメタ指定は単一のパラメタか、括弧で囲まれたパラメタ指定とパラメタの組み合わせで表されます。
選択肢アは、
選択肢アは、
((abc, def)、ghi)と二重の括弧で囲み、内側で
(abc, def)がパラメタ指定、外側でそれと
ghiの組み合わせとなっており、BNFの定義に完全に合致します。
よくある誤解
- 括弧の数や位置を無視して単純にカンマ区切りを正しいと判断しがちです。
- パラメタ指定の再帰的な構造を理解せず、単一の括弧で済むと誤解することがあります。
解法ステップ
- BNFの定義を丁寧に読む。パラメタ指定は単一パラメタか、括弧で囲まれたパラメタ指定とパラメタの組み合わせ。
- 選択肢の括弧の対応を確認し、再帰的な構造に合致しているか検証。
- パラメタは英字の連結であることを確認し、パラメタ部分が正しいかチェック。
- カンマの位置がBNFの定義通りかを確認。
- 以上を満たす選択肢を選ぶ。
選択肢別の誤答解説
- イ:
((abc, def))
は括弧が多いが、カンマの後にパラメタがないためBNFの(〈パラメタ指定〉、〈パラメタ〉)
に合致しません。 - ウ:
(abc, (def))
はパラメタ指定の部分に単一パラメタabc
と括弧付きパラメタ(def)
があり、BNFの定義に反します。パラメタは括弧なしの英字列である必要があります。 - エ:
(abc)
は単一パラメタabc
を括弧で囲んでいるだけで、BNFのパラメタ指定の括弧付き組み合わせの形ではありません。
補足コラム
BNF(Backus-Naur Form)は文法を形式的に表現するための記法で、再帰的な定義が可能です。今回のように括弧とカンマを使った複雑な構造も、BNFの再帰規則で表現できます。プログラミング言語の構文解析やコンパイラ設計で必須の知識です。
FAQ
Q: パラメタ指定の括弧は必ず必要ですか?
A: 単一のパラメタの場合は括弧不要ですが、複数のパラメタを組み合わせる場合は括弧で囲みます。
A: 単一のパラメタの場合は括弧不要ですが、複数のパラメタを組み合わせる場合は括弧で囲みます。
Q: パラメタは英字の連結だけですか?
A: はい、BNFの定義ではパラメタは英字の連続で構成されます。
A: はい、BNFの定義ではパラメタは英字の連続で構成されます。
関連キーワード: BNF, 構文解析、再帰定義、括弧構造、パラメタ指定

\ せっかくなら /
応用情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

