• ベストアンサー

BNF記法 2重カッコを許可しない四則演算

ふと思ったのですが、2重以上の()を許可しない四則演算をBNF記法で記述できるでしょうか? たとえば、((a+b))は×です。

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

直感的には, 「かっこがついた部分式に対応する非終端記号」と「かっこを持たない部分式に対応する非終端記号」を作ればいいと思います. 規則がやたらと増加するので書く気にはなれないんですが.

________j_
質問者

お礼

ご回答ありがとうございます。 なるほど、やってみます。

その他の回答 (1)

回答No.2

単に、式全体に()を付けた場合を別の状態に飛ばして、 <PExp> ::= ( <Exp> ) <Exp> ::= <Num> | <Exp> + <Exp> | <Exp> + <PExp> | <PExp> + <Exp> | <PExp> + <PExp> としては駄目でしょうか? この場合、式全体に無用な()が付いた 『(a + b)』などは式Expではなくなります。 が、もう1段設けて、上のPExpかExpが式である、 とすれば『(a + b)』を式とする定義も書けますし。

________j_
質問者

お礼

ご回答ありがとうございます。 この方法で出来そうですね。 ただ、#1の方がおっしゃるとおり規則がかなり増えてしまうのが悩みの種です。