文脈自由文法からランダムな文を生成しようとしています。各ステップの間に、生成される次の非終端記号は、この質問に無関係ないくつかの確率的基準に従って決定される。文法とこれまでに生成された部分文があれば、文法に従って次のステップで生成できる非終端記号の集合をどのようにして決定するのですか?CFGから生成するときに有効な次の端末の集合を決定する
以下は、BNFと部分的な世代における文法の例です。
<expr> ::= <term> "+" <expr> | <term>
<term> ::= <term> "*" <factor> | <factor>
<factor> ::= "(" <expr> ")" | <const>
<const> ::= "0" | "1" | "2" | "3" | "4"
これまでに生成された配列:(1 +
とする。この場合、生成される次のトークンは、{"(", "0", "1", "2", "3", "4"}
から来るはずです。
一般的な文法と部分的な生成を考慮してこの集合を決定するアルゴリズムがありますか、または各段階でこの集合を利用できるように文を生成しますか?
ありがとうございました。私の場合は、最後の非終端子を代用するプロダクションを選択するオプションはありません。むしろ、私は選択するすべての端末の語彙を持っており、生成の各段階で、プレフィックスに応じて選択肢を法的端末に限定したいと考えています。接頭辞を解析せずに、次のトークンを決定する方法と互換性のある方法で直接文を生成できますか? – user7954416