我試圖生成從上下文無關文法的句子隨機生成時確定一組有效的下一個終端。在每個步驟中,根據與該問題無關的一些概率標準確定下一個要生成的非終端。我被卡住的地方是,如果給出一個語法和目前爲止產生的部分語句,我如何根據語法確定下一步可以生成的非終端的集合?從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