context-free-grammar - 为最多两个 0 的偶数长度字构造 CFG

标签 context-free-grammar automata computation-theory context-free-language

我正在努力为 L={xE{0,1}* | 构建一个良好的 CFG,该 CFG 的长度为偶数且最多有两个 0}

所以像L={11, 10, 0011...}这样的词

我正在尝试以下尝试。

S -> E | E0A | A0E | E0E0E | 00EA | EA00

E-> 1A | e

A -> 1E

我正在运行不同的推导,它们似乎有意义,但我仍然不确定我的语法是否正确,或者是否有更好的方法来改进它? 非常感谢,我一直在与 CFG 作斗争,我正在尝试更多练习来帮助我理解。

最佳答案

您的 CFG 似乎不正确,因为我没有看到 1001 的推导。可能还有其他问题。

我们可以从 0 和 1 偶数长度字符串的语言的 CFG 开始:

S -> 0S0 | 0S1 | 1S0 | 1S1 | e

这个语法的唯一问题是它可以产生两个很多 0。我们可以通过在每次加零的产生式之后引入新的非终结符来避免这种情况。然后,那些其他非终结符可以“记住”我们已经看到了 0,并且有效的产生式较少。所以...

S -> 0A0 | 0B1 | 1B0 | 1S1 | e
A -> 1A1 | e
B -> 0A1 | 1A0 | 1B1 | e

在此语法中,S 表示到目前为止尚未引入零; A 引入了两个允许的零; B 只介绍了一个。

关于context-free-grammar - 为最多两个 0 的偶数长度字构造 CFG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61871916/

相关文章:

automation - ε 终结符是上下文无关的吗?

python - 简约 - 规则 'rules' 完全匹配,但它没有消耗所有文本

prolog - 右手上下文符号[DCG]

regex - 正则表达式中的顺序无关紧要吗?

automata - ε-转换在非确定性有限自动机中如何工作?

functional-programming - lambda 演算等价于图灵机是什么意思

java - 将 BNF 语法转换为 Java

shader - GPU着色器图灵是否完整

python - 离散优化 - 从分数矩阵的每一行和每一列中精确选择 N 个项目

state-machine - 堆栈大小受限的 PDA 接受哪些类型的语言?