平成27年度 秋期 午前 問19
ソフトウェア
四つ組に関する問題
コンパイラで構文解析した結果の表現方法の一つに四つ組形式がある。
(演算子,被演算子1,被演算子2,結果)
この形式は,被演算子1と被演算子2に演算子を作用させたものが結果であることを表す。次の一連の四つ組は,どの式を構文解析したものか。ここで,T1,T2,T3は一時変数を表す。
(*, B, C, T1) (/, T1, D, T2) (+, A, T2, T3)
原典では T の後ろの 1・2・3 は下付き添字です(ここでは同じ行に続けて書いています)。
- アA+B*C/D
- イA+B*C/T2
- ウB*C+A/D
- エB*C+T1/D
答えと解説を見る
✓ これが正解アA+B*C/D
解説
一時変数を中身に戻すと、AにB*C/Dを足した式です。
四つ組は、演算子と2つの被演算子、そして結果を置く先を並べた形です。一時変数は途中の値を持つための入れ物なので、元の式には現れません。ですから読み方は、書かれた順に一時変数を中身へ置き換えていく作業になります。まずBとCの積が最初の一時変数に入ります。次にその一時変数をDで割った結果が2つ目に入るので、ここまでで、BとCを掛けたものをDで割る形ができます。最後にAとその結果を足した値が3つ目に入ります。したがって元の式は、Aに、BとCの積をDで割ったものを足した形です。確かめる軸は2つです。1つ目は、一時変数を最後まで残さず消しているか。2つ目は、割り算がどの部分に掛かっているかです。
ほかの選択肢はなぜ違うのか
- イA+B*C/T2:途中の値を表す記号がそのまま残っており、構文解析の元になった式の形になっていません。一時的な入れ物は、最後には中身へ戻す必要があります。
- ウB*C+A/D:割り算の相手が入れ替わっています。2行目はBとCの積をDで割る指示であって、Aを割る指示ではありません。足す相手と割る相手が逆になっています。
- エB*C+T1/D:こちらも途中の値を表す記号が残ったままです。加えて、割られる側と足される側の対応が並びと合っておらず、3行目が示す加算の相手も取り違えています。
出典:平成27年度 秋期 基本情報技術者試験 午前 問19
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)