私は単純な言語パーサーを構築していますが、優先順位の低いプレフィックス式に問題があります。文法の例を次に示します。
E = E5
E5 = E4 'OR' E4 | E4
E4 = E3 'AND' E3 | E3
E3 = 'NOT' E3 | E2
E2 = E1 '==' E1 | E1
E1 = '(' E ')' | 'true' | 'false'
NOT
ただし、この文法は、より優先順位の高い中置演算子の RHS として使用される場合、つまり次のように正しく機能しません。
true == NOT false
これは、==
オペレーターが RHS で E1 を要求しているためであり、これは NOT 操作ではありません。
この文法を表現する正しい方法がわかりませんか? この単純化された再帰的降下アプローチを使用してまだ可能ですか、それともより機能的なアルゴリズム (ヤードの迂回または先行登攀) に移行する必要がありますか?