正式な文法に基づいて出力を生成するためのライブラリ (できれば .NET) が存在するかどうか疑問に思っています。
私はこれについて話している: https://en.wikipedia.org/wiki/Chomsky_hierarchy#Formal_grammars
したがって、次のように文法を指定します。
(非終端記号、終端記号、生産規則、開始記号)
それで:
Grammar = ({E,A,B}, {(,),a,+,*}, P, E);
Where
P = {
E -> A,
E -> E + A,
A -> B,
A -> A * B,
B -> a,
B -> (E)
};
そして、ライブラリはその文法のランダムな出力の例を次のように生成します。
a * a + a
a + (a + a)
a * a * a
このようなライブラリを作成または見つけた後に私がやろうとしているのは、出力を生成する方法を変更して、特定の例を他の例よりも多く生成するようにバイアスをかけることです。したがって、前の例では、よりバイアスをかけることができます。掛け算ではなく足し算を使ってより多くの式を生成します。
したがって、基本的にはプロダクション ルールに重みを割り当てて、有効なルールが複数ある場合に適用される可能性が高くなるようにします。
私の主な質問は、私の例のような正式な文法に基づいてランダムな出力を生成する最初のステップを実行できるライブラリがあるかどうかです。
アップデート
この問題についてもう一度考えてみると、さらにいくつかのメモがあります。
ここでの問題の 1 つは、生産ルールの適用をいつ停止するかを知ることです。文法がある時点で停止することを確認するか、アルゴリズム/コードで式をさらに展開し続ける可能性を低くする方法を考案してください。
これは理論的すぎる可能性があり、おそらくもっと実用的な方法があることに気づきました。つまり、本質的にこれと同じことを行うツールがいくつか存在する必要がありますが、特定の問題に特化した別の構文やアプローチ、またはより柔軟なものを使用するだけかもしれません。