実行時にパーサーの文法規則を変更する必要があり、規則が変更されるたびにパーサーを再生成することを避けたいと考えています。
コード生成を使用しないパーサーはありますか?
よろしく、
PEGを使用できます(手書きまたはboost:spiritのようなもの)
PEG は LL 文法の厳密なスーパーセットではありませんが、制限付き否定や次のコンテキスト テストなどのさまざまな追加機能があるため、一般的により表現力があります。
Earley parserを使用できます (つまり、おそらく自分で実装することを意味し、横たわっているライブラリである可能性は低いです) 。
もちろん、これには間接費がかかります。文法とそれが解析するソースが小さい場合、これで問題ない可能性があります。
そうでなければ、再考するかもしれません。パーサーを再構築したくないのはなぜですか? ほとんどのパーサー ジェネレーターは、人間がルールを編集するよりもはるかに高速に実行されます。