戦国IT - 情報処理技術者試験の過去問対策サイト
ブログお知らせお問い合わせ料金プラン

基本情報技術者 2011年 秋期 午前(科目A)04


問題文

次の規則から生成することができる式はどれか。   〔規則〕  <式> ::= <変数>|(<式>+<式>)|<式>*<式>  <変数> ::= A | B | C | D

選択肢

A+(B+C)*D
(A+B)+(C+D)
(A+B)*(C+D)(正解)
(AB)+(CD)

次の規則から生成可能な式はどれか【午前2 解説】

要点まとめ

  • 結論:与えられた生成規則から生成できる式は (A+B)*(C+D) のみで,外側の加算は必ず丸括弧で囲む必要があります。
  • 根拠: のため,加算は常に丸括弧で包まれ,乗算は括弧なしで二項結合できます。
  • 差がつくポイント:式を上から見る(トップレベル演算子の確認)と,括弧がどの生成規則由来かを見分けることが合否を分けます。

正解の理由

正解は です。
理由:文法 により,左右に加算を並べる場合は必ずその加算全体を丸括弧で囲む形式 でしか生成できません。一方,乗算は の形で括弧なしに結合可能です。
ウの (A+B)*(C+D) は左辺と右辺がそれぞれ で生成でき,その二つを で結合して全体の を作れるため生成可能です。

よくある誤解

  • 「通常の算術と同じ優先順位で判断してよい」:今回の文法は演算子優先や任意の括弧挿入を許しておらず,文法規則に従う必要があります。
  • 「丸括弧は任意に置ける」と思う誤り:丸括弧は加算 のためだけに出現し,任意の式を囲むための生成規則は存在しません。
  • 「ABC は不可」と誤認する:乗算は再帰的に結合できるため生成可能(結合の仕方は文法で決まる)です。

解法ステップ

  1. 式のトップレベル演算子(最外側で見える '+' または '*')を確認する。
  2. トップが '+' なら全体が丸括弧で囲まれているかを確認、囲まれていなければ生成不可。
  3. トップが '*' なら左右の項がそれぞれ として生成可能か(特に であるか、単純変数か、さらに乗算でつながるか)を確認する。
  4. 各部分について再帰的に同じ確認を行い,すべて文法に従うなら生成可能とする。

選択肢別の誤答解説

  • ア: A+(B+C)*D
    • 誤り点:全体のトップレベル演算子は '+' であるが,その加算が丸括弧で囲まれていないため文法 に合致しません。よって生成不可です。
  • イ: (A+B)+(C+D)
    • 誤り点:左辺・右辺の (A+B), (C+D) は で生成可能ですが,その二つを結ぶトップレベルの '+' が丸括弧で包まれていません。外側の加算も でなければならないため生成不可です。
  • ウ: (A+B)*(C+D)
    • 正答。左は (A と B の加算),右も同様で,それらを で結合すれば全体が として生成できます。具体的には の形になります。
  • エ: (AB)+(CD)
    • 誤り点:左の (AB) や右の (CD) は「丸括弧で囲まれた形」ですが,文法上は丸括弧は加算のための構文 の一部であり,乗算を丸括弧で囲む生成規則はありません。さらに,全体をつなぐ '+' も外側が丸括弧で包まれていないため二重に不適合です。

補足コラム

  • 文法の見方: のように項同士を連結する生成規則がある場合,乗算は括弧なしで連続して現れ得ます(例:ABC は の形で生成可能)。一方,加算は必ず
    (<式>+<式>)
    のように括弧を伴って出現します。
  • パーサ視点:この文法は文脈自由文法(BNF風)であり,AST(抽象構文木)を想定すると加算ノードは必ず括弧を示す内部ノードとして現れます。括弧の有無は構文的に重要な手がかりです。

FAQ

Q1. (A+B)+C は生成できますか?
A1. 表記そのままでは生成できません。外側の加算は丸括弧で囲まれる必要があるため,((A+B)+C) のように外側も括弧で包めば生成可能です。
Q2. ABC のように括弧がない乗算は生成可能ですか?
A2. はい。乗算は の再帰で表現できるため,例えば ABC は のように派生できます(文法は結合の順序を許します)。
Q3. 任意の部分式を丸括弧で囲えますか?
A3. いいえ。丸括弧は文法上 の一部としてのみ現れるため,任意の式を囲むための生成規則はありません。例えば (A*B) は文法で生成できません。

関連キーワード: 生成文法、BNF、再帰文法、構文解析、抽象構文木、演算子結合性、括弧の意味、文脈自由文法、生成規則
← 前の問題へ次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

基本情報技術者
クイズ形式で学習しませんか?

クイズ画面へ遷移する

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてブログプライバシーポリシー利用規約特商法表記開発者について