Algorithm 从上下文无关语法生成字符串

Algorithm 从上下文无关语法生成字符串,algorithm,context-free-grammar,Algorithm,Context Free Grammar,问题在于实现一种算法,该算法从给定的上下文无关语法G生成长度介于l和r之间的所有字符串 我想出了一个简单的方法:在语法图上运行BFS,记住状态。 但它在某些递归规则上失败: (1) S -> 0 | SSS | λ 我不能简单地限制最大字符串长度,因为规则可以包含λ(空字符串),所以非终结符可以减少最终字符串长度。(例如,使用l=1运行(1),r=2在我的实现中将只输出0) 我还试图限制应用规则的最大数量,但这显然也是错误的 如何限制或更改我的算法,使其永远不会陷入无休止的循环,并能

问题在于实现一种算法,该算法从给定的上下文无关语法G生成长度介于lr之间的所有字符串

我想出了一个简单的方法:在语法图上运行BFS,记住状态。 但它在某些递归规则上失败:

(1)   S -> 0 | SSS | λ
我不能简单地限制最大字符串长度,因为规则可以包含λ(空字符串),所以非终结符可以减少最终字符串长度。(例如,使用
l=1
运行(1),
r=2
在我的实现中将只输出0)

我还试图限制应用规则的最大数量,但这显然也是错误的


如何限制或更改我的算法,使其永远不会陷入无休止的循环,并能正常工作?

您可以将语法转换为,然后在创建过程中的每一步1都增加生成的单词的大小,并且您将能够限制单词的长度,如问题中最初解释的那样


(1) 如果语法中有空单词,第一个可能除外