左結合演算子を使用した単純な算術式には、次のEBNF文法があります。
expression:
term {+ term}
term:
factor {* factor}
factor:
number
( expression )
演算子の結合性を変更せずに、これをBNF文法に変換するにはどうすればよいですか? 次の BNF 文法は、演算子が右結合になっているため、うまくいきません。
expression:
term
term + expression
term:
factor
factor * term
factor:
number
( expression )
ウィキペディアは次のように述べています。
いくつかの解決策は次のとおりです。
- 再帰的なままになるように文法を書き直すか、または
- 正しい優先順位/結合性を強制するために、より多くの非終端記号で文法を書き直すか、または
- YACC または Bison を使用している場合は、%left、%right、および %nonassoc という演算子宣言があり、パーサー ジェネレーターにどの結合性を強制するかを伝えます。
しかし、文法の書き直し方については書かれておらず、YACC や Bison などの解析ツールは一切使用せず、単純な再帰降下のみを使用しています。私が求めていることは可能ですか?