algorithm - 从上下文无关文法生成字符串

标签 algorithm context-free-grammar

问题是实现一个算法,该算法根据给定的上下文无关语法 G 生成长度在 lr 之间的所有字符串。

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

(1)   S -> 0 | SSS | λ

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

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

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

最佳答案

您可以将语法转换为 Greibach normal form ,然后创建过程中的每个步骤1 都会增加所生成单词的大小,您将能够按照问题中最初解释的那样限制单词的长度。


(1) 除了可能的第一个,如果空词在语法中

关于algorithm - 从上下文无关文法生成字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12515369/

相关文章:

java - 拆分字符串(尤其是在 Java 中使用 java.util.regex 或其他东西)

python - NLTK ViterbiParser 无法解析不在 PCFG 规则中的单词

emacs - emacs 中的上下文相关字体锁定

algorithm - 矩阵的扫描元素

algorithm - 重叠间隔子集的最大数量

algorithm - 数据挖掘 : Apriori issue. Min-support

javascript - JavaScript 中的分区细化算法

context-free-grammar - 使用终端删除左递归

algorithm - 什么数据结构用于对象的评估顺序?

parsing - LR(1) 语法 : how to tell? 支持/反对的例子?