BNFで表現されたあるプログラム言語の構文


応用情報技術者平成30年秋期 午前問4

次に示す記述は,BNFで表現されたあるプログラム言語の構文の一部である。次に示す記述は,BNFで表現されたあるプログラム言語の構文の一部である。<パラメタ指定>として,正しいものはどれか。

  <パラメタ指定>::=<パラメタ>|(<パラメタ指定>,<パラメタ>)
  <パラメタ>::=<英字>|<パラメタ><英字>
  <英字>::=a|b|c|d|e|f|g|h|i

ロジックとしては、
<パラメタ指定>::=(<パラメタ指定>,<パラメタ>)
→ ((<パラメタ指定>,<パラメタ>),<パラメタ>)
→ (((<パラメタ指定>,<パラメタ>),<パラメタ>),<パラメタ>)

のように、
 ((((<パラメタ>,<パラメタ>),<パラメタ>),<パラメタ>),<パラメタ>)
の構文が適切となる。

つまり、「( )」、「,」が必須ですね。且つ、イのような二重括弧もだめですね。括弧中でも「パラメタ指定」なので、「( )」、「,」も必須ですね。
よって、イウエは間違い、アが正しいだろうな。

ーーーーーーーーーーーーーーーーーーーーーーーーーー
補足
次の規則から生成することができる式はどれか。

〔規則〕
  <式> ::=<変数>|(<式>+<式>)|<式>*<式>
  <変数> ::=A|B|C|D

 ア、A+(B+C)*D      イ、(A+B)+(C+D)
 ウ、(A+B)*(C+D)     エ、(A*B)+(C*D)

答えにつきまして、
+の場合は、両側が「( )」 が必要であること。
よって、ア、イ、エは間違いですね。

参照: