5

我正在学习有限自动机和语法测试,但我遇到了这个问题:

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 的数字?我猜这一定是一个上下文无关的语法,如果是这样,它应该是怎样的?

4

6 回答 6

8

似乎应该是这样的:

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

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

于 2009-06-20T16:02:18.237 回答
4
S -> X
X -> aXc | Y
Y -> bYc | e

哪里e == epsilonX是不必要的,但为了清楚起见添加

于 2010-12-04T08:00:33.740 回答
2

是的,这听起来确实像家庭作业,但有一个提示:

每次匹配“a”时,都必须匹配“c”。与匹配“b”相同。

于 2009-06-20T15:58:05.880 回答
0

S->aSc|A A->bAc|λ

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

于 2013-05-14T04:15:18.227 回答
0

好吧,伙计们,我将这样做:

P={S::=X|epsilon,
   X::=aXc|M|epsilon,
   M::=bMc|epsilon}
于 2016-02-16T14:58:21.867 回答
0

我的答案:

S -> aAc | aSc

A -> 公元前 | bAc

其中 S 是起始符号。

于 2019-12-07T15:52:45.853 回答