简体   繁体   中英

How can I construct a grammar that generates this language?

I'm studying for a finite automata & grammars test and I'm stuck with this question:

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

I believe my productions should go along this lines:

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

How can my production for C remember the numbers of m and n? I'm guessing this must rather be a context-free grammar, if so, how should it be?

Seems like it should be like:

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

You need to force C'c to be counted during construction process. In order to show it's context-free, I would consider to use Pump Lemma .

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

where e == epsilon and X is unnecessary but added for clarity

Yes, this does sound like homework, but a hint:

Every time you match an 'a', you must match a 'c'. Same for matching a 'b'.

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

This means when ever you get a at least you have 1 c or if you get a and b you must have 2 c. i hope it has been helpful

Well guys, this is how I'll do it:

P={S::=X|epsilon,
   X::=aXc|M|epsilon,
   M::=bMc|epsilon}

My answer:

S -> aAc | aSc

A -> bc | bAc

where S is the start symbol.

S-> aBc/epsilon B-> bBc/S/epsilon This takes care of the order of the alphabets as well

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM