语言的上下文无关文法 {a^i b^j c^i}
Context-Free Grammar of language {a^i b^j c^i}
在练习期间,我应该为以下语言编写上下文无关语法:
我不确定我是否完全理解该方法,但这就是我得到的。
因为我们需要至少 1 个 c 被任何相等数量的 a 和 b's(可能为零)我想出了以下 CFG:
T --> aCb | aTb | C
C --> cS | cC
S --> empty
从上面,例如,我永远不会创建一个字符串,其中至少没有 1 c。但是我可以创建一个只有 c 而没有 a 或 b 的字符串。类似地,我可以使用 aa...c...bb 创建字符串(任意数量a's 和 b's 之间只有 1 c) 以及任何类似的字符串到前一个,但也有任意数量的 c。
但是,我觉得这个 CTF 比需要的要复杂一些。任何人都可以告诉我如何改进,如果,或者在错误的情况下 - 我错过了什么?
编辑: 在 rici 的一些很好的输入之后,我现在得到的是:
T --> aTb | cC
C --> cC | empty
通过删除任何冗余(例如可以通过 aTb
和 C
实现的 aCb
)以及非终结符 S
.
消除S
。它除了收取薪水外什么都不做。
T → a C b
是多余的,因为您已经有了 T → a T b
和 T → C
,它们显然可以做同样的事情(按顺序应用它们)。
在练习期间,我应该为以下语言编写上下文无关语法:
我不确定我是否完全理解该方法,但这就是我得到的。
因为我们需要至少 1 个 c 被任何相等数量的 a 和 b's(可能为零)我想出了以下 CFG:
T --> aCb | aTb | C
C --> cS | cC
S --> empty
从上面,例如,我永远不会创建一个字符串,其中至少没有 1 c。但是我可以创建一个只有 c 而没有 a 或 b 的字符串。类似地,我可以使用 aa...c...bb 创建字符串(任意数量a's 和 b's 之间只有 1 c) 以及任何类似的字符串到前一个,但也有任意数量的 c。
但是,我觉得这个 CTF 比需要的要复杂一些。任何人都可以告诉我如何改进,如果,或者在错误的情况下 - 我错过了什么?
编辑: 在 rici 的一些很好的输入之后,我现在得到的是:
T --> aTb | cC
C --> cC | empty
通过删除任何冗余(例如可以通过 aTb
和 C
实现的 aCb
)以及非终结符 S
.
消除
S
。它除了收取薪水外什么都不做。T → a C b
是多余的,因为您已经有了T → a T b
和T → C
,它们显然可以做同样的事情(按顺序应用它们)。