平成30年度 秋期 午前 問4
基礎理論
BNFに関する問題
次に示す記述は,BNF で表現されたあるプログラム言語の構文の一部である。<パラメタ指定> として,適切なものはどれか。
〔BNF〕 <パラメタ指定> ::= <パラメタ> | (<パラメタ指定>, <パラメタ>) <パラメタ> ::= <英字> | <パラメタ><英字> <英字> ::= a | b | c | d | e | f | g | h | i
- ア((abc, def), ghi)
- イ((abc, def))
- ウ(abc, (def))
- エ(abc)
答えと解説を見る
✓ これが正解ア((abc, def), ghi)
解説
括弧を開けたら中にカンマがちょうど1個必要です。
BNF で書かれた三本の規則から、パラメタ指定として作れるものを選ぶ問いです。まず規則を日本語に直します。二重コロンと等号は、とは、と読み、縦棒は、または、と読みます。パラメタ指定とは、パラメタそのものか、または括弧で囲んだ中にパラメタ指定とパラメタをカンマで並べた形か、のどちらかです。パラメタとは英字を一文字以上つないだもので、abc や def や ghi はいずれもこれにあたります。ここから読み取れる決まりは一つです。括弧を開けてよいのはカンマで二つを並べるときだけで、しかも同じ深さにカンマがちょうど一個必要です。すでに出来上がったものへ括弧だけを足してよい、という規則はどこにもありません。この物差しで四つの肢を当てていくと、外側も内側も条件を満たすのは、括弧の中がさらに括弧付きの並びと英字三文字のカンマ区切りになっている形だけです。規則の左側がパラメタ指定、右側がパラメタという非対称な再帰になっている点も押さえておくと確かめになります。育つのは左側だけなので、入れ子は左へしか伸びません。この形は、三個以上の引数をカンマで並べる書き方そのものを表しています。見分けの軸は、括弧の深さとそこに置かれたカンマの数が対応しているかどうかです。構文解析の手順をたどらなくても、この一点で四つを切り分けられます。
ほかの選択肢はなぜ違うのか
- イ((abc, def)):いちばん外側の括弧の中には、同じ深さのカンマが一つもありません。中身そのものは規則から作れる形ですが、完成したものをもう一度括弧で囲んでよいという規則が用意されていないため、この並びは導けません。
- ウ(abc, (def)):カンマの右側に置けるのはパラメタだけで、これは英字の並びに限られます。括弧の付いたものを右側に置くことはできないので、カンマの後ろが括弧で囲まれているこの形は規則から導けません。
- エ(abc):括弧の中にカンマがなく、英字の並びを丸ごと囲んだだけの形です。誤りの種類は二重に囲んだ場合と同じで、入れ子が一段浅いだけになっています。括弧を外して英字の並びだけにすれば正しく作れます。
この問題の用語
- プログラム言語プログラムを書くための文法や記号の体系のこと。目的に合わせて多くの種類があり、Java、C、Pythonなどがよく使われます。
出典:平成30年度 秋期 応用情報技術者試験 午前 問4
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)