Consider the following CFG:
Which of the following strings can be derived from the start symbol S?
Click on the arrow for the answer.
|S||→||B(S) | B | BC|
|B||→||a B | b b B | b|
|C||→||c C c | c | [B]|
- bbb ⇒
- Yes. Replace S with B and follow your nose.
- bb ⇒
- No. Starting from B, if
you introduce b, you must stop. So
you introduce bb, but you cannot stop there, so there is
no way to produce two bs.
You can only make odd numbers of bs.
- ba ⇒
- No. There is no way to introduce an a at the end of
- abbb(bccc) ⇒
- Yes. Use S → B(S), then use S → BC
on the second S.
- bbb[ab] ⇒
- Yes. Start with S → BC, and use C → [B],
then you can derive each part from B.
- cabc ⇒
- No. To generate a c, you must introduce a C.
From S, you can't use S → B(S) since you don't
want the parens. You can't use S → B since you can never
introduce a C. So you must start with S → BC. But
anything that comes from B must start with a or
b. So nothing can generate cabc.
- bbab(bc[b]c) ⇒
- Yes. Start with S → B(S) → B(BC) → B(BcCc)→B(Bc[B]c).
Proceed from there.
- bbbccc ⇒