我正在研究有限的自动机和语法测试,我坚持这个问题:

Construct a grammar that generates L:
L = {a^n b^m c^m+n|n>=0, m>=0}

我相信我的作品应该遵循这条路线:

    S->aA | aB
    B->bB | bC
    C->cC | c Here's where I have doubts

我的C作品如何记住m和n的数量?我猜这必须是一个无上下文的语法,如果是这样,应该怎么做?

有帮助吗?

解决方案

似乎应该像:

A->aAc | aBc | ac | epsilon
B->bBc | bc | epsilon

你需要在施工过程中强制计算C'c。为了显示它的上下文,我会考虑使用 Pump Lemma

其他提示

是的,这听起来像家庭作业,但提示:

每次匹配'a'时,您必须匹配'c'。相同的匹配'b'。

S -> X
X -> aXc | Y
Y -> bYc | e

其中 e == epsilon X 是不必要的 为清晰起见而添加

S-> ASC | A A-> BAC |λ

这意味着当你得到一个至少你有1 c或如果你得到a和b你必须有2 c。 我希望它有所帮助

好吧,伙计们,我就是这样做的:

P={S::=X|epsilon,
   X::=aXc|M|epsilon,
   M::=bMc|epsilon}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top