平成30年度秋期 応用情報技術者試験 午前 問4
次に示す記述は,BNFで表現されたあるプログラム言語の構文の一部である。<パラメタ指定>として,適切なものはどれか。 <パラメタ指定> ::= <パラメタ>|(<パラメタ指定>,<パラメタ>) <パラメタ> ::= <英字>|<パラメタ><英字> <英字> ::= a|b|c|d|e|f|g|h|i
- ア ((abc, def), ghi)
- イ ((abc, def))
- ウ (abc, (def))
- エ (abc)
解答・解説を見る
正解:ア
AI解説
BNF(バッカス・ナウア記法)は構文規則の定義法で、::=は定義、|は選択を表す。定義より<パラメタ指定>は「英字列1個」か「(<パラメタ指定>,<パラメタ>)」の形であり、括弧の中の右側(第2要素)は必ず括弧なしの英字列(<パラメタ>)でなければならない。アの((abc,def),ghi)は、内側(abc,def)が<パラメタ指定>、右側ghiが<パラメタ>で規則に適合するため正しい。 ア: 正しい。(abc,def)は(<パラメタ指定>,<パラメタ>)の形で<パラメタ指定>となり、それとghiを組み合わせた全体も定義に適合する。 イ: ((abc,def))は最外の括弧の中がカンマ区切りの2要素になっておらず、(<パラメタ指定>,<パラメタ>)の形に合致しないため誤りである。 ウ: (abc,(def))はカンマの右側が(def)と括弧付きだが、<パラメタ>は英字の並びのみで括弧を含められないため誤りである。 エ: (abc)は括弧の中が1要素のみで、(<パラメタ指定>,<パラメタ>)というカンマを含む形に合致しないため誤りである。 💡 BNF問題は「定義の形に厳密に当てはめる」だけで解ける。再帰定義(左側が自分自身を含む)がある場合、どちら側が入れ子にできるかを確認するのがポイントである。
※Web掲載用に表記を一部変更しています。著作権はIPAに帰属します。