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

[規則]

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

 

ア A+(B+C)*D        イ (A+B)+(C+D)

ウ (A+B)*(C+D)        エ (A*B)+(C*D)











































解答

みなさんはBNFって知ってましたか?

BNF(Backus Naur Form、バッカス記法、バッカス・ナウア記法)とはコンピュータで扱う言語を定義するための記述方法(メタ言語の記述方法)であり、メタ言語の多くはBNFで記述されるらしいです。

マークアップ言語として使われるXMLも、BNFで定義されているらしいですよ。


んで、問題の規則に書かれてある

①<式> ::=<変数>|(<式>+<式>)|<式>*<式>は

<式>は<変数>または(<式>+<式>)または<式>*<式>ということを示唆してます。

②<変数> ::=A|B|C|Dも

<変数>はAまたはBまたはCまたはD ということを示してます。

この規則が守れている式が答えなんですね。


①の(<式>+<式>)を言い換えれば(<変数>+<変数>)ですよね。

このことから加算の式は括弧が必要なのです。

更に<式>*<式>から乗算の式は括弧がいらないので、


アのA+(B+C)*Dは(Aの後ろの)+があるので括弧が必要なのでちがう!  

イの(A+B)+(C+D)は(A+B)と(C+D)の間に+があるのでこれも括弧が必要。ちがう!

ウの(A+B)*(C+D)は(<式>+<式>)でちゃんと括弧がついてるし、<式>*<式>で乗算に括弧がない。 Perfect!!!

エの(A*B)+(C*D)は+の加算があるのに括弧がついてないし、*の乗算に括弧についてる規則を全く守れない式です。論外。違う!カエレ。


よって規則が守れてる秀逸な式はです!